计算白噪声功率谱密度时无法解释的对称性

2024-06-16 10:23:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力学习更多关于噪声、功率谱否认(PSD)和统计方差的知识。关于这一点,我试图计算白噪声的功率谱密度,然而,当我这样做时,我得到了一个非常奇怪的对称性。我的频谱似乎围绕中心频率值对称,这显然是不正确的。我刚开始使用自相关和功率谱密度,所以如果有人能帮助我朝错误的方向前进,我将不胜感激。在

计算PSD的代码:

import numpy as np 
from math import sin, pi, log10
from allan_noise import white,pink,brown, violet
import acor
import numpy as np


#METHOD ONE: AUTOCORRELATION FUNCTION METHOD
def psd1(time_dats):
    #auto_corr = acor.function(time_dats)
    auto_corr = np.correlate(time_dats,time_dats,mode="same")

    #To check autocorrelation
    for i in range(len(auto_corr)):
        print i*.0000001 ,auto_corr[i]

    return fft(auto_corr) 

#DEFINE VARIABLES
t = .0001       #simulation time
N = 100000  #number of data points 
dt = t/N    #time interval between data points

#CREATE SIGNAL
sig = white(N)
df = 1.0/(t)
freq_axis = np.arange(0,N/t,df)

spec = psd1(sig)

#OPEN UP OUTPUT FILE
f = open('data/psdtest_f','w')
g = open('data/psdtest_t','w')

#PRINT OUT DATA
for i in range(N):
    f.write('%g %g\n' %(freq_axis[i],log10(abs(spec[i]))))
    g.write('%g %g\n' %(i*dt, sig[i]))

使用此代码,我生成以下图形,可在此处访问https://drive.google.com/#folders/0B8BdiIhqTYw7Vk1EaDFMQW84RHM

  1. 计算前噪声的时间分布

  2. 根据时间剖面计算的自相关函数(我知道x轴刻度是错误的,但这对代码没有任何影响

  3. 功率谱否认,美丽的对称,虽然不应该

任何人能提供的任何帮助都将是最有帮助的。我用一个简单的正弦波信号测试了代码,得到了预期的结果(没有对称性)


Tags: 代码importautodatatime错误np功率
1条回答
网友
1楼 · 发布于 2024-06-16 10:23:28

首先,你的函数写得不正确,你从autocorr取fft,这不是你的初始信号数组。有趣的是,由于舍入误差的性质,你也会从中得到类似psd的噪声。 其次,计算频率轴是错误的,因为它们应该扩展到N/(t*2)(这是Nyquist fr.)。相反,由于频率轴阵列的长度是N,所以从sig阵列中提取N个元素,因此您只需读取具有相同psd的负频率,这就形成了对称性(将log转换为实数,所有负频率的Fourier系数都只是正频率的共轭系数)。 用以下代码替换您的代码会得到非常好的结果:

sig = white(N,1,N/t)
(siglog,freq_axis)=ml.psd(sig,N,(N/t), detrend=ml.detrend_none,
   window=ml.window_hanning, noverlap=0, pad_to=None,
    sides='default', scale_by_freq=None)
plt.plot(freq_axis,np.log10(siglog))
plt.show()

matplotlib.mlab.psd result

别忘了进口

^{pr2}$

相关问题 更多 >