Я хочу найти связь между осью Y моих данных и вертикальной осью моей БПФ (амплитуда). Для этого я проверяю, как изменяется амплитуда моего БПФ, когда я изменяю ось y своих данных. Например, я построил sin (t) от 0 до 2 * pi и взял БПФ с использованием пакета FFT от Numpy и получил частоту приблизительно 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
Не ответ, но почему бы не использовать 'y1 = np.sin (t)' и 'y2 = np.sin (t) + 1'? – mgilson
Возьмите этот ответ с солью, так как я не работал с трансформаторами Фурье какое-то время, но я считаю, что вы видите эффекты сглаживания. Если вы используете мое предложение для создания 'y1' и' y2', а затем сверните количество точек (скажем, до 1000), вы получите гораздо более похожий результат. – mgilson
Ты совершенно прав. Я должен был изменить это и просто сделал. Благодаря! –