【发布时间】: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
【问题讨论】:
标签: signal-processing fft spectrum