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

Why are peak sizes of equal amplitude signal components NOT equal in the FFT frequency-domain representation?

我在这里包括了我的原始 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

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