我似乎使用np.fft.fft计算了原始波的错误振幅。
如图所示的fft曲线图,可以看到所示的幅度约为3和1.5,但如果您查看代码,我使用幅度7和3来生成信号。该曲线图应该有两个尖峰,在x=13时达到y=3,在x=15时达到y=7
我需要做什么才能在图表中看到正确的振幅(3和7)?
我可以通过实验看到,我需要乘以振幅的常数大约是2.3,但是我如何精确地计算这个数字呢?
import numpy as np
import matplotlib.pyplot as plt
t0 = 0
t1 = 20
n_samples = 1000
xs = np.linspace(t0, t1, n_samples)
# Generate signal with amplitudes 7 and 3
ys = 7*np.sin(15 * 2 * np.pi * xs) + 3*np.sin(13 * 2 * np.pi * xs)
np_fft = np.fft.fft(ys)
amplitudes = 1/n_samples * np.abs(np_fft) #This gives wrong results
frequencies = np.fft.fftfreq(n_samples) * n_samples * 1/(t1-t0)
plt.plot(frequencies[:len(frequencies)//2], amplitudes[:len(np_fft)//2])
plt.show()
1条答案
按热度按时间bbuxkriu1#
我想你计算错了振幅。你应该改变
到
结果:
amplitudes
的峰值不完全是7
和2
,但如果增加n_samples
,它们将变得更准确。