FFT的输入和输出:
输入2^n的numpy数组,输出2^n的numpy complex类型数组
>>> x = np.random.rand(8)
>>> x
array([ 0.15562099, 0.56862756, 0.54371949, 0.06354358, 0.60678158,
0.78360968, 0.90116887, 0.1588846 ])
>>> xf = np.fft.fft(x)
>>> xf
array([ 3.78195634+0.j , -0.53575962+0.57688097j,
-0.68248579-1.12980906j, -0.36656155-0.13801778j,
0.63262552+0.j , -0.36656155+0.13801778j,
-0.68248579+1.12980906j, -0.53575962-0.57688097j])
FFT的逆变换,变换回来
>>> np.fft.ifft(xf)
array([ 0.15562099 +0.00000000e+00j, 0.56862756 +1.91940002e-16j,
0.54371949 +1.24900090e-16j, 0.06354358 -2.33573365e-16j,
0.60678158 +0.00000000e+00j, 0.78360968 +2.75206729e-16j,
0.90116887 -1.24900090e-16j, 0.15888460 -2.33573365e-16j])
FFT的输出特点
- 下标为0和N/2的两个复数的虚数部分为0,
- 下标为i和N-i的两个复数共轭,也就是其虚数部分数值相同、符号相反。
FFT的有用信息
由于虚数部共轭和虚数部为0等规律,真正有用的信息保存在下标从0到N/2的N/2+1个虚数中, 又由于下标为0和N/2的值虚数部分为0,因此只有N个有效的实数值。
FFT的物理含义
- 首先下标为0的实数表示了时域信号中的直流成分的多少
- 下标为i的复数a+b*j表示时域信号中周期为N/i个取样值的正弦波和余弦波的成分的多少, 其中a表示cos波形的成分,b表示sin波形的成分
例子:
让我们通过几个例子来说明一下,下面是对一个直流信号进行FFT变换:
>>> x = np.ones(8)
&g