python中FFT后如何得到small bins?
How to obtain small bins after FFT in python?
我正在使用 scipy.signal.fft.rfft()
来计算信号的功率谱密度。采样率为 1000Hz,信号包含 2000 个点。所以频点是(1000/2)/(2000/2)=0.5Hz
。但我需要分析 [0-0.1]Hz 中的信号。
看了好几个推荐chirp-Z变换的答案,但是没找到Python写的工具箱。
那么如何在Python中完成这个small-bin分析呢?或者我可以使用 Butterworth 滤波器?
将此信号过滤到 [0-0.1]Hz
非常感谢!
即使您使用其他转换,也不会生成更多数据。
如果你有一个1kHz的采样和2s的采样,那么你的精度就是0.5Hz。您可以使用 chirpz 对此进行插值(或者只使用 sinc(),这是梳子样本之间的数据形状),但是当前点上的数据是确定波瓣中的数据(介于0Hz 和 0.5Hz).
如果你想要0.1Hz的真正精度,你需要10s的数据。
除非您使用更多(更长时间)的数据,否则您无法获得更小的频率仓来分离出接近的光谱峰值。
您不能只使用较窄的滤波器,因为这种滤波器的瞬态响应会比您的数据长。
您可以获得更小的频率仓,它们只是附近频率仓之间的平滑插值,例如,通过零填充数据和使用更长的 FFT,在更宽的纸上或以更高的 dpi 图形分辨率绘制频谱.但这不会创建更多细节。
我正在使用 scipy.signal.fft.rfft()
来计算信号的功率谱密度。采样率为 1000Hz,信号包含 2000 个点。所以频点是(1000/2)/(2000/2)=0.5Hz
。但我需要分析 [0-0.1]Hz 中的信号。
看了好几个推荐chirp-Z变换的答案,但是没找到Python写的工具箱。
那么如何在Python中完成这个small-bin分析呢?或者我可以使用 Butterworth 滤波器?
将此信号过滤到 [0-0.1]Hz非常感谢!
即使您使用其他转换,也不会生成更多数据。
如果你有一个1kHz的采样和2s的采样,那么你的精度就是0.5Hz。您可以使用 chirpz 对此进行插值(或者只使用 sinc(),这是梳子样本之间的数据形状),但是当前点上的数据是确定波瓣中的数据(介于0Hz 和 0.5Hz).
如果你想要0.1Hz的真正精度,你需要10s的数据。
除非您使用更多(更长时间)的数据,否则您无法获得更小的频率仓来分离出接近的光谱峰值。
您不能只使用较窄的滤波器,因为这种滤波器的瞬态响应会比您的数据长。
您可以获得更小的频率仓,它们只是附近频率仓之间的平滑插值,例如,通过零填充数据和使用更长的 FFT,在更宽的纸上或以更高的 dpi 图形分辨率绘制频谱.但这不会创建更多细节。