沿垂直轴移动数据时出现 Numpy FFT 问题
Numpy FFT issue when shifting data along vertical axis
我想找出数据的 y 轴与 FFT 的纵轴(振幅)之间的关系。为此,我正在测试当我更改数据的 y 轴时 FFT 的幅度如何变化。例如,我绘制了从 0 到 2*pi 的 sin(t) 并使用 Numpy 的 FFT 包进行了 FFT,得到的频率约为 1/(2*pi)。然后我将 1 添加到我所有的 y 值只是为了将我的正弦函数在任何地方都向上移动 1 个单位;然而,当我进行 FFT 时,我得到了一些毫无意义的东西。当我仅仅向上移动我的正弦函数时,为什么 FFT 完全不同?任何帮助将不胜感激。提前谢谢你。
import math
import numpy as np
import numpy.fft as fft
import matplotlib.pyplot as plt
t = np.linspace(0, 2*math.pi, 10)
y1 = np.sin(t)
y2 = np.sin(t) + 1
plt.plot(t, y2) # y1 can be used instead
plt.xlabel('time')
plt.ylabel('height')
plt.show()
fft_power = fft.fft(y2) # y1 can be used instead
rfft_power = fft.rfft(y2) # y1 can be used instead
sample_spacing = 0.6981317
frequency = fft.fftfreq(len(fft_power), sample_spacing)
real_frequency = fft.rfftfreq(len(fft_power), sample_spacing)
plt.plot(real_frequency.real, rfft_power.real)
plt.xlabel('frequency')
plt.ylabel('amplitude')
plt.show()
试试这个,它会让你相信一切正常:
t = np.linspace(0, 2*math.pi, 10000)
y2 = np.sin(200*t) + 1
1 在 0 频率处添加了一个非常强的峰值。不过罪峰也在。
我想找出数据的 y 轴与 FFT 的纵轴(振幅)之间的关系。为此,我正在测试当我更改数据的 y 轴时 FFT 的幅度如何变化。例如,我绘制了从 0 到 2*pi 的 sin(t) 并使用 Numpy 的 FFT 包进行了 FFT,得到的频率约为 1/(2*pi)。然后我将 1 添加到我所有的 y 值只是为了将我的正弦函数在任何地方都向上移动 1 个单位;然而,当我进行 FFT 时,我得到了一些毫无意义的东西。当我仅仅向上移动我的正弦函数时,为什么 FFT 完全不同?任何帮助将不胜感激。提前谢谢你。
import math
import numpy as np
import numpy.fft as fft
import matplotlib.pyplot as plt
t = np.linspace(0, 2*math.pi, 10)
y1 = np.sin(t)
y2 = np.sin(t) + 1
plt.plot(t, y2) # y1 can be used instead
plt.xlabel('time')
plt.ylabel('height')
plt.show()
fft_power = fft.fft(y2) # y1 can be used instead
rfft_power = fft.rfft(y2) # y1 can be used instead
sample_spacing = 0.6981317
frequency = fft.fftfreq(len(fft_power), sample_spacing)
real_frequency = fft.rfftfreq(len(fft_power), sample_spacing)
plt.plot(real_frequency.real, rfft_power.real)
plt.xlabel('frequency')
plt.ylabel('amplitude')
plt.show()
试试这个,它会让你相信一切正常:
t = np.linspace(0, 2*math.pi, 10000)
y2 = np.sin(200*t) + 1
1 在 0 频率处添加了一个非常强的峰值。不过罪峰也在。