1

我试图了解该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])

这给出了这个输出:

Twosided
    bin1     : -250.000000 
    bin2     : -218.750000 
    binlast  : 218.750000 
onesided
    bin1     : 0.000000 
    bin2     : 31.250000 
    binlast  : 250.000000 
recreate
    bin1     : 0.000000 
    bin2     : 15.625000 
    binlast  : 234.375000 

我是否认为 2 面案例的最大频率(binlast)应该是采样频率的一半?

这篇 SO 帖子之后,我认为它的范围应该是 sampf/2。

4

1 回答 1

2

单方面所做的只是不返回消极的一面。

因为您正在处理一个真实信号f_hat(w) = conj(f_hat(-w)) (即负欧米茄的傅立叶分量是欧米茄分量的复共轭),因此它们将具有相同的幅度,因此就功率谱而言是多余的。

如果您完全错过了,sampf/2那是因为与具有偶数个步骤但需要奇数个点相关的问题,如果您要包含 0 并且完全对称。请注意,在您的两侧情况下,最负的频率是-sampf/2并且您的最大失误sampf/2是一个 bin 步骤。(nfft-1)/nfft * (sampf/2)由于我怀疑浮点舍入错误,您的重建箱最后是并且错过了该值。

于 2013-07-09T16:56:25.713 回答