如有不当之处欢迎批评指正
传统的LMS(点击学习LMS算法)和NLMS(点击学习NLMS算法)算法都是sample based algorithm,即每来一个样值便更新一次滤波器系数。顾名思义,块自适应滤波器是每来一个数据块更新一次滤波器系数,此处块自适应滤波器采用横向滤波器(点击此处学习横向滤波器)的结构
令
x(n)=[x(n),x(n−1),...,x(n−M+1)]T\mathbf{x}(n)=[x(n),x(n-1),...,x(n-M+1)]^Tx(n)=[x(n),x(n−1),...,x(n−M+1)]T
表示时刻nnn输入信号向量(即横向滤波器每个抽头的输入值);
令
h(n)=[h0(n),h1(n),...,hM−1(n)]T\mathbf{h}(n)=[h_0(n),h_1(n),...,h_{M-1}(n)]^Th(n)=[h0(n),h1(n),...,hM−1(n)]T
表示时刻nnn滤波器的抽头权向量,其中MMM表示滤波器的长度,TTT表示向量或矩阵转置。
令kkk表示块的下标,它与原始样值时间nnn的关系为:
n=kL+in=kL+in=kL+i i=0,1,...,L−1i=0,1,...,L-1i=0,1,...,L−1,k=1,2,...k=1,2,...k=1,2,...
其中LLL表示数据块的长度。第kkk块的输入数据定义为:
AT(k)=[x(kL),x(kL+1),...,x(kL+L−1)]\mathbf{A}^T(k)=[\mathbf{x}(kL),\mathbf{x}(kL+1),...,\mathbf{x}(kL+L-1)]AT(k)=[x(kL),x(kL+1),...,x(kL+L−1)]
在这个输入数据块持续期间,滤波器的抽头权向量保持不变。表1举例说明了滤波器长度M=6M=6M=6,块长度L=4L=4L=4时的结构。
表1中横向表示滤波器的长度M=6M=6M=6,纵向表示块长度L=4L=4L=4,数值0,1,2,30,1,2,30,1,2,3属于当前块的数据,−1,−2,−3,−4,−5-1,-2,-3,-4,-5−1,−2,−3,−4,−5属于之前数据块的数据。
滤波器对输入信号向量产生的对应输出为:
y(kL+i)=hT(k)x(kL+i)(1)y(kL+i)=\mathbf{h}^T(k)\mathbf{x}(kL+i)\tag{1}y(kL+i)=hT(k)x(kL+i)(1)
令d(kL+)d(kL+)d(kL+)表示期望响应,则误差信号为:
e(kL+i)=d(kL+i)−y(kL+i)(2)e(kL+i)=d(kL+i)-y(kL+i)\tag{2}e(kL+i)=d(kL+i)−y(kL+i)(2)
结合传统的LMS算法,运行在实数据上的块LMS算法的抽头权向量的更新公式如下:
h(k+1)=h(k)+μ∑i=0L−1x(kL+i)e(KL+i)(3)\mathbf{h}(k+1)=\mathbf{h}(k)+\mu\sum _{i=0}^{L-1} \mathbf{x}(kL+i)e(KL+i)\tag{3}h(k+1)=h(k)+μi=0∑L−1x(kL+i)e(KL+i)(3)
a. L=ML=ML=M,从计算复杂度观点看,这是最佳选择;
b. L
c. L>ML>ML>M,会产生自适应过程的冗余计算。
一般选取L=ML=ML=M,它是大多数实际应用中人们更喜欢的一种自适应滤波选择。
[1] 自适应滤波器原理(第四版) 原作者:simon haykin