【问题标题】:Bandpass filtering at low frequencies低频带通滤波
【发布时间】:2019-06-04 18:58:45
【问题描述】:

我想知道是否有任何最佳实践来解决我认为可能引起普遍关注的以下问题。

我有一个以 40 kHz 采样约 60 秒的信号。该信号包含高达 5kHz 的频率,但我只对它的 40Hz 分量感兴趣。

如何获得稳定、窄带通滤波(约 40 Hz)的信号,该信号也与原始信号具有相同的时基(零延迟)。滤波器也应该具有线性相位。

计算工作不是问题。

【问题讨论】:

  • 在 Matlab 中,我会尝试butter 来设计过滤器。使用零极点增益输出(而不是传递函数的分子和分母,即使对于低滤波器阶数也会导致数值不稳定)。然后转换为 SOS 格式。然后您可以使用filtfilt,它应用过滤器两次:正常和时间反转。确保线性相位;它还有效地使滤波器阶数加倍并使传递函数的绝对值平方。请参阅示例 herehere
  • 当您想要实时过滤某些信号时,设计和应用过滤器是一种很好的方法。如果您只是对操纵某个信号块感兴趣,那么在进行 FFT 之前应用一个窗口可能是值得的,然后只需将不需要的频率区间设置为零并通过 IFFT 将操纵的频谱转换回时域。从某种意义上说,这种方法就像对您的信号应用一个完美的低通滤波器。
  • 这些是非常有趣的方法。但是,我确实需要实时过滤,因为我需要一个仅包含原始信号的 40 Hz 分量的新信号以进行进一步处理。不仅是原始信号的一部分。我将尝试按照@LuisMendo 的建议实施它以供进一步讨论。
  • 实时需求改变了一切。问题中并不清楚您需要实时。在那种情况下,我无法提供任何帮助
  • 对不起,我想我弄错了。我的意思是我已经捕获了信号,然后想要对其进行后处理,以便新信号将仅具有原始信号的 40 Hz 分量,但具有相同的时基和线性相位。但是,我需要处理整个信号,而不仅仅是其中的一部分。

标签: python python-2.7 matlab signal-processing bandpass-filter


【解决方案1】:

设计一个窄带通滤波器,使用:https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.iirpeak.html 然后使用前向后向滤波器 filtfilt 在信号上实现它: https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.signal.filtfilt.html.

前向后向过滤需要对信号进行分段,但您始终可以生成重叠较大的部分。

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 2013-08-22
    • 2010-10-23
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 2014-07-29
    相关资源
    最近更新 更多