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