当前位置:编程学习 > Matlab >>

MATLAB高手来,帮忙改改程序,关于自适应滤波器算法的

以下是程序源代码: clear all; clc; m=500;%将输入量赋值 u=0.002;%将输入量赋值 a1=-1.6;a2=0.8; w1(1)=0;w2(1)=0; w1(2)=0;w2(2)=0; n(1)=1;n(2)=2; %%%%%%%% % true sequence x(n) rd=randn(1,m); x(1)=rd(1);x(2)=rd(2); for k=3:m x(k)=rd(k)-a1*x(k-1)-a2*x(k-2); end R=[x(1)*x(1) 0;0 0]; T=0; e(1)=0; W=[0;1]; X=[x(2);x(1)]; e(2)=x(2)-W'*X; %%%%%%%%%% for i=3:1:m %权系数迭代m次 R=[x(i-1)*x(i-1) x(i-1)*x(i-2);x(i-1)*x(i-2) x(i-2)*x(i-2)];%列出自相关矩阵 T=1/(T+trace(R)); %求出迹的值,为后续u的判断做准备 if(u>T) error('u is larger than 1/t[R]');%判断u的值是否小于迹的倒数 end W=W+2*u*X*e(i-1); %LMS算法的权系数迭代公式 X=[x(i-1) x(i-2)]'; %LMS算法中输入信号矢量的递推 e(i)=x(i)-W'*X; w1(i)=-W(1); %LMS算法中权系数a1的提取 n(i)=i; end lambda=eig(R);%由R得出特征值 v=[1;1];%给主轴坐标赋初值 for n1=1:50 w(n1)=v(1)*v(1)*lambda(1)*((1-2*u*lambda(1))^(2*n1))+v(2)*v(2)*lambda(2)*((1-2*u*lambda(2))^(2*n1));%学习曲线的迭代公式 end figure(1) plot(w1,'r-'); %曲线绘图 %title('LMS算法权值收敛情况'); xlabel('迭代次数'); ylabel('权值变化'); grid on; hold on; % m=500;%权系数迭代m次 len=0.98;%%%%遗忘因子 % a1=-1.6;a2=0.8; % w1(1)=1; % w2(1)=1; % w1(2)=1; % w2(2)=2; % n(1)=1; % n(2)=2; % %%%%%%%%%%%输入序列产生%%%%%%%%%%%% % rd=randn(1,m);% 生成白噪声序列 % x(1)=rd(1);x(2)=rd(2);%产生前两个输入序列 % for k=3:m % x(k)=rd(k)-a1*x(k-1)-a2*x(k-2);%产生其余输入序列 % end %%%%%%%%%%%%%%%%%%%%%%%%%%%%% R=[0,0;0,0];%自相关矩阵初值R(-1)=0 W=[w1(2);w2(2)]; %初始权值 P=[0;0]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=3:1:m X=[x(i-1),x(i-2)]'; R= len*R+ X*X';%迭代公式中自相关矩阵的计算 e=x(i)-W'*X;%输出信号误差e(n\n-1) W=W+inv(R)*X*e; %RLS算法的权系数迭代公式 w1(i)=-W(1); %RLS算法中权系数a1的提取 w2(i)=-W(2); %RLS算法中权系数a2的提取 n(i)=i; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%% plot(w1,'b-'); %曲线绘图 title('自适应权系数a1(n)的过渡过程(RLS和LMS算法比较)'); xlabel('迭代次数'); ylabel('权值变化'); legend('LMS','RLS'); grid on; hold off; figure(2) plot(x,'b-'); %曲线绘图 老师说这个不够详细,而且第二个图没有任何标识,求大神弄得详细一点,把第二个图加上横纵坐标的说明,先5分压着,好的我再加分
答案:clear all;
clc;
m=500;%将输入量赋值
u=0.002;%将输入量赋值
a1=-1.6;a2=0.8;
w1(1)=0;w2(1)=0;
w1(2)=0;w2(2)=0;
n(1)=1;n(2)=2;
%%%%%%%%
% true sequence x(n)
rd=randn(1,m);
x(1)=rd(1);x(2)=rd(2);
for k=3:m
    x(k)=rd(k)-a1*x(k-1)-a2*x(k-2);
