FFT之两三事

1. FFT原理

周期信号进行傅里叶变换(包括正弦周期和非正弦周期信号,正弦周期实际上利用正交性可以知道,除了对应的频率,其他谐波的积分都是0),可以将信号分解为一个无穷级数的和:

其中T为原周期信号的频率,因此,整个傅里叶变换将原信号分解为包括原周期在内的无数个谐波分量的三角集数和。

对于非周期信号,实际上,非周期信号可以被理解为周期为无限短的周期信号,因此,级数和也自然变成了积分:

2. 信号处理中FFT几点注意

1)能量泄露

采集到的周期为非整数时,端点是不连续的。 这些不连续片段在FFT中显示为高频成分。这些高频成分不存在于原信号中。 这些频率可能远高于奈奎斯特频率,在0~ 采样率的一半的频率区间内产生混叠。 使用FFT获得的频率,不是原信号的实际频率,而是一个改变过的频率。 类似于某个频率的能量泄漏至其他频率。 这种现象叫做 频谱泄漏。频率泄漏使好的频谱线扩散到更宽的信号范围中。

2)幅值修正

在进行FFT变换时,需要加窗函数,不论加什么窗,包括距形窗,在FFT之后主瓣的宽度是不同的,对矩形窗,主瓣宽度是4*pi/N,FFT的分辨率是2*pi/N,可以看出主瓣内含有2条谱线;而海宁窗,主瓣宽度是8*pi/N,可以看出主瓣内含有4条谱线。加窗以后需要对幅值进行修正,修正系数如下:


https://wenku.baidu.com/view/0a652f6b0b4c2e3f572763dd.html

3)长度为N的信号,做fft后的幅值*2/N

fs=1000;

N=5*fs;

t=(0:N-1)/fs;

x = 5*sin(2*pi*t)+10*sin(0.3*2*pi*t)+20*sin(0.7*2*pi*t);

X=fft(x);

N=length(x);n=1:N; n2=1:N/2+1;

freq=(n2-1)*fs/N;

stem(freq,abs(X(n2))*2/N); xlim([-0.05 1.5]); grid;

title('5*sin(2*pi*t)+10*sin(0.3*2*pi*t)+20*sin(0.7*2*pi*t)信号长5秒')

xlabel('频率/Hz'); ylabel('幅值');

你可能感兴趣的:(FFT之两三事)