gpt4 book ai didi

python - python 中的功率谱 - 显着性水平

转载 作者:行者123 更新时间:2023-12-04 17:56:30 53 4
gpt4 key购买 nike

有很多关于如何使用 python 计算功率谱的示例,例如Plotting power spectrum in python :

from __future__ import division
import numpy as np
import matplotlib.pyplot as plt

data = np.random.rand(301) - 0.5
ps = np.abs(np.fft.fft(data))**2

time_step = 1 / 30
freqs = np.fft.fftfreq(data.size, time_step)
idx = np.argsort(freqs)

plt.plot(freqs[idx], ps[idx])

但是如何计算功率谱的 95% 或 99% 显着性水平(原假设:白噪声)?我找到了 scipy.stats.chisquare ,但这检验了分类数据具有给定频率的原假设。

最佳答案

根据 [1] 和 [2] 中功率谱的所有谱峰的白(或红)噪声零假设,我找到了以下公式来计算显着性水平:

\frac{\chi^{2}_{\phi,\alpha}{\phi} ,

与白(或红)噪声的理论功率谱Sp_{T} , 显着性水平 \alpha和自由度\phi .功率谱的频率是\alpha , 对于 h=0,1,...Mn是数据点的数量。

在 Python 中:

   import pylab as plt
import numpy as np
from scipy.stats import chi2

###
fft=np.fft.fft(data) ; n=len(fft)
abs=np.absolute(fft)**2

## frequencies (30min resolution)
f_u01=np.zeros(n/2+1,float)
f_u01=np.linspace(0,1,num=(n/2.+1))/(30*60*2)
### Variance of data as power spectrum of white noise
var=N.var(data)
### degrees of freedom
M=n/2
phi=(2*(n-1)-M/2.)/M
###values of chi-squared
chi_val_99 = chi2.isf(q=0.01/2, df=phi) #/2 for two-sided test
chi_val_95 = chi2.isf(q=0.05/2, df=phi)



### normalization of power spectrum with 1/n
plt.figure(figsize=(5,5))
plt.plot(fft[0:n/2],abs[0:n/2]/n, color='k')
plt.axhline(y=(var/n)*(chi_val_99/phi),color='0.4',linestyle='--')
plt.axhline(y=(var/n)*(chi_val_95/phi),color='0.4',linestyle='--')

[1]: Schönwiese, C.-D., Praktische Statistik, 1985, 公式(11-41)

[2]:潘科夫斯基,H.A.和 Brier, G.W.,统计在气象学中的一些应用。宾夕法尼亚州立大学,1958 年

关于python - python 中的功率谱 - 显着性水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40138916/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com