如何由fft运算结果得出组成原始信号的各分量的频率及功率

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何由fft运算结果得出组成原始信号的各分量的频率及功率相关的知识,希望对你有一定的参考价值。

问题如题!请说得详细一点儿,最好有公式,有C的算法最好。

参考技术A fft运算的结果是一个包含实部和虚部的复数,如:x[n]=x[n].real+x[n].img;各分量的功率计算为:
p[n]=(x[n].real*x[n].real+x[n].img*x[n].img)/n;总功率为:各分量功率和。分量频率为:分辨率*序列号,分辨率=采样频率/n。
参考技术B 用了递归方式,用了树的方式降低计算量

np.fft.fft()结果的物理意义

参考技术A 采样定理:采样频率大于信号中最高频率的2倍时,采样后的数字信号可以完整地恢复出原始信号。一般实际应用中保证采样频率为信号最高频率的2.56~4倍。

假设信号频率为F,采样频率为Fs,采样点数为N。为了方便进行FFT运算,通常N取2的整数次幂。

N个采样点,经过fft变换后的结果为N个复数,每个复数对应一个频率(第n<=N/2个点对应的频率为 (n-1)/N*Fs ),该复数的模值表示该频率的振幅特征。该振幅特征和原始信号的振幅之间的关系是: 如果原始信号的振幅为A,则fft结果的每个点(除了第一个直流分量点)的模值就是A的N/2倍;而第一个点的模值是直流分量振幅的N倍。
注意:这N个复数点去掉第一个点后剩下的N-1个点是关于其中心共轭对称的,因此实际只需要取前一半点的频谱即可,因为共轭对称的两个点的模值(振幅)相同。

我们先模拟一个一维时序信号 y ,它由2V的直流分量(0Hz),和振幅为3V,频率为50Hz的交流信号,以及振幅为1.5V,频率为75Hz的交流信号组成:
y = 2 + 3*np.cos(2*np.pi*50*t) + 1.5*np.cos(2*np.pi*75*t)
然后我们采用256Hz的采样频率,总共采样256个点。
傅里叶变换结果如下图所示, no normalization 对应的是原始的fft结果, normalization 是将fft结果的振幅特征转换为原始信号的振幅,可以看到振幅为2V,3V,1.5V的信号分别被解析了出来。

以上是关于如何由fft运算结果得出组成原始信号的各分量的频率及功率的主要内容,如果未能解决你的问题,请参考以下文章

Python ifft

使用 FFT 获取频率分量

关于用FFT分析信号频谱的问题

使用 FFT 的通道声码器 - 如何处理直流分量和奈奎斯特频率?

基于MATLAB的FFT傅立叶分析

为啥等幅信号分量的峰值大小在 FFT 频域表示中不相等?