【全文大纲】 : https://blog.youkuaiyun.com/Engineer_LU/article/details/135149485
概要
说明:
1. DFT - 离散傅里叶变换
2. FFT - 离散傅里叶快速变换
1 . 解析
1.1 DFT
X k = ∑ n = 0 N − 1 x n ⋅ e − j 2 π N k n X_k = \sum_{n=0}^{N-1}x_n ⋅ e^{-j \frac{2π}Nkn} Xk=n=0∑N−1xn⋅e−jN2πkn
实部
R e a l ( X k ) = ∑ n = 0 N − 1 x ( n ) ⋅ c o s ( 2 π N k n ) Real(X_k) = \sum_{n=0}^{N-1}x(n) ⋅ cos(\frac{2π}Nkn) Real(Xk)=n=0∑N−1x(n)⋅cos(N2πkn)
虚部
I m a g ( X k ) = − ∑ n = 0 N − 1 x ( n ) ⋅ s i n ( 2 π N k n ) Imag(X_k) =- \sum_{n=0}^{N-1}x(n) ⋅ sin(\frac{2π}Nkn) Imag(Xk)=−n=0∑N−1x(n)⋅sin(N2πkn)
计算
∣ X 0 X 1 X 2 X 3 ∣ = ∣ 0 0 0 0 0 1 2 3 0 2 4 6 0 3 6 9 ∣ ∣ + 0.5 − 0.3 − 0.5 + 0.3 ∣ \left|\begin{matrix} X_0\\ X_1\\ X_2\\ X_3\\ \end{matrix} \right| = \left|\begin{matrix} 0 & 0 & 0 & 0\\ 0 & 1 & 2 & 3\\ 0 & 2 & 4 & 6\\ 0 & 3 & 6 & 9\\ \end{matrix} \right| \left|\begin{matrix} +0.5\\ -0.3\\ -0.5\\ +0.3\\ \end{matrix} \right| X0X1X2X3 = 0000012302460369 +0.5−0.3−0.5+0.3
复数递增频率 F s N \frac{F_s}N NFs ,例如 F s F_s Fs为 16Hz (采样频率),一共4个点来运算,则分辨率为 4 ,复数递增频率为 4Hz ,因此上图中可以测出四个频率
- X 0 X_0 X0 : 0Hz
- X 1 X_1 X1 : 4Hz
- X 2 X_2 X2 : 8Hz
- X 3 X_3 X3 : 12Hz
幅度用实部和虚部以及有效数量 N 2 \frac N 2 2N来算, [ R e a l ( X k ) ] 2 + [ I m a g ( X k ) ] 2 N 2 \frac {\sqrt{[Real(X_k)]²+[Imag(X_k)]²}}{\frac N 2} 2N[Real(Xk)]2+[Imag(Xk)]2
相位用反正切计算, a r c t a n ( I m a g ( X k ) R e a l ( X k ) ) arctan(\frac{Imag(X_k)}{Real(X_k) }) arctan(Real(Xk)Imag(Xk))
1.2 FFT
FFT比DFT执行快指数倍,基于DFT的周期性,对称性,通过旋转因子 e − j 2 π N k n e^{-j \frac{2π}Nkn} e−jN2πkn 把DFT公式 X ( k ) = ∑ n = 0 N − 1 x ( n ) ⋅ e − j 2 π N k n X(k) = \sum_{n=0}^{N-1}x(n) ⋅ e^{-j \frac{2π}Nkn} X(k)=∑n=0N−1x(n)⋅e−jN2πkn 解耦成奇偶项
X ( k ) = X e v e n ( k ) + W N k X o d d ( k ) , k = 0 , 1 , . . N / 2 − 1 X(k) = X_{even}(k) + W_N^kX_{odd}(k),k=0,1,..N/2-1 X(k)=Xeven(k)+WNkXodd(k),k=0,1,..N/2−1
X ( k + N / 2 ) = X e v e n ( k ) − W N k X o d d ( k ) , k = 0 , 1 , . . N / 2 − 1 X(k+N/2) = X_{even}(k) - W_N^kX_{odd}(k),k=0,1,..N/2-1 X(k+N/2)=Xeven(k)−WNkXodd(k),k=0,1,..N/2−1
X e v e n 1 ( k ) = X e v e n 2 ( e v e n ) ( k ) + W N / 2 k X e v e n 2 ( o d d ) ( k ) , k = 0 , 1 , . . N / 4 − 1 X_{even^1}(k) = X_{even^2(even)}(k)+W_{N/2}^kX_{even^2(odd)}(k),k=0,1,..N/4-1 Xeven1(k)=Xeven2(even)(k)+WN/2kXeven2(odd)(k),k=0,1,..N/4−1
X e v e n 2 ( k ) = X e v e n 3 ( e v e n ) ( k ) + W N / 4 k X e v e n 3 ( o d d ) ( k ) , k = 0 , 1 , . . N / 8 − 1 X_{even^2}(k) = X_{even^3(even)}(k)+W_{N/4}^kX_{even^3(odd)}(k),k=0,1,..N/8-1 Xeven2(k)=Xeven3(even)(k)+WN/4kXeven3(odd)(k),k=0,1,..N/8−1
X o d d 1 ( k ) = X o d d 2 ( e v e n ) ( k ) − W N / 2 k X o d d 2 ( e v e n ) ( k ) , k = 0 , 1 , . . N / 4 − 1 X_{odd^1}(k) = X_{odd^2(even)}(k)-W_{N/2}^kX_{odd^2(even)}(k),k=0,1,..N/4-1 Xodd1(k)=Xodd2(even)(k)−WN/2kXodd2(even)(k),k=0,1,..N/4−1
X o d d 2 ( k ) = X o d d 3 ( e v e n ) ( k ) − W N / 2 k X o d d 3 ( e v e n ) ( k ) , k = 0 , 1 , . . N / 8 − 1 X_{odd^2}(k) = X_{odd^3(even)}(k)-W_{N/2}^kX_{odd^3(even)}(k),k=0,1,..N/8-1 Xodd2(k)=Xodd3(even)(k)−WN/2kXodd3(even)(k),k=0,1,..N/8−1
X e v e n = ∑ m = 0 N / 2 − 1 x ( 2 m ) ∗ W n k ∗ 2 m X_{even} = \sum_{m=0}^{N/2-1}x(2m)*W_n^{k*2m} Xeven=m=0∑N/2−1x(2m)∗Wnk∗2m
X o d d = ∑ m = 0 N / 2 − 1 x ( 2 m + 1 ) ∗ W n k ∗ ( 2 m + 1 ) X_{odd} = \sum_{m=0}^{N/2-1}x(2m+1)*W_n^{k*(2m+1)} Xodd=m=0∑N/2−1x(2m+1)∗Wnk∗(2m+1)
每个DFT复数都可以解耦成奇偶项复数,根据分治思想迭代,可以一直迭代下去,直到迭代到最原始的复数,当获取到最原始的基偶复数后只需要进行加减组合迭代回来就可以得到结果,这样把大部分的乘法运算转换为加减法运算,大幅度简化了DFT的运算,从而可以快速实现离散傅里叶变换。
2 . 技术名词解释
- X(k) : 复数矩阵
- k : 具体的某个复数
- n : 复数内的分量递进,x(n)则是每一刻的采样点数据
- x :输入矩阵,例如采样到的电压
- e :自然底数
- N :复数的数量
- j :虚数
- W n W_n Wn : e − j 2 π N e^{-j \frac{2π}N} e−jN2π
3 . 小结
实际上就是遍历点,如果遍历的点和采样信号越同相,说明遍历的频率越准确,因为不同相会被积分抵消掉或者衰减掉,越同相无论在哪个象限都会正数,正正得正,负负得正,幅度也是一样,然后实部和虚部要有理解,其实这里的复数其中的虚部i只是强调了正交性,重点只是把相位解耦成横轴分量和纵轴分量,虚部越强,越体现信号当前在纵轴,仅此而已,以上就是离散傅里叶变换的大致过程。
技术交流QQ群 : 745662457
群内专注问题答疑,项目外包,技术研究