Неполная проблема с БПФ при смещении данных по вертикальной оси
Я хочу найти связь между осью Y моих данных и вертикальной осью моего БПФ (амплитуда). Для этого я проверяю, как изменяется амплитуда моего БПФ при изменении оси Y моих данных. Например, я построил график sin(t) от 0 до 2* пи и взял БПФ, используя пакет БПФ от Numpy, и получил частоту приблизительно 1/(2* пи). Затем я добавил 1 ко всем моим значениям y просто для того, чтобы сдвинуть мою функцию синуса на 1 единицу повсюду; однако, когда я взял БПФ, я получил то, что не имело смысла. Почему БПФ полностью отличается, когда я просто смещаю свою синусоидальную функцию вверх? Любая помощь будет принята с благодарностью. Заранее спасибо.
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()
1 ответ
Попробуйте это, это убедит вас, что все работает хорошо:
t = np.linspace(0, 2*math.pi, 10000)
y2 = np.sin(200*t) + 1
1 добавляет очень сильный пик на частоте 0. Но пик греха тоже есть.