# 递推最小二乘法及模型阶次辨识

• v6_357373
了解作者
• 367.3KB
文件大小
• rar
文件格式
• 0
收藏次数
• VIP专享
资源类型
• 0
下载次数
• 2022-06-11 00:00
上传日期

• 递推最小二乘法及模型阶次辨识
• 实验二报告.docx
408.8KB
• main2.m
3.2KB

close all; clear all; %%%%%%%%%%%人机对话%%%%%%%%%%%%%%%%% lambda=input('噪声标准差为（0.0或0.1或0.5或1.0）? '); L=input('数据长度为（100或300或500）? '); miu=input('遗忘因子为（0,1之间）? '); %%%%%%%%设定模型阶次从2到6，即Nbeg=2,Nend=6(假定na=nb)%%%%%%%%% %%%%%%%%%%%%%%%赋初值并生成M序列和噪声序列%%%%%%%%%% %%%%%%%%%%%%%%生成a=1,P=4的M序列%%%%%%%%%%%%%%%%% M=[0 1 0 1 0 ]; Np=2^4-1; for k=1:534 if M(5)==0 u(k)=1;end; if M(5)==1 u(k)=-1;end; for i=5:-1:2 M(i)=M(i-1); end M(1)=M(2)+M(5); if M(1)==2 M(1)=0;end; end %%%%%%%%%%%%%%%生成白噪声v（k）%%%%%%%%%%%%%%%%%%%% A=179; xi=11; M=32768; for k=1:534 ksai=0; for i=1:12 xi=A*xi; xi=mod(xi,M); ksai=ksai+(xi/M); end v(k)=ksai-6; end %%%%%%%%%%%%%%%%%过程仿真%%%%%%%%%%%%%%%% z(1)=0; z(2)=0; for k=3:length(u) z(k)=1.5*z(k-1)-0.7*z(k-2)+u(k-1)+0.5*u(k-2)+lambda*v(k);% end %%%%%%%%%%%%%%%%%%模型参数估计，RLS算法%%%%%%%%%%%% for n=2:6 for i=1:2*n theta(i,n)=eps; end P=eye(2*n); for i=1:L for j=1:n if (i-j)<=0 H(j,i)=0; else H(j,i)=-z(i-j); end end for m=(n+1):2*n if (i-m+n)<=0 H(m,i)=0; else H(m,i)=u(i-m+n); end end end J(n)=0; for k=1:L K=P*H(:,k)*inv(H(:,k)'*P*H(:,k)+miu); J(n)=miu*(J(n)+((z(k)-H(:,k)'*theta(:,n))^2/(H(:,k)'*P*H(:,k)+miu))); theta(:,n)=theta(:,n)+K*(z(k)-H(:,k)'*theta(:,n)); P=((eye(2*n)-K*H(:,k)')*P)/miu; end end %%%%%%%%%%%%%%%模型阶次识别%%%%%%%%%%%%%%%% if L==100 for n=1:5 if (J(n)-J(n+1))*(L-2*n-2)/(2*J(n+1))<=3.09 N=n+1 break end end end if L==300 for n=1:5 if (J(n)-J(n+1))*(L-2*n-2)/(2*J(n+1))<=3.03 N=n+1 break end end end if L==500 for n=1:5 if (J(n)-J(n+1))*(L-2*n-2)/(2*J(n+1))<=3.01 N=n+1 break end end end %%%%%%%%%%%%%%%输出结果%%%%%%%%%%%%%%%% if N==2 A=theta(1:2,N) B=theta(3:4,N) end if N==3 A=theta(1:3,N) B=theta(4:6,N) end if N==4 A=theta(1:4,N) B=theta(5:8,N) end if N==5 A=theta(1:5,N) B=theta(6:10,N) end if N==6 A=theta(1:6,N) B=theta(7:12,N) end %%%%%%%%%%%%%%%%%%%计算性能指标%%%%%%%%%%%%%%%%%% lam1=sqrt(J(N)/(L-2*N))%%%%%%%%%%%%%%噪声标准差的估计 lam2=sum(B)/(1+sum(A))%%%%%%%%%%%%%模型静态增益估计 a0=1;a1=-1.5;a2=0.7;b0=0;b1=1;b2=0.5; thetazhen=[a1,a2,b1,b2]'; chazhi=thetazhen-theta(1:4,2); lam3=sqrt(sum((chazhi./thetazhen).^2))%%%%%%参数估计平方相对偏差 lam4=sqrt(sum(chazhi.^2)/sum(thetazhen.^2))%%%%%%%%%参数估计平方根偏差 Kzhen=(1+0.5)/(1-1.5+0.7); lam5=sqrt(abs(lam2-Kzhen)/Kzhen)%%%%%%%%%静态增益估计相对偏差 a02=a0;a12=a1;a22=a2; a01=(a02*a02-a22*a22)/a02; a11=(a02*a12-a22*a12)/a02; a00=(a01*a01-a11*a11)/a01; b02=b0;b12=b1;b22=b2; b11=(a02*b12-b22*a12)/a02; b01=(a02*b02-b22*a22)/a02; b00=(a01*b01-b11*a11)/a01; vary=b00^2/a00+b11^2/a01+b22^2/a02; xinzaobi=lambda/sqrt(vary)%%%%%%%%%%%计算信噪比

相关推荐
• 最小二乘法
最小二乘法的线性拟合和二次拟合的实现。 1.1 线性拟合 给定一组数据（xi，yi），i=1，2，…，m，做拟合直线。 1.2 二次拟合 给定数据系列（xi，yi），i=1，2，…，m，用二次多项式函数拟合这组数据。作出拟合函数与...
• 最小二乘法
最不二乘法C++,用VS2008开发，界面丰富
• 最小二乘法程序
简易最小二乘法程序，核心代码，有心人可下载
• 最小二乘法
本程序用MATLAB实现了不同形式的最小二乘算法,程序运行效率高
• 最小二乘法
NULL 博文链接：https://yexin218.iteye.com/blog/602693
• 最小二乘法
给定离散点, 通过最小二乘法拟合曲面..上课老师布置的作业, 是可运行的
• 最小二乘法
此款软件能迅速处理最小二乘法的问题，便于操作，利于我们更好的处理数据。
• 最小二乘法拟合
最小二乘法多项式拟合，需要进行几次多项式拟合，只需要把宏定义的N改变一下就可以了，例如要进行n次拟合只需把N改成n+1
• 最小二乘法
最小二乘法，山东大学数值计算实验，C++语言
• 最小二乘法
最小二乘法进行系统辨识，望给大家一定帮助