沿垂直轴移动数据时出现 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()

initial data FFT shifted data FFT

试试这个,它会让你相信一切正常:

t = np.linspace(0, 2*math.pi, 10000)
y2 = np.sin(200*t) + 1

1 在 0 频率处添加了一个非常强的峰值。不过罪峰也在。