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

Posted

技术标签:

【中文标题】为啥等幅信号分量的峰值大小在 FFT 频域表示中不相等?【英文标题】:Why are peak sizes of equal amplitude signal components NOT equal in the FFT frequency-domain representation?为什么等幅信号分量的峰值大小在 FFT 频域表示中不相等? 【发布时间】:2021-04-26 15:36:05 【问题描述】:

我在这里包含了我的原始 Matlab 代码,但我认为对于非 Matlab 用户来说理解这些行在做什么已经足够清楚了。我也在 Python 上对此进行了测试,并得到了相同的结果。我所做的基本上是将三个不同频率但幅度相等的正弦曲线相加,然后我分解组合信号以观察功率谱峰值。问题是,根据采样点的数量和采样频率,由于分量信号具有相同的幅度,峰值大小彼此之间的比率不同,而不是大小相等。如果我们将 FFT 视为某种形式的点积,那么为什么手动进行点积(在信号和正弦波之间)会给出正确的结果,但 FFT 取决于样本数和采样频率?谢谢。

fs = 10;
time = 0:1/fs:205; % in seconds
freqs = [0.05, 0.1, 0.3]; % Hz
signal = zeros(1, length(time));
for f_i = 1:length(freqs)
    signal = signal + sin(2*pi*freqs(f_i)*time);
end
power_spectrum = abs(fft(signal)).^2 % Of course I'm just skipping the trimming part here
plot(power_spectrum)

您可以在此处查看调整后的图:spectrum

【问题讨论】:

【参考方案1】:

您看到的是频谱泄漏。比如说,如果你有频率 a2 的正弦波,但 DFT 只有频率 a1 和 a3 最接近 a2,a1a 处看到的是在 a2 处的幅度,乘以 f(x)=sin(x)/x 的值,其中 x=x(a-a2)。例如见https://www.gaussianwaves.com/2011/01/fft-and-spectral-leakage-2/。

【讨论】:

非常感谢您的回答!所以峰值实际上是附近离散频率的值,因为 DFT 没有给出完美的狄拉克增量,如峰值。我也不太了解光谱泄漏的关系; x(a-a2) 的函数吗? x 类似于x=(a-a2)/pi,但我不记得 100%。也许(a-a2)/(pi/2) 什么的。我记得的是,如果 a2 实际上与 DFT 频率之一匹配,那么对于同样在 DFT 中的所有其他 as,sin(x)/x 将为零(因此它将是完美的狄拉克增量)。此外,我提供的公式仅适用于 DTFT,对于 DFT,它更像 sin(x)/sin(x/N) 或其他东西。请参阅 R. Lyons 的“理解数字信号处理”以获得没有任何积分或狄拉克增量的解释:)。 非常感谢!我真的希望尽可能深入地了解傅里叶变换。 :)

以上是关于为啥等幅信号分量的峰值大小在 FFT 频域表示中不相等?的主要内容,如果未能解决你的问题,请参考以下文章

音频信号中的峰值检测

为啥频域 FFT 幅度低于时域?

频谱分析仪

FFT的物理意义

从Matlab平台进行FFT到ARM平台C语言FFT频谱分析

使用许多紧凑频率时出现奇怪的 FFT 峰值