我有一个周期约为 1 秒的周期性信号(ECG)。它没有短于 0.04 秒的特征。为了去除 60Hz,我认为不是实现陷波滤波器,而是进行 1/60~0.016 秒的简单移动平均。(在更大的窗口上平均可能会破坏信号信息,也不需要)这比陷波滤波器可以是几个阶数。我错过了什么吗?
陷波滤波的移动平均线
不,你没有错过任何东西。一条移动平均线,周期为秒确实在 60 Hz 处有一个陷波,因为频率响应是 Sinc 函数,第一个零点为 1/T。(所以它既是一个低通滤波器,其幅度包络下降为 1/f,又是一个不包括 0 的 1/T 整数处的陷波)。
这是因为移动平均线的脉冲响应是持续时间 T 的矩形函数,而这种函数的傅里叶变换是 Sinc(脉冲响应的傅里叶变换是频率响应)。当脉冲响应是一个采样的矩形函数时,类似地形成了数字滤波器,因此它们的傅立叶变换将接近一个 Sinc 函数(我喜欢将其称为“混叠”Sinc 函数,类似于离散时间系统中的其他混叠)。如果我们将采样率定位在 60 Hz 的整数倍,从 120 Hz 或更高开始,零点将在 60 Hz 并且如果数字脉冲响应(正式称为单位样本响应)在持续时间 T 内是均匀样本,则它是高次谐波, 其中 T 是 1/60 Hz(这是一个移动平均值,特别是当 N 个样本的每个样本的权重为 1/N 时,否则它是一个缩放移动平均值)。因此,以数字方式执行此操作所需的最小采样率为 120 Hz,否则也可以使用 180 Hz、240 Hz 和 60 Hz 的更高倍数)。请注意,我说这将接近 Sinc 函数;当我们将零点定位在 60 Hz 并进行移动平均时,请注意下面每种采样率选择的实际频率响应图,由实际数字传递函数根据以下公式给出:请注意,我说这将接近 Sinc 函数;当我们将零点定位在 60 Hz 并进行移动平均时,请注意下面每种采样率选择的实际频率响应图,由实际数字传递函数根据以下公式给出:请注意,我说这将接近 Sinc 函数;当我们将零点定位在 60 Hz 并进行移动平均时,请注意下面每种采样率选择的实际频率响应图,由实际数字传递函数根据以下公式给出:
通过使用 z 的单位圆确定以下频率响应(在哪里是归一化角频率,从 0 到对应于 0 的采样率。可用于轻松确定这一点的实际 Matlab/octave 命令如下(Python SciPy 有类似的命令):
freqz([ones(N,1), 1/N]);
其中,以下每种情况的 N 分别为 2、3、4 和 10。
此外,您还可以考虑哪个更简单的是“梳状滤波器”结构,它只是将输入与自身的延迟版本相加,其中延迟等于 T/2。
这将具有以下频率响应:
由于延迟的傅立叶变换给出为
幅度如下图所示:
这相当于在采样率为 120 Hz 时延迟一个样本的数字滤波器,传递函数为:
如前所述,当 z 为单位圆时的频率响应为
和从 0 到在这种情况下,表示从 0 到采样率的归一化角频率。
与上面的移动平均情况一样,这也可以在任何 60 Hz 整数倍的采样频率下实现,从最低 120 Hz 速率开始。
如果您担心上述两种解决方案的通带区域中的“频率下降”,您可以考虑使用我在此链接中描述的这个非常简单的三抽头 FIR 补偿器来帮助平坦通带:
在上述所有情况下,采样率必须是所需陷波频率的整数倍。如果这太严格,这里有一个数字陷波滤波器,当需要一个非常紧的陷波和平坦的通带时,我通常会实施它,以与上述方法进行比较(并且对采样率没有相同的限制):
旁注:相对较高的旁瓣,或者换句话说,幅度为 1/f 的慢频率滚降,是为什么移动平均值通常不适合用作低通滤波(或估计 DC 值)的 FIR 滤波器这是平均值)除非您正在过滤已知的白噪声。对于白噪声,它是最佳选择之一。为什么?因为与任何其他 FIR 滤波器相比,对于给定的抽头数,移动平均确实具有最窄的主瓣,并且如果已知噪声是白色的,那么 1/f 幅度滚降将足以抑制较高频率组件。
移动平均线总是一个低通滤波器,你永远不会在你想要的频率上得到一个陷波。从技术上讲,您可能能够将其设计为恰好在 60Hz 处有一个缺口,但您将在其他频率上有一个缺口。此外,虽然您的信号周期可能是 1 秒,但我怀疑它会有更高的频率分量。
使用任意数量的 N 将其输入 matlab/octave,您会发现它始终是低通。
N = 80 频率 (ones(1,N) * 1/N, 1)
移动平均只是一个所有系数都是 1/N 的滤波器。