编辑: GXB156399820 | 2019-07-08 |
LMS滤波器结构 根据序列模型易知,这里滤波器应该为单输入自适应线性组合器,且具有二阶FIR型结构,具体的结构如下面的框图所示: 2. LMS算法模型 LMS算法最核心的思想是用平方误差代替均方误差.这样原来的梯度现在用下式来近似,即 根据上式得到 将上式代入最陡下降法迭代计算权矢量公式得到 其中,为随时间变化大小可调的权系数矢量;
是控制搜索步长的参数,称为自适应增益常数,或收敛参数;
是性能曲面的梯度;
是当前时刻的误差;
是输入序列矢量. 3.LMS数据模型 输入序列x(n)由零均值、单位方差的白噪声w(n)通过如下自回归模型产生.其中,模型参数.这里我将画出权系数逐渐收敛于-1.6的过渡特性,采用LMS算法确定相应的模型参数,LMS自适应参数分别为0.02和0.06. 4.MATLAB仿真 4.1MATLAB源程序 function y=f() global mu w=lms_(0.02) plot(w(:,1),'--k');
hold on;
plot(w(:,2),'--k');
u=lms_(0.06) plot(u(:,1));
hold on;
plot(u(:,2));
function w=lms_(mu) N=150;
v=wgn(1,N,0.1);
x(1)=v(1);
x(2)=1.6*x(1)+v(2);
d(1)=0.2*x(1);
d(2)=0.2*x(2)+0.7*x(1);
w=zeros(N,2);
for i=3:N x(i)=1.6*x(i-1)-0.8*x(i-2)+v(i);
d(i)=0.2*x(i)+0.7*x(i-1);
end for i=2:N y(i)=x(i)*w(i,1)+x(i-1)*w(i,2);
e(i)=d(i)-y(i);
w(i+1,:)=w(i,:)+mu*e(i)*[x(i) x(i-1)];
end end 4.2MATLAB输出图形:如下图 图4自适应权系数a(n)的过渡过程 1.FTF算法模型 (1)产生噪声序列,取样序列和参考响应. (2)初始化 ,这里是一个小的正的常数. (3)迭代计算(按时间你=1,2…) a.前向预测误差滤波器参数 b.N+1阶角参量 c.N+1阶增益滤波器权矢量 d.后向预测误差滤波器参量、N阶角参量和N阶增益(滤波器权)矢量(注意,这些参量的计算是交叉进行的) e.最小二乘横向自适应滤波器参数 2.FTF数据模型 序列由零均值、单位方差的白噪声通过如下自回归模型 其中=1.558, =-0.81 3.MATLAB仿真 3.1.MATLAB源程序 %signal mode=step1 N=100;
i=1:N;
noise=wgn(1,N,0.1);
x(1)=noise(1);
x(2)=1.5*x(1)+noise(2);
for i=3:N x(i)=1.558*x(i-1)-0.81*x(i-2)+noise(i);
end %expective x d(1)=0.9*x(1);
for i=2:N d(i)=0.7*x(i)-0.2*x(i-1);
end %initialize all data=step2 a=[0 0];
b=[0 0];
weight=zeros(N,2)two parameters gain=[0 0];
angle=1.0;
two rank err_for_leavings=0.1;
err_bac_leavings=0.1;
%itrative computation according to time step3 for i=3:1:N err_for_leavings_last=err_for_leavings;
%forward prediction=a err_for_predict=x(i)-[x(i-1) x(i-2)]*a';
err_for=angle*err_for_predict;
err_for_leavings=err_for_leavings+err_for*err_for_predict;
%get foward error leavings a=a+err_for_predict*gain;
get a2 %three rank angle b angle_3=angle*err_for_leavings_last/err_for_leavings;
%three rank gain filter=c gain_3=[0 gain]+err_for/err_for_leavings*[1 -1*a];
gain_3_12=gain_3(1:2);
gain_3_3=gain_3(3);
%backward predict ,two rank angle,two rank gain=d err_bac_predict=x(i-2)-[x(i) x(i-1)]*b';
angle=angle_3/(1-gain_3_3*err_bac_predict);
err_bac=angle*err_bac_predict;
err_bac_leavings=err_bac_leavings+err_bac*err_bac_predict;
gain=(gain_3_12+gain_3_3*b)*angle/angle_3;
b=b+err_bac_predict*gain;