cupyx.scipy.signal.filtfilt#

cupyx.scipy.signal.filtfilt(b, a, x, axis=-1, padtype='odd', padlen=None, method='pad', irlen=None)[source]#

对信号应用前向和后向数字滤波器。

此函数对信号应用线性数字滤波器两次,一次前向,一次后向。组合滤波器具有零相位,其阶数是原始滤波器阶数的两倍。

该函数提供了处理信号边缘的选项。

对于大多数滤波任务,应优先使用 sosfiltfilt 函数(以及使用 output='sos' 进行的滤波器设计),因为二阶截面滤波器具有较少的数值问题。

参数
  • b ((N,) array_like) – 滤波器的分子系数向量。

  • a ((N,) array_like) – 滤波器的分母系数向量。如果 a[0] 不为1,则 ab 都将由 a[0] 进行归一化。

  • x (array_like) – 要滤波的数据数组。

  • axis (int, 可选) – 应用滤波器的 x 轴。默认为 -1。

  • padtype (strNone, 可选) – 必须是 ‘odd’、‘even’、‘constant’ 或 None。这决定了对应用滤波器的填充信号使用哪种扩展类型。如果 padtype 为 None,则不使用填充。默认为 ‘odd’。

  • padlen (intNone, 可选) – 在应用滤波器之前,在 x 沿 axis 两端扩展的元素数量。此值必须小于 x.shape[axis] - 1padlen=0 表示不进行填充。默认值是 3 * max(len(a), len(b))

  • method (str, 可选) – 确定信号边缘的处理方法,可以是 “pad” 或 “gust”。当 method 为 “pad” 时,对信号进行填充;填充类型由 padtypepadlen 确定,并且忽略 irlen。当 method 为 “gust” 时,使用 Gustafsson 方法,并且忽略 padtypepadlen

  • irlen (intNone, 可选) – 当 method 为 “gust” 时,irlen 指定滤波器的脉冲响应长度。如果 irlen 为 None,则不忽略脉冲响应的任何部分。对于长信号,指定 irlen 可以显著提高滤波器的性能。

返回值

y – 滤波后的输出,形状与 x 相同。

返回类型

ndarray

注意

method 为 “pad” 时,函数沿给定轴以三种方式之一填充数据:odd、even 或 constant。odd 和 even 扩展在数据端点处具有相应的对称性。constant 扩展使用端点处的值来扩展数据。在前向和后向传递中,通过使用 lfilter_zi 并根据扩展数据的端点对其进行缩放来找到滤波器的初始条件。

method 为 “gust” 时,使用 Gustafsson 方法 [1]。选择前向和后向传递的初始条件,使得前向-后向滤波器产生与后向-前向滤波器相同的结果。

参考文献