频谱分析的目的是通过分析信号的频谱组成,实现对信号特性的分析,便于后续的处理。时域信号一般可分为连续和离散信号,在计算机中处理的信号都要求为离散信号,即对于实际系统输入的连续模拟信号,首先要进行模/数转换(A/D转换)变为数字信号,之后才能在计算机中处理分析,这一般通过数据采集卡的A/D转换模块来完成。对于已经采集到计算机中的离散数字信号,有多种方法可以实现时域信号的频谱分析,这里介绍一下用快速傅里叶变换(FFT)实现原时域信号的频谱分析。
这其中要考虑的几个重要问题包括:
-
采样频率的设定:
Nyquist条件给出了采样频率设定的基本原则, 即采样频率必须大于等于信号频率的2倍。具体设定时,采样频率要能够大于等于信号中最高频率分量值的2倍,令fs表示采样频率,fh表示信号频谱的最高频率,那么要求: fs>=2fh, 否则将出现频谱混叠现象。一般在工程上选择采样频率为信号最高频率的5~10倍。 -
采样长度的设定:
在模拟进行频谱分析时,要自行设定采样点数N或采样的时间长度T。 在FFT变换后,频谱中能够区分出的最小频率刻度就是变换后的频率分辨率,满足:df=fs/n, n为FFT 变换的点数注意,fs是1s采集的点数,也就是频率为1Hz下采集的点数,采集点数为n的话,那就是频率为[(fs/n)*1Hz下采集的点数,
即FFT结果只能表示kdf (k=0,1,2,…)频率坐标上的信号幅值,如果信号中的频率分量值不等于kdf,而介于kdf与(k+1)df之间时,FFT变换的结果会将该频率分量的幅值泄露到其邻近的频率坐标位置上,从而出现FFT分析的信号泄露情况。因此,应当合理设定采样点数,使得信号中的各频率分量值能够被df整除,或者直接采集很多数据,频率分辨率足够小的话,也能够减轻信号泄露情况
从而使得变换后的信号频谱能够更好地描述信号特性。 -
FFT变换特性:
FFT算法特性使得变换后不仅包括正频率部分,也包括负频率部分,如设置采样频率为120Hz,采样信号中包括频率分量10Hz、50Hz,则可知满足Nyquist采样定理,不会出现频谱混叠;经过FFT变换后,在频率坐标的10Hz和50Hz位置处将出现频谱峰值,而在110Hz和70Hz位置也同样出现,其实即是变换后的负频率成分-10Hz、-50Hz搬移120Hz后的结果。因此在分析上仅使用单边的变换结果就够用了。 - Matlab实现示例程序
%FFT变换子程序
function [F_v,Mag_v] = myFFT(input_data,Fs)
Num = length(input_data);
n = 0:Num-1;
%t = n/Fs;
Y = fft(input_data)/Num;
Mag_v = 2*abs(Y(1:1:Num/2));
F_v = (0:Num/2-1)'*Fs/Num;
end
- 信号分析示例
时域信号 | 频域信号 |
---|---|