Python 中的奈奎斯特规范化

问题描述

我被要求在 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 之间。您的所有频率都小于或等于等于奈奎斯特频率,因此将您的频率除以奈奎斯特频率将进行归一化。