FFT变换用于频谱分析


    FFT就是快速傅里叶变换(Fast Fourier Transform),在Matlab中它是实现离散傅立叶变换DFT(Discrete Fourier Transform)的快速算法。作为对信号进行频谱分析的有力工具,它的实现很简单,一条语句就可以:

               Y = fft(x) 或 Y = fft(x, N)

    可以自己指定FFT变换的点数为N,也可以不指定,变换后Y的维数与x完全一致。

    设x的维数为m,若m<N, 则fft函数会在x 序列末尾添加0,增加其长度到N; 若m>N, 则会截取x 的前N个序列元素进行fft变换。

  

    频率分析的目的是通过分析信号的频谱组成,实现对信号特性的分析,便于后续的处理。时域信号一般可分为连续和离散信号,在计算机中处理的信号都要求为离散信号,即对于实际系统输入的连续模拟信号,首先要进行模/数转换(A/D转换)变为数字信号,之后才能在计算机中处理分析,这一般通过数据采集卡的A/D转换模块来完成。

    对于已经采集到计算机中的离散数字信号,可以通过FFT变换实现原时域信号的频谱分析。这其中要考虑的几个重要问题包括:

1)  采样频率的设定:

    Nyquist条件给出了采样频率设定的基本原则, 即采样频率必须大于等于信号频率的2倍。具体设定时,采样频率要能够大于等于信号中最高频率分量值的2倍,令fs表示采样频率,fh表示信号频谱的最高频率,那么要求: fs>=2fh, 否则将出现频谱混叠现象。一般在工程上选择采样频率为信号最高频率的5~10倍。

2)  采样长度的设定:

    在模拟进行频谱分析时,要自行设定采样点数N或采样的时间长度T。

   在FFT变换后,频谱中能够区分出的最小频率刻度就是变换后的频率分辨率,满足:df=fs/n, n为FFT 变换的点数;即FFT结果只能表示k*df (k=0,1,2,…)频率坐标上的信号幅值,如果信号中的频率分量值不等于k*df,而介于k*df与(k+1)*df之间时,FFT变换的结果会将该频率分量的幅值泄露到其邻近的频率坐标位置上,从而出现FFT分析的信号泄露情况。因此,应当合理设定采样点数,使得信号中的各频率分量值能够被df整除,从而使得变换后的信号频谱能够更好地描述信号特性。

3)  FFT变换特性:

     FFT算法特性使得变换后不仅包括正频率部分,也包括负频率部分,如设置采样频率为120Hz,采样信号中包括频率分量10Hz、50Hz,则可知满足Nyquist采样定理,不会出现频谱混叠;经过FFT变换后,在频率坐标的10Hz和50Hz位置处将出现频谱峰值,而在110Hz和70Hz位置也同样出现,其实即是变换后的负频率成分-10Hz、-50Hz搬移120Hz后的结果。因此在分析上仅使用单边的变换结果就够用了。

 

Matlab中FFT变换实现频谱分析的基本代码如下:

 

fs = 100;                                 % 设定采样频率

N = 100;                                 % 设定采样的点数

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

 

% 生成仿真的时域信号,用采样频率fs对其采样

x = 1/fs*sin(2*pi*25*t);          % 信号频率为25Hz

 

% 画出时域波形

figure(1)

plot(t,x);

grid on

title('时域信号x(t)');

xlabel('t')

ylabel('x(t)')

 

% 对x(t)进行FFT变换

Y = fft(x)/N;               

magY = 2*abs(Y(1:1:N/2));     % 求出信号的频谱幅值

f = (0:N/2-1)*fs/N;                % 设定频域的频率坐标轴分量值,频率分辨率为fs/N

 

figure(2)

plot(f,magY);                          % 绘制连续的幅频响应曲线

 

figure(3)

h = stem(f,magY,'fill','--');       % 采用stem函数绘制离散的幅频响应曲线

set(h,'MarkerEdgeColor','red','Marker','*')

grid on

title('x(t)的幅频响应');

xlabel('频率(Hz)')

ylabel('幅值')

 

以下结果是我的另一个仿真程序的运行结果,通过设定不同的变换点数,可以发现有效避免了信号泄露现象。

 正确设定变换点数,避免FFT分析的信号泄露情况


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM