对matlab中fft函数使用的一些粗浅理解
(2019-09-22 14:10:47)| 分类: 信号处理 |
matlab中提供了快速傅里叶变换的计算函数fft
对于时间离散序列x,其傅里叶变换用matlab可以表示
fft(x,N)
函数的输入参数N表示的是时间离散序列x参与fft运算的点的个数,而不是信号x的采样频率。
假设
y=fft(x,N)
那么返回序列y的长度也为N(可参考离散傅里叶变换相关理论)。
另一方面为了使得时域信号和频域信号能量相等,即频域信号获得正确的幅值,需要对fft运算后的信号除以N,以保证频域信号能量正确。至于为什么要除以N,这个和matlab中fft计算算法有关,具体我也不知道(matlab中fft算法不公开),但是如果要正确使用fft,保证频域信号能量正确,这个步骤是必不可少的。
总结一句话,就是N决定fft返回值的长度,以及fft返回频谱序列的能量。这和输入信号x的采样频率等性质没有太大关系。
实际中,我们经常需要对实数序列x进行傅里叶变换获得它的频谱,画出傅里叶变换后的幅值图我们发现变换后的信号是一个对称信号。
实际上,根据相关理论,长度为N的实数序列fft后获得的是长度为N,关于序列中心共轭对称(一些经典教材上将这种对称定义为圆周对称)的复数序列。这也就是为什么实数时间信号x用fft计算后变成对称的虚数的原因。因此在对这一类信号fft后信号做图时,只需要表示1:N/2个数的原因。
另外一个自然而然的问题是:既然fft后有N个变换后信号,变换后信号的N个点代表分别代表那些频率?
结论是:fft后序列最后一个点代表最大频率即信号的采样频率。那么离散时间序列x的采样频率为fs,则fft返回值的N个点代表的频率依次是N:fs/N:fs/fs。
前一篇:取整方式总结
后一篇:复信号求能量幅值的技巧

加载中…