从np计算振幅。

2024-05-19 00:22:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我似乎在计算原始波的振幅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()

enter image description here


Tags: importfftasnppipltsint1
1条回答
网友
1楼 · 发布于 2024-05-19 00:22:46

我想你估计错了振幅。你应该把

amplitudes = 1/n_samples * np.abs(np_fft)

^{pr2}$

结果:

import numpy as np
import matplotlib.pyplot as plt

t0 = 0
t1 = 1
n_samples = 10000

xs = np.linspace(t0, t1, n_samples)
ys = 7 * np.sin(15 * 2 * np.pi * xs) + 3 * np.sin(13 * 2 * np.pi * xs)

plt.subplot(2, 1, 1)
plt.plot(xs, ys)

np_fft = np.fft.fft(ys)
amplitudes = 2 / n_samples * np.abs(np_fft) 
frequencies = np.fft.fftfreq(n_samples) * n_samples * 1 / (t1 - t0)

plt.subplot(2, 1, 2)
plt.semilogx(frequencies[:len(frequencies) // 2], amplitudes[:len(np_fft) // 2])

plt.show()
^{bq}$

amplitudes的峰值并不完全是7和{},但如果增加{},它们将变得更加精确。在

相关问题 更多 >

    热门问题