end
R=[x(1)*x(1) 0;0 0];
T=0;
e(1)=0;
W=[0;1];
X=[x(2);x(1)];
e(2)=x(2)-W'*X;
%%%%%%%%%%  
  for  i=3:1:m   %权系数迭代m次   
       R=[x(i-1)*x(i-1) x(i-1)*x(i-2);x(i-1)*x(i-2) x(i-2)*x(i-2)];%列出自相关矩阵
        T=1/(T+trace(R)); %求出迹的值,为后续u的判断做准备
        if(u>T)
            error('u is larger than 1/t[R]');%判断u的值是否小于迹的倒数
        end
       W=W+2*u*X*e(i-1);   %LMS算法的权系数迭代公式
       X=[x(i-1)  x(i-2)]';  %LMS算法中输入信号矢量的递推
       e(i)=x(i)-W'*X;
       w1(i)=-W(1);    %LMS算法中权系数a1的提取
       n(i)=i;   
end
lambda=eig(R);%由R得出特征值
v=[1;1];%给主轴坐标赋初值
for n1=1:50
    w(n1)=v(1)*v(1)*lambda(1)*((1-2*u*lambda(1))^(2*n1))+v(2)*v(2)*lambda(2)*((1-2*u*lambda(2))^(2*n1));%学习曲线的迭代公式
end
figure(1)
plot(w1,'r-');  %曲线绘图
%title('LMS算法权值收敛情况');
xlabel('迭代次数');
ylabel('权值变化');
grid on;
hold on;

% m=500;%权系数迭代m次
len=0.98;%%%%遗忘因子
% a1=-1.6;a2=0.8;
% w1(1)=1;
% w2(1)=1;
% w1(2)=1;
% w2(2)=2;
% n(1)=1;
% n(2)=2;
% %%%%%%%%%%%输入序列产生%%%%%%%%%%%%
% rd=randn(1,m);% 生成白噪声序列
% x(1)=rd(1);x(2)=rd(2);%产生前两个输入序列
% for k=3:m
%     x(k)=rd(k)-a1*x(k-1)-a2*x(k-2);%产生其余输入序列    
% end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
R=[0,0;0,0];%自相关矩阵初值R(-1)=0
W=[w1(2);w2(2)];    %初始权值
P=[0;0];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
for  i=3:1:m   
     X=[x(i-1),x(i-2)]';
     R= len*R+ X*X';%迭代公式中自相关矩阵的计算
     e=x(i)-W'*X;%输出信号误差e(n\n-1)
     W=W+inv(R)*X*e;   %RLS算法的权系数迭代公式
     w1(i)=-W(1);    %RLS算法中权系数a1的提取
     w2(i)=-W(2);  %RLS算法中权系数a2的提取
     n(i)=i;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
plot(w1,'b-');  %曲线绘图
title('自适应权系数a1(n)的过渡过程(RLS和LMS算法比较)');
xlabel('迭代次数');
ylabel('权值变化');
legend('LMS','RLS');
grid on;
hold off;
for k=3:m
    y(k)=x(k)+w1(k)*x(k-1)+w2(k)*x(k-2);
end
figure(2);
hold on;
plot(x,'b-');  %曲线绘图
grid on;
plot(y,'r-');
title('RLS滤波效果');
xlabel('迭代次数');
ylabel('输入及输出值');
legend('噪音','滤波器输出');
hold off;
其他:figure(2)
plot(x,'b-');  %曲线绘图
xlabel('你需要的注释 但不能是汉语');
ylabel('你需要的注释 但不能是汉语'); /*上面这两行 就能给图2注释*/ 

上一个:关于使用MATLAB编程序的问题:不知道怎么编,也不知道用什么命令,那位大哥帮忙编个?谢谢
下一个:求高手指教MATLAB程序,运行后出现??? Error using ==> crank_slider_velocity Too many input arguments

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,