以 100 Hz 过滤的信号具有 0.3 至 0.9 Hz 通带的通带滤波器

信息处理 带通
2022-02-05 14:09:33

我有一个以 100 Hz 采样的信号,其频谱如下所示。

频谱

我想要做的是过滤掉 0.7 Hz 附近的区域(比如 0.7 ± 0.3 Hz)(最左边的红色圆圈),并去掉 1.5 到 3 Hz 左右的另一个峰值(最右边的红色圆圈),理想情况下还有频率 < 0.4赫兹。

我玩过巴特沃斯滤波器,因为它们似乎是人们的首选,椭圆滤波器,因为它们应该具有最陡的滚降和 FIR 滤波器,因为当我设置非常窄的通带时,前两个似乎变得不稳定。

它们似乎都没有足够陡峭的滚降,但允许在我尝试的级别进行过滤。有关我测试过的 10 至 20 Hz 带通版本的滤波器,请参见下文。

经测试的过滤器

我试过增加订单和水龙头,但没有成功。

我不确定我是否在这里尝试做一些不可能的事情,但我的信号处理课程中模糊的记忆告诉我,通过上采样/下采样结合一些巧妙的过滤应该可以实现。即我可以使用信号以 100 Hz 采样的事实,并且在低于奈奎斯特频率的大多数频率中没有内容。

我不关心信号的相位,我不能对它是周期性的做出任何假设,尽管我不知道它是否重要。

我也看过这个并且必须承认“创建一个低通滤波器,将其转换为带通”目前让我头疼。我的代码的最终目标是 Cortex M4F CPU,这意味着我的计算资源并不是无穷无尽的——尽管确切的限制还不清楚。

是否可以创建一个 0.7 ± 0.3 Hz 的带通滤波器,如果可以,有人可以告诉我如何或指向正确的方向吗?

先感谢您!

2个回答

频率域中的东西越陡峭,它在时域中的分布就越大。粗略地说,如果您想要一个宽度为 0.1Hz 且采样率为 100Hz 的过渡带,您将需要 1000 个样本。对于 0.01Hz 的过渡带,您将需要 10000 个样本。

这里的关键是要满足要求:您的通带频率到底是多少,您可以容忍多少通带纹波,您需要什么阻带衰减以及您可以负担哪些过渡带。一旦清楚了,设计过程就足够简单了:只需提高订单,直到满足您的要求。

通常 IIR 滤波器更适合这种类型的事情。但是,对于这些非常低的频率和陡峭的过渡,您可能会遇到数值问题,特别是如果您打算使用定点。

一些技巧可以帮助

  • 你似乎对数据有很大的偏见。要么把它拿出来,要么使用直流阻塞滤波器来驯服非常低的频率
  • 您可以将采样率降低到较低的采样率,以降低滤波器的复杂性并提高稳定性。
  • 在时域中使用足够多的点来评估滤波器。像这样的过滤器需要很长时间才能达到稳定状态。
  • 不要将传递函数形式 (b,a) 用于 IIR 滤波器。改为使用二阶部分 (SOS) 或零、极点、增益 (zpk)。如果极点接近于零,则传递函数形式在数值上是不稳定的。

话虽如此,我认为 8 阶椭圆带通看起来不错:

在此处输入图像描述

低频的锐截止确实需要大量的抽头,这意味着很大的延迟。如果您可以容忍延迟,则可以通过多次下采样很好地解决此问题。您可以首先通过低通滤波器运行它以获取以 10 Hz 采样的信号,然后您将需要在最终滤波器中减少 10 倍的抽头。t-filter.engineerjs.com上的在线工具可以帮助您设计满足要求的过滤器。下面给出了一个这样的过滤器示例。放宽要求将使其适合滤波器的抽头更少,反之亦然。您可以在 DC 附近和/或您认为合适的更高频率上添加更多衰减,只要它远离过渡带。

在此处输入图像描述