Я пытаюсь понять частотные ячейки, возвращенные функцией matplotlib.mlab.psd()
.Является ли максимальный бит частоты PSD возвращенным matplotlib неправильно?
Используя следующий код, я могу проверить возвращаемые частоты, и я не уверен, что они верны.
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
я прав, полагая, что максимальная частота (binlast) для 2-сторонней случае должна составлять половину частоты дискретизации?
this SO post Я думаю, что он должен варьироваться от sampf/2.
Да, я понимаю, что данные, которые я передаю, являются Реальными, и поэтому мне нужна только половина БПФ. Мой вопрос в том, какие значения должны быть отмечены на ящиках частот? Если я делаю двустороннюю fft, тогда должна быть максимальная частота буфера (sampf/2) или должна быть ((sampf/2) - (2/nfft))? – mor22
Прочтите последний параграф моего ответа, а затем прочитайте https://en.wikipedia.org/wiki/Fast_Fourier_transform. – tacaswell
Итак, я пересчитал значения с более низким значением nfft, чтобы показать, что ошибки округления нет. Страница wiki (и другие) указывает, что последний бит одностороннего fft должен быть ((sampf/2) - (1/nfft)). Ваша точка относительно симметричного характера для двухстороннего fft реальных данных указывает, что первый бит должен быть помечен как ((sampf/2) - (1/nfft)). Это не то, что возвращается функцией matplotlib, которая мне интересна. Я хочу знать, могу ли я доверять функции запаса. – mor22