本文对块自适应滤波器作以介绍,如有表述不当之处欢迎批评指正。欢迎任何形式的转载,但请务必注明出处。
1. 引言
自适应滤波算法主要包含滤波和滤波器系数更新两个阶段。从滤波器系数更新这个角度来说,传统的 LMS(可参考 自适应滤波器之 LMS 算法)和 NLMS(可参考 自适应滤波器之 NLMS 算法)算法都是 sample-based algorithm,因为每来一个采样点,它们便更新一次滤波器系数。而块自适应滤波器是来了一个数据块之后才更新一次滤波器系数,本文依然使用横向滤波器(可参考 自适应滤波器之横向滤波器)结构,以块 LMS 算法为主,对块自适应滤波器作以简单介绍。
2. 划分数据块
首先,令
x
⃗
(
n
)
=
[
x
(
n
)
,
x
(
n
−
1
)
⋯
x
(
n
−
M
+
1
)
]
T
(1)
\vec{x}(n) = [x(n), x(n-1) \cdots x(n-M+1)]^T \tag{1}
x(n)=[x(n),x(n−1)⋯x(n−M+1)]T(1)
表示时刻 n n n 的滤波器输入向量(即横向滤波器每个抽头的输入值组成的向量),其中 M M M 表示滤波器的长度, [ ⋅ ] T [\cdot]^T [⋅]T 表示向量或矩阵转置。需要注意的是,只有 x ( n ) x(n) x(n) 是时刻 n n n 接收到的新采样点,而其它采样点都是旧的历史数据;
接着,举例说明如何将单独的采样点划分为数据块,令
L
L
L 表示数据块的长度,
k
k
k 表示数据块的索引。 假设有如下序列,按照数据块的方式(令
L
=
4
L = 4
L=4),该序列可以被划分为:
⋯
−
4
,
−
3
,
−
2
,
−
1
,
⏟
k
−
1
0
,
1
,
2
,
3
,
⏟
k
4
,
5
,
6
,
7
,
⏟
k
+
1
⋯
\cdots \; \underbrace{-4, \, -3, \, -2, \, -1,}_{k-1} \; \underbrace{0, \, 1, \, 2, \, 3,}_{k} \; \underbrace{4, \, 5, \, 6, \, 7,}_{k+1} \cdots
⋯k−1
−4,−3,−2,−1,k
0,1,2,3,k+1
4,5,6,7,⋯
可以看到,划分数据块的过程其实很简单,即每
L
L
L 个采样点就划分出一个块而已。
k
k
k、
L
L
L 、
n
n
n 之间的关系可以表示为:
n
=
k
L
+
i
,
i
=
0
,
1
⋯
L
−
1
a
n
d
k
=
1
,
2
⋯
(2)
n=kL+i, \quad i=0, 1 \cdots L-1 \; and \; k=1, 2 \cdots \tag{2}
n=kL+i,i=0,1⋯L−1andk=1,2⋯(2)
3. 滤波器的输入矩阵
上节提到,当接收到一个新的采样点时,对应的滤波器输入为一个向量。那么当接收到一个新的数据块时,对应的滤波器输入为什么形式那?答案是:矩阵形式,且表示为:
A
⃗
T
(
k
)
=
[
x
⃗
(
k
L
)
,
x
⃗
(
k
L
+
1
)
⋯
x
⃗
(
k
L
+
L
−
1
)
]
(3)
\vec{A}^T(k) = [\vec{x}(kL), \vec{x}(kL+1) \cdots \vec{x}(kL+L-1)] \tag{3}
AT(k)=[x(kL),x(kL+1)⋯x(kL+L−1)](3)
以上节划分得到的第 k k k 个数据块为例,其对应的滤波器输入矩阵 A ⃗ ( k ) \vec{A}(k) A(k) 由表1 给出(令 M = 6 M=6 M=6)。
表1 中横向表示滤波器的长度
M
=
6
M=6
M=6,纵向表示块长
L
=
4
L=4
L=4。数值
0
,
1
,
2
,
3
0,1, 2, 3
0,1,2,3 是第
k
k
k 个数据块;
−
1
,
−
2
,
−
3
,
−
4
-1, -2, -3, -4
−1,−2,−3,−4 是第
k
−
1
k-1
k−1 个数据块;
−
5
-5
−5 属于第
k
−
2
k-2
k−2 个数据块。
可以看到,当接收到一个新数据块时,滤波器的输入就是将新数据块中每个采样点对应的滤波器输入组织成了矩阵的形式而已。
4. 块 LMS 算法
在对整个数据块滤波期间,滤波器的抽头权向量(即横向滤波器每个抽头权值组成的向量)是固定不变的,这是因为块自适应算法是以块为单位来更新滤波器系数的。
令:
h
⃗
(
k
)
=
[
h
0
(
k
)
,
h
1
(
k
)
⋯
h
M
−
1
(
k
)
]
T
(4)
\vec{h}(k) = [h_0(k), h_1(k) \cdots h_{M-1}(k)]^T \tag{4}
h(k)=[h0(k),h1(k)⋯hM−1(k)]T(4)
表示滤波器的抽头权向量,则滤波器对数据块中每个采样点产生的输出为:
y
(
k
L
+
i
)
=
x
⃗
T
(
k
L
+
i
)
h
⃗
(
k
)
,
i
=
0
,
1
⋯
L
−
1
(5)
y(kL+i) = \vec{x}^{T}(kL+i) \vec{h}(k), \quad i=0, 1 \cdots L-1 \tag{5}
y(kL+i)=xT(kL+i)h(k),i=0,1⋯L−1(5)
令
d
(
k
L
+
i
)
d(kL+i)
d(kL+i) 表示对应点的期望响应,则误差信号为:
e
(
k
L
+
i
)
=
d
(
k
L
+
i
)
−
y
(
k
L
+
i
)
,
i
=
0
,
1
⋯
L
−
1
(6)
e(kL+i) = d(kL+i) - y(kL+i), \quad i=0, 1 \cdots L-1 \tag{6}
e(kL+i)=d(kL+i)−y(kL+i),i=0,1⋯L−1(6)
其矩阵形式为:
y
⃗
(
k
)
=
[
y
(
k
L
)
,
y
(
k
L
+
1
)
,
⋯
,
y
(
k
L
+
L
−
1
)
]
T
=
A
⃗
(
k
)
h
⃗
(
k
)
(7)
\begin{aligned} \vec{y}(k) &= [y(kL), y(kL+1), \cdots, y(kL+L-1)]^{T} \\ &= \vec{A}(k) \vec{h}(k) \end{aligned} \tag{7}
y(k)=[y(kL),y(kL+1),⋯,y(kL+L−1)]T=A(k)h(k)(7)
d ⃗ ( k ) = [ d ( k L ) , d ( k L + 1 ) , ⋯ , d ( k L + L − 1 ) ] T (8) \vec{d}(k) = [d(kL), d(kL+1), \cdots, d(kL+L-1)]^{T} \tag{8} d(k)=[d(kL),d(kL+1),⋯,d(kL+L−1)]T(8)
e ⃗ ( k ) = [ e ( k L ) , e ( k L + 1 ) , ⋯ , e ( k L + L − 1 ) ] T = d ⃗ ( k ) − y ⃗ ( k ) (9) \begin{aligned} \vec{e}(k) &= [e(kL), e(kL+1), \cdots, e(kL+L-1)]^{T} \\ &= \vec{d}(k) - \vec{y}(k) \end{aligned} \tag{9} e(k)=[e(kL),e(kL+1),⋯,e(kL+L−1)]T=d(k)−y(k)(9)
结合传统的 LMS 算法,块 LMS 算法的抽头权向量更新公式可以表示为:
h
⃗
(
k
+
1
)
=
h
⃗
(
k
)
+
μ
∑
i
=
0
L
−
1
x
⃗
(
k
L
+
i
)
e
(
K
L
+
i
)
(10)
\vec{h}(k+1) = \vec{h}(k) + \mu \sum_{i=0}^{L-1} \vec{x}(kL+i) e(KL+i) \tag{10}
h(k+1)=h(k)+μi=0∑L−1x(kL+i)e(KL+i)(10)
其矩阵形式为:
h
⃗
(
k
+
1
)
=
h
⃗
(
k
)
+
μ
A
⃗
T
(
k
)
e
⃗
(
k
)
(11)
\vec{h}(k+1) = \vec{h}(k) + \mu \vec{A}^{T}(k) \vec{e}(k) \tag{11}
h(k+1)=h(k)+μAT(k)e(k)(11)
( 7 ) 、 ( 9 ) 、 ( 11 ) (7)、(9)、(11) (7)、(9)、(11) 共同构成了块 LMS 算法。
5. 块长的选择
L = M L=M L=M,从计算复杂度观点看,这是最佳选择;
L < M L<M L<M,由于块的长度小于滤波器的长度,这种情况有降低处理时延的好处;
L > M L>M L>M,在自适应过程中会产生冗余计算。
一般选取 L = M L=M L=M,它是大多数实际应用中人们更喜欢的一种自适应滤波选择。
6. 总结
块自适应滤波器是研究频域自适应滤波器的基础,关于块自适应滤波器的步长 μ \mu μ 及其它更多的讨论可参考 论文笔记之 BLMS。
7. 参考文献
[1] 自适应滤波器原理(第四版) 原作者:simon haykin