主要内容

sosfilt

二阶(双二次)IIR 数字滤波

说明

y = sosfilt(sos,x) 将二阶节数字滤波器 sos 应用于输入信号 x

  • 如果 x 是矩阵,则函数沿第一个维度进行运算并返回每列的滤波后数据。

  • 如果 x 是多维数组,则该函数沿大于 1 的第一个数组维度进行运算。

示例

y = sosfilt(sos,x,dim) 沿维度 dim 进行运算。

示例

全部折叠

加载 chirp.mat。该文件包含信号 y,其大部分功率高于 Fs/4(即奈奎斯特频率的一半)。采样率为 8192 Hz。

load chirp

t = (0:length(y)-1)/Fs;

设计一个七阶巴特沃斯高通滤波器,以衰减低于 Fs/4 的信号的分量。使用 0.48π 弧度/采样点的归一化截止频率。用二阶节表示滤波器系数。

[zhi,phi,khi] = butter(7,0.48,'high');
soshi = zp2sos(zhi,phi,khi);

freqz(soshi)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

对信号进行滤波。显示原始信号和高通滤波后的信号。两个图使用相同的 y 轴刻度。

outhi = sosfilt(soshi,y);

figure
subplot(2,1,1)
plot(t,y)
title('Original Signal')
ys = ylim;

subplot(2,1,2)
plot(t,outhi)
title('Highpass-Filtered Signal')
xlabel('Time (s)')
ylim(ys)

Figure contains 2 axes objects. Axes object 1 with title Original Signal contains an object of type line. Axes object 2 with title Highpass-Filtered Signal, xlabel Time (s) contains an object of type line.

设计一个具有相同设定的低通滤波器。对信号进行滤波,并将结果与原始结果进行比较。两个图使用相同的 y 轴刻度。结果大多是噪声。

[zlo,plo,klo] = butter(7,0.48);
soslo = zp2sos(zlo,plo,klo);

outlo = sosfilt(soslo,y);

subplot(2,1,1)
plot(t,y)
title('Original Signal')
ys = ylim;

subplot(2,1,2)
plot(t,outlo)
title('Lowpass-Filtered Signal')
xlabel('Time (s)')
ylim(ys)

Figure contains 2 axes objects. Axes object 1 with title Original Signal contains an object of type line. Axes object 2 with title Lowpass-Filtered Signal, xlabel Time (s) contains an object of type line.

输入参数

全部折叠

二阶节数字滤波器,指定为 L×6 矩阵,其中 L 是二阶节的数量。矩阵

sos=[b01b11b211a11a21b02b12b221a12a22b0Lb1Lb2L1a1La2L]

表示二阶节数字滤波器

H(z)=k=1LHk(z)=k=1Lb0k+b1kz1+b2kz21+a1kz1+a2kz2.

示例: [b,a] = butter(3,1/32); sos = tf2sos(b,a) 用于指定一个归一化 3 dB 频率为 π/32 弧度/采样点的三阶巴特沃斯滤波器。

数据类型: single | double

输入信号,指定为向量、矩阵或 N 维数组。

示例: x = [2 1].*sin(2*pi*(0:127)'./[16 64]) 指定一个双通道正弦波。

数据类型: single | double
复数支持:

沿其运算的维度,指定为正整数标量。默认情况下,该函数沿 x 的大于 1 的第一个数组维度进行运算。

数据类型: single | double

输出参量

全部折叠

滤波后的信号,以向量、矩阵或 N 维数组形式返回。y 具有与 x 相同的大小。

参考

[1] Bank, Balázs. "Converting Infinite Impulse Response Filters to Parallel Form". IEEE Signal Processing Magazine. Vol. 35, Number 3, May 2018, pp. 124-130.

[2] Orfanidis, Sophocles J. Introduction to Signal Processing. Englewood Cliffs, NJ: Prentice-Hall, 1996.

扩展功能

全部展开

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

版本历史记录

在 R2006a 之前推出

另请参阅

| |