我想获得自回归序列 AR(1) 的功率谱密度 (PSD)。根据此参考资料(第 12 页)的分析解决方案是
对于,
设 ,,则 [0, 2pi] 中使用 fft 和解析解对应的 PSD 曲线为
从下图可以看出,fft得到的PSD远不是解析解得到的U型曲线。
谁能告诉我为什么结果不同?
我用来生成情节的代码是:
import matplotlib.pyplot as plt
import numpy as np
from scipy.fft import fft, fftfreq
def analy(x):
PSD = 1/(1.16-0.8*np.cos(2*np.pi*x))
return PSD
def my_fft(N):
T = 1 # sample spacing
t = np.linspace(0.0, N*T, N, endpoint=True)
y = np.zeros([N,1])
rho = 0.4
for i in range(len(t)-1):
y[i+1] = rho*y[i] + (1-0)*np.random.normal(0,1)
yf = fft(y)
xf = fftfreq(N, T)[:N//2] # sample frequency points
PSD = 2.0/N * np.abs(yf[0:N//2])
return xf*np.pi*2, PSD
def compare_PSD():
N = 100 # Number of sample points
UB = np.pi # sample upper bound
x_analy = np.linspace(0, UB, num=N)
PSD_analy = analy(x_analy)
x_fft, PSD_fft = my_fft(N)
plt.plot(x_analy, PSD_analy, label='Analytical')
plt.plot(x_fft, PSD_fft, label='scipy.fft')
plt.xlabel('Frequency')
plt.ylabel('PSD')
plt.legend()
plt.show()
compare_PSD()


