您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 自适应滤波的MATLAB实现
自适应滤波的MATLAB实现2204090发表于:2006-12-0608:56来源:中国振动联盟1.LMS算法的仿真程序:%lms算法clearallcloseallholdoff%系统信道权数sysorder=5;%抽头数N=1000;%总采样次数inp=randn(N,1);%产生高斯随机系列n=randn(N,1);[b,a]=butter(2,0.25);Gz=tf(b,a,-1);%逆变换函数h=[0.0976;0.2873;0.3360;0.2210;0.0964;];%信道特性向量y=lsim(Gz,inp);%加入噪声n=n*std(y)/(10*std(n));%噪声信号d=y+n;%期望输出信号totallength=size(d,1);%步长N=60;%60节点作为训练序列%算法的开始w=zeros(sysorder,1);%初始化forn=sysorder:Nu=inp(n:-1:n-sysorder+1);%u的矩阵y(n)=w'*u;%系统输出e(n)=d(n)-y(n);%误差ifn20mu=0.32;elsemu=0.15;endw=w+mu*u*e(n);%迭代方程end%检验结果forn=N+1:totallengthu=inp(n:-1:n-sysorder+1);y(n)=w'*u;e(n)=d(n)-y(n);%误差endholdonplot(d)plot(y,'r');title('系统输出');xlabel('样本')ylabel('实际输出')figuresemilogy((abs(e)));%e的绝对值坐标title('误差曲线');xlabel('样本')ylabel('误差矢量')figure%作图plot(h,'k+')holdonplot(w,'r*')legend('实际权矢量','估计权矢量')title('比较实际和估计权矢量');axis([060.050.35])2.NLMS算法的仿真程序:%lms算法clearallcloseallholdoff%系统信道权数sysorder=5;%抽头数N=1000;%总采样次数inp=randn(N,1);%产生高斯随机系列n=randn(N,1);[b,a]=butter(2,0.25);Gz=tf(b,a,-1);%逆变换函数h=[0.0976;0.2873;0.3360;0.2210;0.0964;];%信道特性向量y=lsim(Gz,inp);%加入噪声n=n*std(y)/(10*std(n));%噪声信号d=y+n;%期望输出信号totallength=size(d,1);%步长N=60;%60节点作为训练序列%算法的开始w=zeros(sysorder,1);%初始化forn=sysorder:Nu=inp(n:-1:n-sysorder+1);%u的矩阵y(n)=w'*u;%系统输出r(n)=u'*u;%自相关矩阵e(n)=d(n)-y(n);%误差fai=.0001;%修正参数,为防止u'*u过小导致步长值太大而设置的ifn20mu=0.32;elsemu=0.15;endw=w+mu*u*e(n)/(r(n)+fai);;%迭代方程end%检验结果forn=N+1:totallengthu=inp(n:-1:n-sysorder+1);y(n)=w'*u;e(n)=d(n)-y(n);%误差endholdonplot(d)plot(y,'r');title('系统输出');xlabel('样本')ylabel('实际输出')figuresemilogy((abs(e)));%e的绝对值坐标title('误差曲线');xlabel('样本')ylabel('误差矢量')figure%作图plot(h,'k+')holdonplot(w,'r*')legend('实际权矢量','估计权矢量')title('比较实际和估计权矢量');axis([060.050.35])3.RLS算法的仿真程序:%RLS算法randn('seed',0);rand('seed',0);NoOfData=8000;%SetnoofdatapointsusedfortrainingOrder=32;%自适应滤波权数Lambda=0.98;%遗忘因子Delta=0.001;%相关矩阵R的初始化x=randn(NoOfData,1);%高斯随机系列h=rand(Order,1);%系统随机抽样d=filter(h,1,x);%期望输出%RLS算法的初始化P=Delta*eye(Order,Order);%相关矩阵w=zeros(Order,1);%滤波系数矢量的初始化%RLSAdaptationforn=Order:NoOfData;u=x(n:-1:n-Order+1);%延时函数pi_=u'*P;%互相关函数k=Lambda+pi_*u;K=pi_'/k;%增益矢量e(n)=d(n)-w'*u;%误差函数w=w+K*e(n);%递归公式PPrime=K*pi_;P=(P-PPrime)/Lambda;%误差相关矩阵w_err(n)=norm(h-w);%真实估计误差end;%作图表示结果figure;plot(20*log10(abs(e)));%|e|的误差曲线title('学习曲线');xlabel('迭代次数');ylabel('输出误差估计');figure;semilogy(w_err);%作实际估计误差图title('矢量估计误差');xlabel('迭代次数');ylabel('误差权矢量');4.自适应均衡器的仿真程序:%IllustrationoftheconventionalRLSalgorithmcloseall;W=2.9;Nexp=10;N=2000;Nmc=1;%NumberofensemblerealizationsM=11;%抽头系数lambda=0.99;%遗忘因子varv=0.001;%噪声方差h=zeros(3,1);%h的初始化er=zeros(N,Nmc);%er的初始化h(1)=0.5*(1+cos(2*pi*(1-2)/W));h(2)=0.5*(1+cos(2*pi*(2-2)/W));h(3)=0.5*(1+cos(2*pi*(3-2)/W));%学习曲线hc=[0h(1)h(2)h(3)]';n0=7;t=(1:N)';fori=1:Nmcy=sign(rand(N,1)-0.5);%输入信号v=sqrt(varv)*randn(N,1);%噪声信号x=filter(hc,1,y)+v;%信号混合x=[zeros(M-1,1);x];%x矩阵yd=zeros(N+M-1,1);%延迟信号初始化e=yd;yd(n0+M-1:N+M-1)=y(1:N-n0+1);%CRLS算法%Initializationlambda=0.98;P=(10^-3)*eye(M,M);c=zeros(M,1);g=c;glambda=g;%迭代范围forn=M:M+N-1xn=flipud(x(n-M+1:n));glambda=P*xn;alphal=lambda+conj(glambda')*xn;g=glambda/lambda;a(n)=1-conj(g')*xn;P=(P-g*conj(glambda'))/lambda;P=(P+P')/2;e(n)=yd(n)-conj(c')*xn;c=c+g*conj(e(n));endendeplot=e(M:M+N-1).^2;subplot(2,1,1),plot(t,abs(eplot))ylabel('|e(n)|^2');xlabel('n');subplot(2,1,2),plot(t,a(M:M+N-1));ylabel('\alpha(n)');xlabel('n');5.自适应陷波器的仿真程序:N=400;%总采样长度t=0:N-1;%时间的变化范围s=sin(2*pi*t/20);%输入信号A=0.5;%干扰信号的幅值fai=pi/3;%干扰信号的相移n=A*cos(2*pi*t/10+fai);%干扰信号x=s+n;%信号混合subplot(2,2,1);%作第一子图plot(t,s);subplot(2,2,2);%作第二子图plot(t,x);x1=cos(2*pi*t/10);x2=sin(2*pi*t/10);%初始化w1=0.1;w2=0.1;e=zeros(1,N);y=0;u=0.05;%迭代步长fori=1:Ny=w1*x1(i)+w2*x2(i);e(i)=x(i)-y;%误差信号w1=w1+u*e(i)*x1(i);%迭代方程w2=w2+u*e(i)*x2(i);%迭代方程endsubplot(2,2,3);%作第三子图plot(t,e);subplot(2,2,4);%作第四子图plot(t,s-e);
本文标题:自适应滤波的MATLAB实现
链接地址:https://www.777doc.com/doc-5793099 .html