附录1:matlab程序代码

上传人:飞*** 文档编号:43875583 上传时间:2018-06-07 格式:DOC 页数:6 大小:37.50KB
返回 下载 相关 举报
附录1:matlab程序代码_第1页
第1页 / 共6页
附录1:matlab程序代码_第2页
第2页 / 共6页
附录1:matlab程序代码_第3页
第3页 / 共6页
附录1:matlab程序代码_第4页
第4页 / 共6页
附录1:matlab程序代码_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《附录1:matlab程序代码》由会员分享,可在线阅读,更多相关《附录1:matlab程序代码(6页珍藏版)》请在金锄头文库上搜索。

1、附录 1:matlab 程序代码LMS 算法、NLMS 算法和 RLS 算法的仿真和当今应用较广的自适应均衡器、自 适应分离器、自适应滤波器。 1.LMS 算法的仿真程序算法的仿真程序: clear all close all hold off%系统信道权数 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 =

2、 lsim(Gz,inp);%加入噪声 n = n * std(y)/(10*std(n);%噪声信号 d = y + n;%期望输出信号 totallength=size(d,1);%步长 N=60 ; %60 节点作为训练序列 %算法的开始 w = zeros ( sysorder , 1 ) ;%初始化 for n = sysorder : N u = inp(n:-1:n-sysorder+1) ;% u 的矩阵 y(n)= w * u;%系统输出 e(n) = d(n) - y(n) ;%误差 if n 20 mu=0.32; else mu=0.15; end w = w + mu

3、 * u * e(n) ;%迭代方程 end %检验结果 for n = N+1 : totallength u = inp(n:-1:n-sysorder+1) ; y(n) = w * u ; e(n) = d(n) - y(n) ;%误差 end hold on plot(d) plot(y,r); title(系统输出) ; xlabel(样本) ylabel(实际输出)figure semilogy(abs(e) ;% e 的绝对值坐标 title(误差曲线) ; xlabel(样本) ylabel(误差矢量) figure%作图 plot(h, k+) hold on plot(w

4、, r*) legend(实际权矢量,估计权矢量) title(比较实际和估计权矢量) ; axis(0 6 0.05 0.35) 2.NLMS 算法的仿真程序算法的仿真程序: clear all close all hold off%系统信道权数 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

5、(Gz,inp);%加入噪声 n = n * std(y)/(10*std(n);%噪声信号 d = y + n;%期望输出信号 totallength=size(d,1);%步长 N=60 ; %60 节点作为训练序列 %算法的开始 w = zeros ( sysorder , 1 ) ;%初始化 for n = sysorder : N u = 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 过小导致步长值太大而

6、设置的 if n 20 mu=0.32; else mu=0.15; end w = w + mu * u * e(n)/(r(n)+fai) ;%迭代方程 end %检验结果for n = N+1 : totallength u = inp(n:-1:n-sysorder+1) ; y(n) = w * u ; e(n) = d(n) - y(n) ;%误差 end hold on plot(d) plot(y,r); title(系统输出) ; xlabel(样本) ylabel(实际输出) figure semilogy(abs(e) ;% e 的绝对值坐标 title(误差曲线) ;

7、xlabel(样本) ylabel(误差矢量) figure%作图 plot(h, k+) hold on plot(w, r*) legend(实际权矢量,估计权矢量) title(比较实际和估计权矢量) ; axis(0 6 0.05 0.35) 3.RLS 算法的仿真程序:算法的仿真程序: randn(seed, 0) ; rand(seed, 0) ; NoOfData = 8000 ; % Set no of data points used for training Order = 32 ; % 自适应滤波权数 Lambda = 0.98 ; % 遗忘因子 Delta = 0.00

8、1 ; % 相关矩阵 R 的初始化 x = randn(NoOfData, 1) ;%高斯随机系列 h = rand(Order, 1) ; % 系统随机抽样 d = filter(h, 1, x) ; % 期望输出 % RLS 算法的初始化 P = Delta * eye ( Order, Order ) ;%相关矩阵 w = zeros ( Order, 1 ) ;%滤波系数矢量的初始化 % RLS Adaptation for n = Order : NoOfData ; u = x(n:-1:n-Order+1) ;%延时函数 pi_ = u * P ;%互相关函数 k = Lambd

9、a + 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) ;%作

10、实际估计误差图 title(矢量估计误差) ; xlabel(迭代次数) ; ylabel(误差权矢量) ; 4.自适应均衡器的仿真程序:自适应均衡器的仿真程序: close all; W=2.9; Nexp=10; N=2000; Nmc=1; % Number of ensemble realizations M=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*p

11、i*(2-2)/W); h(3)=0.5*(1+cos(2*pi*(3-2)/W); % 学习曲线 hc=0 h(1) h(2) h(3); n0=7; t=(1:N); for i=1:Nmc y=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 算法 % Initialization lambd

12、a=0.98;P=(10-3)*eye(M,M); c=zeros(M,1); g=c; glambda=g; % 迭代范围 for n=M:M+N-1 xn=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); end end eplot=e(M:M+N-1).2; subplot(2,1

13、,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

14、,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;%迭代步长 for i=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);%迭代方程 end subplot(2,2,3); %作第三子图 plot(t,e); subplot(2,2,4); %作第四子图 plot(t,s-e)

15、; 6.自适应滤波器的仿真程序自适应滤波器的仿真程序: function LMS_adaptive_filter;%定义功能函数 samples_per_period=40;%周期采样频率 N=10*samples_per_period-1;%总采样次数 signal=sin(2*pi*0.02*0:N-1);%初始输入信号 figure;%作图 1 的第一子图 subplot(2,1,1); plot(signal); grid; title(自适应滤波器的理想输入); nvar=0.5;%噪声方差 noise=nvar*randn(1,N);%噪声信号 X=signal+noise;%带加

16、性噪声的输入信号 delayX=0 X;%输入信号延时 SIGNAL=signal 0; M=32;%滤波器长度 mu=0.035;%迭代步长 subplot(2,1,2);%作图 1 的第二子图 plot(delayX); grid; title(自适应滤波器的噪声输入); initial_status=initlms(zeros(1,M),mu);%滤波器设初值 Y,e,initial_status=adaptlms(X,SIGNAL,initial_status);%LMS 自适应滤波器输 出 figure;%作图 2 的第一子图 subplot(2,1,1); plot(0:N-1,Y,.,0:N,SIGNAL,k); grid; title(预测信号与实际信号的比较

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号