IIR滤波器定义
IIR(infinite impulse response)滤波器,无限冲击响应滤波器,IIR滤波器定义如下,
∑
l
=
0
N
a
(
l
)
y
(
n
−
l
)
=
∑
k
=
0
M
b
(
k
)
x
(
n
−
k
)
\sum_{l=0}^{N}a(l)y(n-l)=\sum_{k=0}^{M}b(k)x(n-k)
l=0∑Na(l)y(n−l)=k=0∑Mb(k)x(n−k)
令
a
(
0
)
=
1
a(0) = 1
a(0)=1,
a
(
l
)
,
l
=
1
,
2
,
.
.
.
N
a(l),l=1,2,...N
a(l),l=1,2,...N取反后得,
y
(
n
)
=
∑
k
=
0
M
b
(
k
)
x
(
n
−
k
)
+
∑
l
=
1
N
a
(
l
)
y
(
n
−
l
)
y(n)=\sum_{k=0}^{M}b(k)x(n-k) +\sum_{l=1}^{N}a(l)y(n-l)
y(n)=k=0∑Mb(k)x(n−k)+l=1∑Na(l)y(n−l)
滤波器结构图
直接I型滤波器
用个例子来说明,令
N
=
M
=
3
N=M=3
N=M=3,
y
(
n
)
=
∑
l
=
1
3
a
(
l
)
y
(
n
−
l
)
+
∑
k
=
0
3
b
(
k
)
x
(
n
−
k
)
y(n)=\sum_{l=1}^{3}a(l)y(n-l) + \sum_{k=0}^{3}b(k)x(n-k)
y(n)=l=1∑3a(l)y(n−l)+k=0∑3b(k)x(n−k)
直接I型结构图,
用滤波器的系统函数表示为,
y
(
h
)
=
h
(
n
)
∗
x
(
n
)
y(h)=h(n) * x(n)
y(h)=h(n)∗x(n)
同时做
z
z
z变换后,系统函数为,
H
(
z
)
=
∑
k
=
0
M
b
(
k
)
z
−
k
1
−
∑
l
=
1
N
a
(
l
)
z
−
l
=
B
(
z
)
A
(
z
)
H(z)=\frac{\sum_{k=0}^{M}b(k)z^{-k}}{1 - \sum_{l=1}^{N}a(l)z^{-l}}=\frac{B(z)}{A(z)}
H(z)=1−∑l=1Na(l)z−l∑k=0Mb(k)z−k=A(z)B(z)
从结构图中可以看出,在程序实现时,需要
2
(
N
−
1
)
2(N-1)
2(N−1)个缓存。
直接II型滤波器
可以看出
B
(
z
)
B(z)
B(z)对应的就是直接I型结构图中的蓝色区域,
A
(
z
)
A(z)
A(z)对应的就是粉色区域,从系统函数出发,调换其中
B
(
z
)
B(z)
B(z)和
A
(
z
)
A(z)
A(z)的顺序,
H
(
z
)
=
B
(
z
)
1
A
(
z
)
=
1
A
(
z
)
B
(
z
)
H(z)=B(z)\frac{1}{A(z)}=\frac{1}{A(z)}B(z)
H(z)=B(z)A(z)1=A(z)1B(z)
调换顺序后的结构图可以看到中间一部分共有操作可以合并,合并后的结构图为直接II型结构图。
从直接II型结构图中可以看出,在程序实现时,只要
(
N
−
1
)
(N-1)
(N−1)个缓存,比直接I型减少了(N-1)个缓存。
程序仿真
直接I型结构一阶IIR
load('HighPass50HzFs16k.mat')
fs = 16000;
data = rand(fs,1);
data_out1 = zeros(size(data));
data_out2 = zeros(size(data));
b0 = SOS(1);
b1 = SOS(2);
b2 = SOS(3);
a1 = SOS(5);
a2 = SOS(6);
x1=0; x2=0; y1=0; y2=0;
[bb,aa] = sos2tf(SOS,G);
data_out0 = filter(bb,aa,data);
for i = 1:length(data)
x0 = data(i);
y0 = (x0 * b0 + x1 * b1 + x2 * b2) * G(1) ...
- y1 * a1 - y2 * a2;
data_out1(i) = y0;
x2 = x1;
x1 = x0;
y2 = y1;
y1 = y0;
end
直接II型结构一阶IIR
s1 = 0; s2 = 0;
for i = 1:length(data)
s0 = data(i) - a1 * s1 - a2 *s2;
y0 = (s0 * b0 + s1 * b1 + s2 * b2) * G(1);
data_out2(i) = y0;
s2 = s1;
s1 = s0;
end
代码链接
https://github.com/myuzhao/SpeechEnhance/blob/main/iir/iir.m
参考
胡广书. 数字信号处理: 理论, 算法与实现[M]. 清华大学出版社有限公司, 2005.
http://ece.uccs.edu/~mwickert/ece2610/lecture_notes/ece2610_chap8.pdf