我有以下
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,但是看看我在绘图上得到的值 - 这个系数是从哪里来的以及如何恢复原始振幅?
您需要除以样本数(在本例中为 1000)来缩放输出。然后,由于输入是实数且这是单侧 FFT 并且不存在负频率仓,因此您乘以 2。将为您提供所需的 1 和 0.5 振幅。