RLS算法程序
clc;
hold on;
%-----------------设置参数---------------------- C=10;
a=1;
pv=a^2/3;
px=11*pv;
sigma_v2=1e-3;
L=800;
M=50;
mu=1/(10*px*L);
A=3;
omega=pi/3;
lambda=0.995;
%---------------RLS---------------------
ac_learn_curve=zeros(L,1);
for c=1:C
v=zeros(L,1);
v=2*(rand(L,1)-0.5);
s=zeros(L,1);
for l=1:L
s(l)=A*sin(omega*l);
end
x=s+v;
x1=zeros(L,1);
for l=1:L
if l==1
x1(l)=x(l);
else
x1(l)=x(l-1);
end
end
u_=zeros(M,1);
e=zeros(L,1);
y=zeros(L,1);
r=eye(M);
w=zeros(M,1);
NMSD=zeros(L,1);
for l=1:L
u_=[x1(l);u_(1:M-1)];
y(l)=u_'*w;
e(l)=x(l)-y(l);
r=1/lambda*(r-(r*u_*u_'*r)/(lambda+u_'*r*u_));
w=w+r*u_*e(l);
NMSD(l)=e(l)^2;
end
ac_learn_curve=ac_learn_curve+NMSD;
end
learn_curve=ac_learn_curve./C;
%---------------------Part 3----------------
figure(1);
subplot(411);plot(v);title('噪声信号v(n)');
axis([0 500 -5 5]);
subplot(412);plot(s);title('正弦信号s(n)');
axis([0 500 -5 5]);
subplot(413);plot(x);title('输入信号x(n)=v(n)+s(n)');
axis([0 500 -5 5]);
subplot(414);plot(e);title('输出信号e(n)');
axis([0 500 -5 5]);
figure(3);
B=[1 -w'];
freqz(B);
figure(4);
plot((learn_curve),'b');
xlabel('\fontsize{8}\rmIteration Number')
ylabel('\fontsize{8}\rmSquare error ')