我想比较两个随机过程的时间轨迹的功率谱,但是返回的频率范围不同。
该频率范围是如何选择的,我该如何修改?
更具体地说,我的工作是:
from scipy import signal as sgn
spectrum1=sgn.periodogram(signal1,fs=fs1)
spectrum2=sgn.periodogram(signal2,fs=fs2)
我的问题是,spectrum1[0]
与spectrum2[0]
的范围有很大不同。
答案 0 :(得分:1)
periodogram
使用FFT(快速傅立叶变换)来计算,该FFT实现了DFT(离散傅立叶变换)。周期性信号的DFT具有离散频率,其基频的所有倍数均与帧T
:f_0=1/T
的持续时间一致。
因此,要获得相同的频率,帧的持续时间必须相似,且至少为彼此的倍数:
len(signal1)/fs1 = k*len(signal2)/fs2
可能需要截断其中一个数组。 scipy.signal.periodgram()
的参数nfft
也可以尝试,要求变为:
nfft1/fs1 = k*nfft2/fs2
如果帧的持续时间与信号的实际周期不一致,或者信号不是周期性的,windowing可能会限制频谱泄漏的影响。它是如此有用,以至于它可以作为参数集成到scipy.signal.periodgram()
中。您可以尝试使用here列出的值'hann'
或'parzen'
。
如果采样率不同,则可能需要重新采样信号。为此,可以使用scipy.signal.resample()。它还具有参数window
,并利用FFT进行重采样,从而避免了线性插值会触发的一些错误。