Аналитическое преобразование Фурье синусоидального сигнала чисто мнимое .Однако при численном вычислении дискретного преобразования Фурье результат не является.
Tldr: Найти все ответы на этот вопрос здесь .
Поэтому рассмотрим следующий код
import matplotlib.pyplot as plt
import numpy as np
from scipy.fftpack import fft, fftfreq
f_s = 200 # Sampling rate = number of measurements per second in [Hz]
t = np.arange(0,10000, 1 / f_s)
N = len(t)
A = 4 # Amplitude of sinus signal
x = A * np.sin(t)
X = fft(x)[1:N//2]
freqs = (fftfreq(len(x)) * f_s)[1:N//2]
fig, (ax1,ax2) = plt.subplots(2,1, sharex = True)
ax1.plot(freqs, X.real, label = "$\Re[X(\omega)]$")
ax1.plot(freqs, X.imag, label = "$\Im[X(\omega)]$")
ax1.set_title("Discrete Fourier Transform of $x(t) = A \cdot \sin(t)$")
ax1.legend()
ax1.grid(True)
ax2.plot(freqs, np.abs(X), label = "$|X(\omega)|$")
ax2.legend()
ax2.set_xlabel("Frequency $\omega$")
ax2.set_yscale("log")
ax2.grid(True, which = "both")
ax2.set_xlim(0.15,0.175)
plt.show()
Понятно, что абсолютное значение | X (w) |может быть использовано как хорошее приближение к аналитическому результату.Однако мнимое и действительное значение функции X (w) различны.Уже другой вопрос о СО упоминал этот факт, но не объяснял почему.Так я могу использовать только абсолютное значение и фазу?
Другой вопрос - как Амплитуда связана с числовым результатом.Математически говоря, это должен быть интеграл по кривой | X (w) |делится на нормализацию (которая, насколько я понял, должна быть задана как N), то есть приблизительно на
A_approx = np.sum(np.abs(X)) / N
print(f"Numerical value: {A_approx:.1f}, Correct value: {A:.1f}")
Числовое значение: 13,5, Правильное значение: 4,0
Кажется, это не так.Есть идеи?Идеи?
Смежные вопросы, которые не помогли: здесь и здесь .