Я пытаюсь получить спектр периодических сигналов c, используя функцию fft
. Затем нанесите на график величину и фазу преобразования. Графики величины в порядке, но фазовые графики совершенно неожиданны. Например, я использовал функции Sin³ (t) и Cos³ (t). Код, который я использовал:
import matplotlib.pyplot as plt
import numpy.fft as nf
import math
import numpy as np
pi = math.pi
N=512
# Sin³(x)
t=np.linspace(-4*pi,4*pi,N+1);t=t[:-1]
y=(np.sin(t))**3
Y=nf.fftshift(nf.fft(y))/N
w=np.linspace(-64,64,N+1);w=w[:-1]
plt.figure("0")
plt.subplot(2,1,1)
plt.plot(w,abs(Y),'ro',lw=2)
plt.xlim((-4,4))
plt.ylabel(r"$|Y|$",size=16)
plt.title("Spectrum of sin\u00B3(t)")
plt.grid(True)
plt.subplot(2,1,2)
ii=np.where(abs(Y)>1e-3)
plt.plot(w[ii],np.angle(Y[ii]),'go',lw=2)
plt.xlim((-4,4))
plt.ylabel(r"Phase of $Y$",size=16)
plt.xlabel(r"$\omega$",size=16)
plt.grid(True)
# Cos³(x)
t=np.linspace(-4*pi,4*pi,N+1);t=t[:-1]
y=(np.cos(t))**3
Y=nf.fftshift(nf.fft(y))/N
w=np.linspace(-64,64,N+1);w=w[:-1]
plt.figure("1")
plt.subplot(2,1,1)
plt.plot(w,abs(Y),'ro',lw=2)
plt.xlim((-4,4))
plt.ylabel(r"$|Y|$",size=16)
plt.title("Spectrum of cos\u00B3(t)")
plt.grid(True)
plt.subplot(2,1,2)
ii=np.where(abs(Y)>1e-3)
plt.plot(w[ii],(np.angle(Y[ii])),'go',lw=2)
plt.xlim((-4,4))
plt.ylabel(r"Phase of $Y$",size=16)
plt.xlabel(r"$\omega$",size=16)
plt.grid(True)
Полученные графики:
i) Для Sin³ (t) - Величина и фаза спектра Sin³ (t)
ii) Для Cos³ (t) - Величина и фаза спектра Cos³ (t)
Как видно из приведенных выше ссылок, величина обоих функции в порядке. Фаза Спектра Sin³ (t) является правильной, как и ожидалось.
Поскольку Cos³ (t) является действительным и четным, а расширение в терминах сложных экспонент показывает, что Фаза Коэффициентов равна 0. Но график График показывает совершенно другой ответ (см. 2 ): при w = -3 фаза составляет около 5 радиан. Какую ошибку я совершил и как правильно реализовать БПФ.