【问题标题】:Implementation of scipy.signla.filtfilt in c++? [closed]在 C++ 中实现 scipy.signla.filtfilt?
【发布时间】:2021-04-17 00:48:09
【问题描述】:

我正在尝试在 C++ 中实现 scipy.signal.filtfilt 函数,我想知道是否已经有可用的实现?

【问题讨论】:

    标签: c++ signals signal-processing


    【解决方案1】:

    filtfilt 应用 IIR 滤波器两次,一次向前,一次向后。重要的部分是如何在边界处初始化 IIR 滤波器。

    作为一个起点,看看scipy.signal.filtfilt 是如何做到的。这是代码: https://github.com/scipy/scipy/blob/master/scipy/signal/signaltools.py#L3870

    您可能还会发现查看 Octave 的 filtfilt(M 代码)的源代码很有用: https://sourceforge.net/p/octave/signal/ci/default/tree/inst/filtfilt.m

    要在 C++ 中重现 filtfilt,您需要 IIR 过滤的 C++ 实现来扮演 scipy 的 lfilter 的角色以及一些边界处理逻辑。我不知道 filtfilt 的现有 C++ 实现,但至少对于默认的method='pad' 逻辑,核心计算似乎很简单,可以考虑直接移植。

    【讨论】:

      【解决方案2】:

      Scipy 的 filtfilt 类似于 Matlab's filtfilt

      MATLAB's filtfiltwas previously asked的问题

      @darien-pardinas 对同一 was previously shared on Stackoverflow 的实现

      请注意我说的是similar because as mentioned by@paco-wong

      不同之处在于默认填充长度。在matlab的filtfilt中为3*(max(len(a), len(b)) - 1),在scipy的filtfilt中为3*max(len(a), len(b))。

      所以你必须考虑到这一点

      【讨论】:

        猜你喜欢
        • 2010-09-27
        • 2015-09-03
        • 2019-07-20
        • 2011-03-01
        • 2013-05-18
        • 2011-12-25
        • 2013-02-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多