频谱分析之FFT

参考:http://blog.sina.com.cn/s/blog_a07f4fe301013gj3.html

FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这就是很多信号分析采用FFT变换的原因。

频率是表征数据变化剧烈程度的指标,是数据在平面空间上的梯度.从物理效果看,傅立叶变换是将图像从空间域转换到频率域.现在就根据实际经验来说说FFT结果的具体物理意义。一个模拟信号,经过ADC采样之后,就变成了数字信号。采样定理告诉我们,采样频率要大于信号频率的两倍。 采样得到的数字信号,就可以做FFT变换了。N个采样点,经过FFT之后,就可以得到N个点的FFT结果。为了方便进行FFT运算,通常N取2的整数次方。

傅立叶变换后的频谱图,也叫功率图或幅频图.除了中心以外还存在以某一点为中心,对称分布的亮点集合,这个集合就是干扰噪音产生的,这时可以很直观的通过在该位置放置带阻滤波器消除干扰。

假设采样频率为Fs,信号频率F,采样点数为N.那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。 Fn所能分辨到的最小频率为Fs/N.如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。

假设FFT之后某点n用复数a+bi表示,那么这个复数的模就是An=根号a*a+b*b,相位就是Pn=atan2(b,a)。根据以上的结果,就可以计算出n点(n≠1,且n<=N/2)对应的信号的表达式为:An/(N/2)*cos(2*pi*Fn*t+Pn),即2*An/N*cos(2*pi*Fn*t+Pn)。对于n=1点的信号,是直流分量,幅度即为A1/N。由于FFT结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。

PS:

如果像例子中那样对比数据,首要条件是知道信号的数学模型,提取相应频率,与频谱图对比确认是否分析正确.

频率图更像是一种参考标准,相比时域数据,在频域更能分析信号强度或噪声信息, 再据此选择相应方法进行滤波.

matlab实现如下:

 1 data=xlsread('mov_ang_v.xlsx');
 2 data_single=data(:,3);
 3 N=length(data_single);%数据长度
 4 fs=100;%设定采样频率
 5 i=0:N-1;
 6 y=fft(data_single,N);%进行fft变换
 7 mag=abs(y);%求幅值
 8 f=(0:N-1)*fs/N;
 9 power=mag.^2;
10 figure
11 plot(f,power,'*');%semilogx(f,power);
原文地址:https://www.cnblogs.com/lqc-blog/p/14520819.html