|
在matlab或R里我们可以直接调用FFT函数实现快速傅里叶变换,然而FFT的输出到底是什么含义,经常让初学者们一头雾水。实际上,它不过是每个采样点(共N个)对应的振幅(可能叫振幅不是很贴切,准确地讲它们的绝对值才是振幅)或者能量值(该值的绝对值越大,说明该点对应的周期越明显)。
注意:在这些输出值中,第一个值是对应的直流分量的振幅(其实就是周期为无穷的可能性),那么第2个值对应第1个采样点,第3个对应第2个。。第n个对应第n-1个采样点。而且这个输出是对称的,也就是大家直接关注前N/2个才样点就可以了。那么第n个点的频率是多少呢,它的计算公式是Fn=(n-1)*Fs/N,其中Fs是采样频率。由此就可以计算出n点对应的周期了,它是频率的倒数,即Tn=N/((n-1)*Fs)。下面给出两个例子:
例一:>>A=[1,2,1,2,1,2];
>>fft(A)
ans= 9 0 0 -3 0 0
这里输出的意思是,序列A有很大的可能没有周期(第一个点的频率为0,它对应的数字是9),还有一个可能的周期是-3对应的周期,这个周期的计算方法是:-3对应于n=4,默认Fs=1,这里T=6/(3*1)=2,即周期为2。看明白了吗?
例二: Fn=5; %频率
N=300; %caiyang dian
Fs=40; %cai yang pinlv
t=[0:1/Fs:N/Fs];
S=cos(2*pi*Fn*t);
abs(fft(S));
plot(abs(fft((S))));
如果按照以上的公式计算一下,就会得到该函数的对应频率Fn=5.
总而言之一句话,这些输出的绝对值就是序列对应的二维频域图上的点,它的横坐标是采样点,纵坐标是振幅,由它我们可以计算序列可能的频率或周期等值。