Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从np.fft计算振幅_Python_Numpy - Fatal编程技术网

Python 从np.fft计算振幅

Python 从np.fft计算振幅,python,numpy,Python,Numpy,我似乎正在使用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_sa

我似乎正在使用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()

我想你算错了振幅。你应该换衣服

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

结果:

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()


振幅的峰值不完全是
7
2
,但是如果你增加
n\u样本
,它们会变得更精确。

你会在这里找到信息:@Dadep谢谢你是对的,如果我乘以2并添加更多的频率单元,它会起作用。
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()