matplotlib返回的最大PSD频率bin是否错误?

2024-10-01 19:26:48 发布

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

我试图理解matplotlib.mlab.psd()函数返回的频率容器。在

使用下面的代码,我可以检查返回的频率,但我不相信它们是正确的。在

import matplotlib.mlab as ml
import numpy as np
sampf=500.
nfft=2**4
testdat=np.random.randn(10000,)
p2,f2=ml.psd(testdat, nfft,sampf,sides='twosided')
p1,f1=ml.psd(testdat, nfft,sampf,sides='onesided')

print testdat.shape
print "Twosided"
print "\tbin1     : {:f} ".format(f2[0])
print "\tbin2     : {:f} ".format(f2[1])
print "\tbinlast  : {:f} ".format(f2[-1])

print "onesided"
print "\tbin1     : {:f} ".format(f1[0])
print "\tbin2     : {:f} ".format(f1[1])
print "\tbinlast  : {:f} ".format(f1[-1])

print "recreate"
f3=np.arange(nfft)*(sampf/2.)/nfft
print "\tbin1     : {:f} ".format(f3[0])
print "\tbin2     : {:f} ".format(f3[1])
print "\tbinlast  : {:f} ".format(f3[-1])

它给出了这个输出:

^{pr2}$

我认为双面情况下的最大频率(binlast)应该是采样频率的一半吗?在

this SO post之后,我认为它的范围应该是sampf/2。在


Tags: formatnpml频率f2f1printpsd
1条回答
网友
1楼 · 发布于 2024-10-01 19:26:48

所有的单面所做的就是不返回反面。在

因为你要交一个真实的信号f_hat(w) = conj(f_hat(-w))(即负ω处的傅里叶分量是ω处分量的复共轭),因此它们的幅值相同,因此在功率谱方面是多余的。在

如果您缺少精确的sampf/2,这是因为off-by-one问题,涉及到有偶数个步骤,但需要奇数个点,如果您要包括0并且是完全对称的。注意,在你的双面情况下,最负的频率是-sampf/2,你的最大漏检次数是{}。您的重建bin last是(nfft-1)/nfft * (sampf/2),由于我怀疑浮点舍入错误而丢失了该值。在

相关问题 更多 >

    热门问题