问题描述
我被要求在 python 中创建一个带通零移滤波器。 我是信号处理的新手,在探索互联网上的例子时,我不得不学习拉普拉斯和 z 变换。
我用来生成滤波器系数的函数是 signal.butter()
。
在示例中,我看到输出信号中非零频率的范围限制除以采样频率的一半 - 为什么?
它与奈奎斯特定理有关吗?不幸的是,没有从 butter()
文档中得到它。
感谢您的帮助:)
nyq = 0.5 * fs # Why?
low = low_cut / nyq
high = high_cut / nyq
b,a = butter(order,[low,high],'bandpass',analog=False,output='ba')
解决方法
对于从连续信号中以 s
(每秒样本数)的速率采样的任何离散信号,奈奎斯特频率 s/2
(Hz) 是它可以表示的最高频率(这是用 fft.fftfreq
很明显)。
奈奎斯特定理强调了这个频率的重要性;您希望选择足够高的采样率以捕获原始连续信号的所有频率。如果采样速度太慢,就无法捕获较高的频率,它们会“污染”您的较低频率以启动(混叠)。
scipy.signal.butter
的文档说,具有默认 analog=False
值的数字滤波器 (fs
) 要求将截止频率归一化为 0 到 1 之间。您的所有频率都小于或等于等于奈奎斯特频率,因此将您的频率除以奈奎斯特频率将进行归一化。