繁体   English   中英

通过自相关在 Python 中计算功率谱

[英]Calculating a Power Spectrum in Python via Autocorrelation

我想通过使用累积量来计算 8192 数据向量的功率谱。 我计算了 128 个最大移位的自相关,将其减少了信号的平均值并执行了 fft。 结果是复杂的,而不是真实的和积极的。 我哪里做错了?

这是我的代码。

import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import acf
import pandas as pd

#Creating the random variables
φ=[]
for i in range(0,6):
    if(i==2):
        φ.append((φ[0]+φ[1]))
    elif(i==5):
        φ.append((φ[3]+φ[4]))
    else:
        φ.append(np.random.uniform(0,2*np.pi))
        
#Creating the λ variables
λ=[0.12,0.3,0.42,0.19,0.17,0.36]

#Building the x process
x=[]
samples=8192
for k in range(0,samples):
    x.append(0)
    for i in range(0,6):
        x[k]+=np.cos(k*2*λ[i]*np.pi+φ[i])

#Preparing The Plot and adding x to it
fig, [ax1,ax2,ax3,ax4]=plt.subplots(nrows=4,ncols=1)
ax1.plot(x)
ax1.set_title("Time Signal")

#Building The Autocorellation function
lags=128
corr=[]
temp=[]
for i in range(0,lags):
    for k in range(0,samples):
        if(i+k>=samples):
            temp.append(0)
        else:
            temp.append(x[k+i]*x[k])
    corr.append(np.mean(temp))
    corr[i]-=(np.mean(x))**2
    temp.clear()
  
#Calculating The Power Spectrum
C2=np.fft.fft(corr)
print(C2)


使用np.fft.fft执行傅里叶变换时,结果始终是一个复信号,其中包含每个频率的幅度和相位。

您想要的是功率谱,可以通过对傅里叶变换信号进行平方来找到:

C2= np.abs(np.fft.fft(corr))**2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM