如何在信号的 FFT 中获得正确的频率幅度

问题描述 投票:0回答:1

我有以下

1Hz/10Hz
信号

import numpy as np

total_time = 5
sampling_frequency = 200

t = np.linspace(0, total_time , total_time * sampling_frequency)
signal = np.sin(2 * np.pi * 1 * t) + 0.5 * np.sin(2 * np.pi * 10 * t)

plt.plot(t, signal)

这就是我得到的离散 FFT

fft_spectrum = np.fft.rfft(signal)
fft_spectrum_abs = np.abs(fft_spectrum)

freq = np.fft.rfftfreq(signal.size, d=1./sampling_frequency)

plt.plot(freq, fft_spectrum_abs)
plt.xlabel("frequency, Hz")
plt.ylabel("amplitude, units")
plt.show()

根据我的原始信号,我预计 1Hz 处的峰值幅度为 1,10 处峰值的幅度为 0.5。我的系数相差了 500,但是看看我在绘图上得到的值 - 这个系数是从哪里来的以及如何恢复原始振幅?

python numpy signal-processing fft
1个回答
0
投票

您需要除以样本数(在本例中为 1000)来缩放输出。然后,由于输入是实数且这是单侧 FFT 并且不存在负频率仓,因此您乘以 2。将为您提供所需的 1 和 0.5 振幅。

© www.soinside.com 2019 - 2024. All rights reserved.