2026a

# filtfilt


零相位数字滤波

函数库: TySignalProcessing

# 语法

y = filtfilt(b, a, x)
y = filtfilt(sos, g, x)

# 说明

y = filtfilt(b,a, x) 通过对输入数据 x 进行正向和反向处理来实现零相位数字滤波。在对数据进行正向滤波后,filtfilt 函数会将滤波后的序列反转,并再次通过滤波器进行处理。其结果具有这些特征。

  • 零相位失真;

  • 滤波器传递函数等于原始滤波器传递函数的平方大小;

  • 滤波器的阶数是 b 和 a 所指定的滤波器阶数的两倍。

filtfilt 通过匹配初始条件将启动和结束时的瞬态降到最低。不要对微分器和希尔伯特 FIR 滤波器使用 filtfilt,因为这些滤波器的操作在很大程度上取决于其相位响应。


y = filtfilt(sos, g, x) 零相位滤波器使用由矩阵 sos 和尺度值 g 表示的二阶节(双二阶)滤波器对输入数据 x 进行滤波。

# 示例

心电图波形的零相位滤波

零相位滤波有助于在滤波时间波形中准确保留未滤波信号中出现的特征。

使用 filtfilt 对合成心电图(ECG)波形进行零相位滤波。生成波形的函数在示例的末尾。QRS 波群是 ECG 中的一个重要特征。

这里开始于时间点 160 左右。

using TyPlot 
using TySignalProcessing
using TyMath
rng = MT19937ar(1234)
wform = ecg(500)
plot(wform)
axis([0 500 -1.25 1.25])
text(155,-0.4,"Q")
text(180,1.1,"R")
text(205,-1,"S")

用加性噪声破坏心电图。重置随机数生成器以获得可重现的结果。构建一个低通FIR等波纹滤波器并使用零相位和传统滤波器对噪声波形进行滤波。

x = vec(wform.+ 0.25*randn(rng,500,1))
b, a = butter(8, 0.125)
y = filtfilt(b,a,x)
y1, = filter1(b,a,x)
figure()
subplot(2,1,1)
plot([y y1])
axis([0 500 -1 1])
title("Filtered Waveforms")
legend(["Zero-phase Filtering","Conventional Filtering"])
subplot(2,1,2)
plot(wform)
axis([0 500 -1 1])
title("Original Waveform")
figure()
plot([x y])
legend(["Nosiy ECG","Zero-Phase Filtering"])

# 输入参数

b,a - 传递函数系数
向量

传递函数系数,指定为向量。如果使用全极点滤波器,请为 b 输入 1。如果您使用全零 (FIR) 滤波器,请为 a 输入 1。

示例: b = [1 3 3 1]/6 和 a = [3 0 1 0]/3 指定 3 阶巴特沃斯滤波器,其归一化 3-dB 频率为 0.5 π rad/sample。

数据类型: Float

x - 输入信号
向量 | 矩阵 | N 维数组

输入信号,指定为实值或复值向量、矩阵或 N 维数组。x 必须是有限值的。filtfilt 沿大小大于 1 的 x 的第一个数组维度进行运算。

数据类型: Float

复数支持:

sos - 二阶基本节系数
向量 | 矩阵 | N 维数组

二阶基本节系数,指定为矩阵。sos 是一个 K×6 矩阵,其中节数 K 必须大于或等于 2。如果节数小于 2,则函数将输入视为分子向量。sos 的每一行对应于 2 阶滤波器的系数。sos 的第 i 行对应于 [bi[1] bi[2] bi[3] ai[1] ai[2] ai[3]]。

数据类型: Float

复数支持:

g - 比例因子
向量

比例因子,指定为向量。

数据类型: Float

# 输出参数

y - 滤波后信号
向量 | 矩阵 | 实数 N 维数组

滤波后的信号,以向量、矩阵或 N 维数组形式返回。

数据类型: Float

# 参考文献

[1] Gustafsson, F. “Determining the initial states in forward-backward filtering.” IEEE® Transactions on Signal

Processing. Vol. 44, April 1996, pp. 988–992.

[2] Mitra, Sanjit K. Digital Signal Processing. 2nd Ed. New York: McGraw-Hill, 2001.

[3] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle

River, NJ: Prentice Hall, 1999.

# 另请参阅

fftfilt