matlab基于fft的频谱分析_matlab中fft的正确简单理解

matlab基于fft的频谱分析_matlab中fft的正确简单理解Matlab的信号频谱分析——FFT变换Matlab的信号频谱分析——FFT变换Matlab的信号频谱分析FFT是离散傅立叶变换的快速算法,可以将一个时域信号变换到频域。有些信号在时域上是很难看出什么特征的。但是如果变换到频域之后,就很容易看

Matlab的信号频谱分析——FFT变换   Matlab的信号频谱分析——FFT变换   Matlab的信号频谱分析   FFT是离散傅立叶变换的快速算法,可以将一个时域信号变换到频域。   有些信号在时域上是很难看出什么特征的。但是如果变换到频域之后,就很容易看出特征了。   这就是很多信号分析采用FFT变换的原因。   另外,FFT可以将一个信号的频谱提取出来,这在频谱分析方面也是经常用的。   通俗点说FFT就是将一个信号解析成是由不同频率、幅值,相位的正弦波叠加而成的。   fft 函数出来的是个复数,每一个点分实部虚部两部分。假设采用1024点 fft,采样频率是 fs,那么第一个点对应 0 频率点,第512点对应的就是 fs/2 的频率点。然后从头开始找模值最大的那个点,其所对应的频率值应该就是你要的基波频率了。   【一个模拟信号,经过ADC采样之后,就变成了数字信号。根据采样定理,采样频率要大于信号频率的两倍。采样得到的数字信号,就可以做FFT变换了。N个采样点,经过FFT之后,就可以得到N个点的FFT结果。为了方便进行FFT运算,通常N取2的整数次方。】   fft 快速傅里叶变换   语法   描述   FFT变换的步骤:   1、对模拟信号离散化   一个模拟信号,经过ADC采样之后,就变成了离散的数字信号。   2、采样频率(Fs)的选取   根据采样定理,采样频率需大于信号频率的两倍(一般取2.5~3)。   3、采样点数( N )的选取   在FFT变换中,输入N个采样点,就有N个变换结果,每个结果都是一个复数。   每个结果都和上面所说的一个正弦信号的频率、幅值,相位对应。   复数的幅值和正弦信号的幅值对应,相位和相位对应。   而其频率的对应关系为:假设第n个结果,则其对应的频率为 Fn = (n-1)*Fs/N 。   Fs/N为分辨率,例如采样频率Fs 为 1024Hz,采样点数为 1024点,   则每个结果以 1HZ 的频率步长递增。如果采样频率Fs 为 1024Hz,采样点数为 2048点,   则每个结果以 0.5HZ 的频率步长递增。我们讲其分辨率为 0.5HZ。   如果要提高频率分辨力,则必须增加采样点数,也即采样时间。   频率分辨率和采样时间是倒数关系。   注意:为了方便进行FFT运算,通常N取2的整数次方。   频率分辨率和采样时间是倒数关系。假设FFT之后某点 n 用复数 a+bi 表示,那么这个复数的模就是
An=sqrt{a^{2}+b^{2}},相位就是
Pn = arctan 2(b,a)。根据以上的结果,就可以计算出 n点(n≠1,且n<=N/2)对应的信号的表达式为:
Y = An/(N/2)*cos(2*pi*Fn*t+Pn),即
Y = 2*An/N*cos (2*pi*Fn*t+Pn) 。对于 n=1 点的信号,是直流分量,幅度即为 A1/N。由于FFT结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。   例:假设我们有一个信号,它含有一个2V的直流分量,一个频率为50Hz、相位为-30度、幅度为3V的交流信号,以及一个频率为75Hz、相位为90度、幅度为1.5V的交流信号。   用数学表达式就是如下:
S = 2 + 3*cos(2*pi*50*t - pi*30/180) + 1.5*cos(2*pi*75*t + pi*90/180)   式中,cos 参数为弧度,所以-30度和90度要分别换算成弧度。   我们以256Hz的采样率对这个信号进行采样,总共采样256点。   按照我们上面的分析,Fn=(n-1)*Fs/N,我们可以知道,每两个点之间的间距就是1Hz,第 n个点的频率就是 n-1。我们的信号有 3个频率:0Hz、50Hz、75Hz,应该分别在第 1个点、第 51个点、第 76个点上出现峰值,其它各点应该接近0。   实际情况如何呢?   我们来看看FFT的结果的模值如下图所示:   
matlab基于fft的频谱分析_matlab中fft的正确简单理解   很明显,1点、51点、76点的值都比较大,它附近的点值都很小,可以认为是 0,即在那些频率点上的信号幅度为 0。接着,我们来计算各点的幅度值。分别计算这三个点的模值,结果如下: 1点: 51251点:38476点:192   按照公式,可以计算出直流分量为:512/N = 512/256 = 2;50Hz信号的幅度为:384/(N/2) = 384/(256/2) = 3;75Hz信号的幅度为192/(N/2) = 192/(256/2) = 1.5。可见,从频谱分析出来的幅度是正确的。   Matlab 程序如下:   
matlab基于fft的频谱分析_matlab中fft的正确简单理解   
matlab基于fft的频谱分析_matlab中fft的正确简单理解   
matlab基于fft的频谱分析_matlab中fft的正确简单理解   
matlab基于fft的频谱分析_matlab中fft的正确简单理解   总结   总结:假设采样频率为Fs,采样点数为N,做N点FFT之后,某一点n(n从1开始)表示的频率为:Fn=(n-1)*Fs/N;该点的模值除以 N/2 就是对应该频率下的信号的幅度(对于直流信号是除以N);该点的相位即是对应该频率下的信号的相位。相位的计算可用函数 atan2(b,a) 计算。atan2(b,a) 是求坐标为(a,b)点的角度值,范围从 -pi 到 pi 。要精确到 xHz,则需要采样长度为1/x秒的信号,并做FFT。要提高频率分辨率,就需要增加采样点数,这在一些实际的应用中是不现实的,需要在较短的时间内完成分析。解决这个问题的方法有频率细分法,比较简单的方法是采样比较短时间的信号,然后在后面补充一定数量的0,使其长度达到需要的点数,再做FFT,这在一定程度上能够提高频率分辨力。   实例:   例:某信号由3个正弦信号组成,频率分辨率分别为1Hz、2.5Hz、3Hz,采样频率为10Hz。分别以N=20、40、128来分析该信号。   
matlab基于fft的频谱分析_matlab中fft的正确简单理解   
matlab基于fft的频谱分析_matlab中fft的正确简单理解   从图中可以看出,   当N=20点时,虽然2.5Hz和3Hz这两个峰值大致能分开,但还是不太明显,可以认为是两个峰值,也可能被误认为有一个峰值在这两点之间。   当N=40时这两个峰值十分明显了,因为N增加一倍后在这两点之间增加了一个谷值,从而突出了峰值。   而当N=128时峰值更明显了,但是由于栅栏现象和矩形窗泄露存在,3个正弦信号虽然输入幅值相同,但从频域上反映出的幅值各不相同。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/71402.html

(0)
上一篇 2024年 8月 6日
下一篇 2024年 8月 6日

相关推荐

关注微信