系统辨识最小二乘Matlab仿真

合集下载

系统辨识最小二乘Matlab仿真

系统辨识最小二乘Matlab仿真

系统辨识和最小二乘参数估计Matlab仿真一、系统辨识在控制系统的分析中,首先要建立系统的数学模型,控制系统的数学模型是定量描述系统或过程内部物理量(或变量)之间关系的数学表达式。

一般来说,建立控制系统数学模型有两种基本方法:(1)机理建模(白箱模型):即根据系统内在运行机制、物料和能量守恒等物理学、化学规律建立系统的数学模型,一般步骤如下:Step1:根据系统工作原理及其在控制系统中的作用,确定输入和输出;Step2:根据物料和能量守恒等关系列写基本方程式;Step3:消去中间量;Step4:获得系统模型;(2)实验法建模(黑箱模型):即对于机理尚不清楚或机理过于复杂的系统,可以人为的对其施加某种测试信号,并记录其输出响应,或者记录正常运行时的输入输出数据,然后利用这些输入输出数据确定系统模型结构和参数。

多年来,系统辨识已经发展为一门独立学科分支,通过系统辨识建立一个对象的数学模型,通常包括两方面的工作:一是模型结构的确定(模型的类型、阶次),二是模型参数估计。

根据时间是否连续,参数模型又可以分为连续时间系统模型和离散时间系统参数模型,这两类模型均可采用输入输出模型和状态空间模型描述,离散系统采用差分方程描述,以单输入单输出(SISO)离散系统参数模型为例。

1.确定性模型SISO系统确定性模型可表示为:u(k)和y(k)分别为输入和输出,d为纯延时。

2.随机性模型如果受到随机扰动,则式子可写为:为系统随机扰动,其结构如图:系统辨识的一般步骤如图:从图中可以看出,利用辨识的方法建立系统数学模型,从实验设计到模型获得,需要这些步骤。

二、最小二乘参数估计1.批处理最小二乘考虑以下CAR模型:为白噪声,结构参数na、nb和d已知,参数估计的任务就是根据可测量的输入输出,确定如下参数:仿真实例:式中,为方差为1的白噪声,选用幅值为1的逆M序列作为输入,LS算法进行参数估计,仿真结果如图:仿真程序(Matlab):%批处理最小二乘参数估计(LS)clear all;a=[1 -1.5 0.7]'; b=[1 0.5]'; d=3; %对象参数na=length(a)-1; nb=length(b)-1; %na、nb为A、B阶次L=500; %数据长度uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i)yk=zeros(na,1); %输出初值x1=1; x2=1; x3=1; x4=0; S=1; %移位寄存器初值、方波初值xi=randn(L,1); %白噪声序列theta=[a(2:na+1);b]; %对象参数真值for k=1:Lphi(k,:)=[-yk;uk(d:d+nb)]'; %此处phi(k,:)为行向量,便于组成phi矩阵y(k)=phi(k,:)*theta+xi(k); %采集输出数据IM=xor(S,x4); %产生逆M序列if IM==0u(k)=-1;elseu(k)=1;endS=not(S); M=xor(x3,x4); %产生M序列%更新数据x4=x3; x3=x2; x2=x1; x1=M;for i=d+nb:-1:2uk(i)=uk(i-1);enduk(1)=u(k);for i=na:-1:2yk(i)=yk(i-1);endyk(1)=y(k);endthetae=inv(phi'*phi)*phi'*y' %计算参数估计值thetae2.递推最小二乘在批处理最小二乘法时,由于每次处理的数据量较大,而且常常要求对象参数能够在线实时估计,解决的方法就是将其化成递推算法,其基本思想为:算法介绍:仿真实例:式中,为方差为0.1的白噪声,取初值,选择方差为1的白噪声作为输入信号u(k),采用RLS算法进行参数估计,仿真结果如图:仿真程序(Matlab):%递推最小二乘参数估计(RLS)clear all; close all;a=[1 -1.5 0.7]'; b=[1 0.5]'; d=3; %对象参数na=length(a)-1; nb=length(b)-1; %na、nb为A、B阶次L=400; %仿真长度uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i)yk=zeros(na,1); %输出初值u=randn(L,1); %输入采用白噪声序列xi=sqrt(0.1)*randn(L,1); %白噪声序列theta=[a(2:na+1);b]; %对象参数真值thetae_1=zeros(na+nb+1,1); %thetae初值P=10^6*eye(na+nb+1);for k=1:Lphi=[-yk;uk(d:d+nb)]; %此处phi为列向量y(k)=phi'*theta+xi(k); %采集输出数据%递推最小二乘法K=P*phi/(1+phi'*P*phi);thetae(:,k)=thetae_1+K*(y(k)-phi'*thetae_1);P=(eye(na+nb+1)-K*phi')*P;%更新数据thetae_1=thetae(:,k);for i=d+nb:-1:2uk(i)=uk(i-1);enduk(1)=u(k);for i=na:-1:2yk(i)=yk(i-1);endyk(1)=y(k);endplot([1:L],thetae); %line([1,L],[theta,theta]); xlabel('k'); ylabel('参数估计a、b');legend('a_1','a_2','b_0','b_1'); axis([0 L -2 2]);。

系统辨识-最小二乘法MATLAB仿真

系统辨识-最小二乘法MATLAB仿真

《系统辨识》基于MATLAB的最小二乘法(一阶)的仿真clcclear% ①白噪声的生成过程如下:e=randn(1,500);e=e/std(e);e=e-mean(e);A=0; %白噪声的均值为0B=sqrt(0.1); %白噪声的方差为0.1e=A+B*e;%绘制白噪声图k=1:500;subplot(4,1,1) %画四行一列图形窗口中的第一个图形plot(k,e,'r');xlabel('k'), ylabel('e');title('(0,1)均匀分布的随机序列')% ②生成M序列的过程如下:X1=1;X2=0;X3=1;X4=0; %移位寄存器输入Xi初始状态(0101),Yi寄存器的各级输出m=500; %M序列的总长度for i=1:mY4=X4; Y3=X3; Y2=X2; Y1=X1;X4=Y3; X3=Y2; X2=Y1;X1=xor(Y3,Y4); %异或运算if Y4==0U(i)=-1;elseU(i)=Y4;endendM=U;u=U;%绘制M序列图¼i1=ik=1:1:i1;subplot(4,1,2) %画四行一列图形窗口中的第二个图形plot(k,U,k,U,'rx')stem(M)xlabel('k')ylabel('M序列')title('移位寄存器产生的M序列')% ③参数估计的过程如下:%绘制参数估计的相关图形z=zeros(1,500); %定义输出观测值的长度for k=2:500z(k)=0.9*z(k-1)+u(k-1)+e(k);%用理想输出值作为观测值endsubplot(4,1,3) %画四行一列图形窗口中的第三个图形i=1:1:500; %横坐标的范围从1到500,步长为1plot(i,z) %图形的横坐标是采样时刻i,纵坐标是输出观测值Z,图形格式为连续曲线subplot(4,1,4) %画四行一列图形窗口中的第四个图形stem(z),grid on%画出输出观测值Z的经线图形,并显示坐标网络u,z %显示输入信号和输出观测信号%给矩阵HL和ZL赋初值HL(:,1)=-z(1,1:499);HL(:,2)=u(1,1:499);ZL(:,1)=z(1,2:500);%计算参数c1=HL'*HL; c2=inv(c1); c3=HL'*ZL; c=c2*c3a1=c(1),b1=c(2) %从中分离出a1¡b1仿真截图仿真结果之一:c=-9.018 a1= b1=1.0108 -9.018 1.0108。

利用Matlab进行系统辨识的技术方法

利用Matlab进行系统辨识的技术方法

利用Matlab进行系统辨识的技术方法在Matlab中进行系统辨识的技术方法主要有参数估计法和非参数估计法两种。

1.参数估计法:参数估计法是通过拟合已知输入和输出数据的数学模型来估计系统的参数。

常用的参数估计方法包括最小二乘法(OLS)、最小二乘法(LSE)、最小二乘法(MLE)和极大似然估计法(MLE)等。

a) 最小二乘法(OLS):OLS方法通过最小化实际输出与模型预测输出之间的误差平方和来估计系统参数。

在Matlab中,可以使用lsqcurvefit函数来实现最小二乘法的系统辨识。

b) 最小二乘法(LSE):LSE方法是通过最小化实际输出与模型预测输出之间的误差平方和来估计系统参数。

在Matlab中,可以使用lsqnonlin函数来实现最小二乘法的系统辨识。

c) 最小二乘法(MLE):MLE方法是通过最大化似然函数来估计系统参数。

在Matlab中,可以使用mle函数来实现最大似然估计法的系统辨识。

2.非参数估计法:非参数估计法不需要事先指定系统的数学模型,而是直接根据输入和输出数据的统计特性进行系统辨识。

常用的非参数估计方法包括频域方法、时域方法和时频域方法等。

a) 频域方法:频域方法通过对输入和输出数据进行频谱分析来估计系统的频率响应。

常用的频域方法包括傅里叶变换、功率谱密度估计和频率响应函数估计等。

在Matlab中,可以使用fft函数和pwelch函数来实现频域方法的系统辨识。

b) 时域方法:时域方法通过对输入和输出数据进行时间序列分析来估计系统的时域特性。

常用的时域方法包括自相关函数估计和互相关函数估计等。

在Matlab中,可以使用xcorr函数来实现时域方法的系统辨识。

c) 时频域方法:时频域方法结合了频域方法和时域方法的优势,可以同时估计系统的频率响应和时域特性。

常用的时频域方法包括短时傅里叶变换和小波变换等。

在Matlab中,可以使用spectrogram函数和cwt函数来实现时频域方法的系统辨识。

基于MATLAB的递推最小二乘法辨识与仿真_强明辉

基于MATLAB的递推最小二乘法辨识与仿真_强明辉

基于MATLAB的递推最小二乘法辨识与仿真强明辉 ,张京娥(兰州理工大学电气工程与信息工程学院 甘肃兰州,730050)摘 要: 通过对最小二乘算法的分析,推导出了递推最小二乘法的运算公式,提出了基于MATLAB /Simulink的使用递推最小二乘法进行参数辨识的设计与仿真方法。

并采用Simulink建立系统的仿真对象模型和运用MATLAB的S-函数编写最小二乘递推算法,结合实例给出相应的仿真结果和分析。

仿真结果表明,该仿真方法克服了传统编程语言仿真时繁杂、难度高、周期长的缺点,是一种简单、有效的最小二乘法的编程仿真方法。

关键词: Matlab;Simulink;参数辨识;递推最小二乘法;仿真Abstract: This paper based on the analysis of least-squares algorithm derived a RLS of calculation formula and proposed based on MATLAB/Simulink the use of RLS to identify the parameters of design and simulation methods. Adopt the simulation model with MATLAB /Simulink and the method using S-function in MATLAB to design the algorithm of RLS. According to an given example, the simulation and results are analyzed. The simulation results show that the method can overcome such disadvan-tages as properties of complexity, diffculty and lengthiness in the traditionalmethod of using program language. By using this method, the dynamic system simulation becomes easy, visual and quick. So it is a simple and effective method of least squares programming Simulation.Key words: Matlab; Simulink; Parameter identification; RLS; Simulation中图分类号:TP271+.7 文献标识码:A 文章编号:1001-9227(2008)06-0004-030 引 言最小二乘法首先是由Gauss为进行行星轨道预测的研究而提出的,现在最小二乘法已经成为用于系统参数估计的主要方法之一。

用matlab实现最小二乘递推算法辨识系统参数

用matlab实现最小二乘递推算法辨识系统参数

用matlab实现最小二乘递推算法辨识系统参数自动化系统仿真实验室指导教师:学生姓名班级计082-2 班学号撰写时间:全文结束》》-3-1 成绩评定:一.设计目的1、学会用Matlab实现最小二乘法辨识系统参数。

2、进一步熟悉Matlab的界面及基本操作;3、了解并掌握Matlab中一些函数的作用与使用;二.设计要求最小二乘递推算法辨识系统参数,利用matlab编程实现,设初始参数为零。

z(k)-1、5*z(k-1)+0、7*z(k-2)=1*u(k-1)+0、5*u(k-2)+v(k); 选择如下形式的辨识模型:z(k)+a1*z(k-1)+a2*z(k-2)=b1*u(k-1)+b2*u(k-2)+v(k);三.实验程序m=3;N=100;uk=rand(1,N);for i=1:Nuk(i)=uk(i)*(-1)^(i-1);endyk=zeros(1,N); for k=3:N yk(k)=1、5*yk(k-1)-0、7*yk(k-2)+uk(k-1)+0、5*uk(k-2);end%j=100;kn=0;%y=yk(m:j);%psi=[yk(m-1:j-1);yk(m-2:j-2);uk(m-1:j-1);uk(m-2:j-2)];%pn=inv(psi*psi);%theta=(inv(psi*psi)*psi*y);theta=[0 ;0;0;0];pn=10^6*eye(4);for t=3:Nps=([yk(t-1);yk(t-2);uk(t-1);uk(t-2)]);pn=pn-pn*ps*ps*pn*(inv(1+ps*pn*ps));theta=theta+pn*ps*(yk(t)-ps*theta);thet=theta;a1=thet(1);a2=thet(2);b1=thet(3);b2= thet(4);a1t(t)=a1;a2t(t)=a2;b1t(t)=b1;b2t(t)=b2;endt=1:N;plot(t,a 1t(t),t,a2t(t),t,b1t(t),t,b2t(t));text(20,1、47,a1);text(20,-0、67,a2);text(20,0、97,b1);text(20,0、47,b2);四.设计实验结果及分析实验结果图:仿真结果表明,大约递推到第步时,参数辨识的结果基本到稳态状态,即a1=1、5999,b1=1,c1=0、5,d1=-0、7。

Matlab最小二乘系统辨识

Matlab最小二乘系统辨识

Matlab最⼩⼆乘系统辨识原理还是⽐较简单的,不赘述,程序⾥⾯的注释也写的⽐较清楚了%仿真对象:y(k)-1.5y(k-1)+0.7y(k-2)=v(k)+u(k)-0.8u(k-1)%辨识模型:y(k)+a1 y(k-1)+a2 y(k-2)=v(k)+b1 u(k)+b2 u(k-1)%数据长度取n=20000,加权矩阵为I,v(k)是服从正态分布的⽩噪声N(0,1),u(k)=sin(k)%待估计参数K=[a1 a2 a3 a4]';准则函数J(K)=(Yn-HnK)'(Yn-HnK);%将辨识模型写为:y(k)=v(k)+a1 y(k-1)+a2 y(k-2)+b1 u(k)+b2 u(k-1)% =v(k)+KHn%Hn=|y(2) y(1)|% |y(3) y(2)|% |.........|clearclose alldata_length=20002;%% 产⽣⽩噪声和输⼊v=randn(1,data_length);v=v./max(v);u=zeros(1,data_length);for k=1:data_lengthu(k)=sin(k);end%% 获得观测值y=zeros(1,data_length);for k=3:data_lengthy(k)=1.5*y(k-1)-0.7*y(k-2)+v(k)+u(k)-0.8*u(k-1);end%% 构造Hn和Y矩阵Hn=zeros(data_length-2,2);count=1;for k=1:10000Hn(k,2)=y(count);count=count+1;Hn(k,1)=y(count);Hn(k,4)=u(count);Hn(k,3)=u(count+1);end%% 求解参数Y=y(3:data_length)';c1=Hn'*Hn;c2=inv(c1);c3=Hn'*Y;K=c2*c3%% 将辨识得到的参数代⼊,得估计输出y_e=zeros(1,data_length);for k=3:data_lengthy_e(k)=K(1)*y_e(k-1)+K(2)*y_e(k-2)+v(k)+K(3)*u(k)+K(4)*u(k-1);end%% 画出实际输出和辨识输出,进⾏对⽐plot((1:data_length),y');title('实际输出')hold onplot((1:data_length),y_e');title('辨识输出')figuresubplot(2,1,1)plot((1:data_length),y');title('实际输出')subplot(2,1,2)plot((1:data_length),y_e');title('辨识输出')。

机械系统辨识及仿真最小二乘法

机械系统辨识及仿真最小二乘法

作业四宋家亮15030024一、实验题目用MatLAB辨识系统,系统输出分别叠加两种不同类型的噪声,针对每一种情况使用最小二乘整批算法、递推算法和广义最小二乘法实现辨识。

图1 图2二、实验思路及目的对图1、图2分别通过构造的系统给定输入(白噪声和M序列)并叠加噪声(白噪声和有色噪声),测得输出数据并显示,对未知系统定阶并用整批、递推、广义最小二乘算法进行辨识,显示辨识结果;比较三种算法对不同噪声模型的辨识精度(λ取相同的值),显示辨识结果的脉冲响应图像并于理想系统响应对比,对结果给予合理的解释;改变 值(0.01,0.02,0.03等),比较辨识结果的精度,说明信噪比对各种算法辨识精度的影响。

三、实验过程1、设计界面利用guide编辑器针对所要实现的功能添加控件进行界面初步的设计,设计结果如图1.1所示图1.12、设置控件属性对界面的控件设置属性,形成实验所需要的最终界面,如图2.1所示:图2.1其中系统噪声和输入信号设置成可选择的属性,其value值作为后面函数中的控制条件,这个刚开始走了弯路,直接用string属性做控制条件,结果发现根本实现不了,请教大神后选择value值作为控制条件,因为value值默认为1,当通过下拉选项选择下一个信号时其value值会自动加1。

如图2.2所示。

图2.23、设计guide回调函数(1)噪声参数输入的回调函数本实验设计成噪声参数可输入的程序,所以为达到这一目的,添加了参数输入控件,通过如图3.1所示打开回调函数,添加如下程序,可以将输入的容转变成数字用于后续函数的运算。

global zaoshengxishuzaoshengxishu=get(handles.zaoshengxishu,'String'); zaoshengxishu=str2num(zaoshengxishu);%将输入的字符串λ变成数值图3.1(2)开始辨识按钮的回调函数(主体程序)如图3.2打开开始辨识按钮回调函数,添加主程序(见附录),这样通过点击该按钮可实现本实验的所有功能。

基于Matlab系统辨识的参数辨识与仿真

基于Matlab系统辨识的参数辨识与仿真

基于Matlab系统辨识的参数辨识与仿真【摘要】论述了系统辨识的基本理论,分别用最小二乘法参数辨识和辅助变量法参数辨识。

根据Matlab系统辨识工具箱中的一些基本函数,结合实例来熟悉基于系统辨识工具箱的建模方法。

【关键词】Matlab;参数辨识;最小二乘法;辅助变量法1.系统辨识的基本理论系统辨识是根据系统的输入输出的时间函数来确定描述系统行为的数学模型,是现代控制理论中的一个分支。

对系统进行分析的主要问题是根据输入时间函数和系统的特性来确定输出信号。

它包括确定系统数学模型结构和估计其参数的方法。

系统辨识的流程如图1所示。

图1 系统辨识过程流程图2.模型参数辨识的方法系统辨识包括模型阶次辨识和参数辨识。

经典参数辨识的方法主要有他包括脉冲响应法、阶跃响应法、频率响应法、最小二乘法、相关分析法、谱分析法和极大似然法等,其中最小二乘法是最基本和最经典的,也是其他方法基本的思想的来源。

比如辅助变量法。

2.1 最小二乘法辨识考虑如下CAR模型:(1)参数估计的任务是根据可测量的输入和输出,确定如下个参数:对象(1)可以写成如下最小二乘形式:(2)现有L组输入输出观测数据:利用最小二乘法得到系统参数的估计值为:(3)2.2 辅助变量法辨识当为有色噪声时,利用最小二乘法进行参数辨识时往往得不到无偏一致的参数估计量。

在这个时候可以引入变量,然后利用最小二乘法进行辨识就可得到无偏一致的参数估计量。

因此,对于线性或本质线性系统,其过程的模型都可以化成最小二乘形式,考虑如下所示的模型方程:(4)将上式写成最小二乘格式,则得:假定存在一个辅助变量矩阵,维数与H相同,它满足以下极限特性:式中Q是非奇异矩阵。

如果辅助变量满足上述条件,则有:(5)图2 系统仿真图3.建模实例3.1 非参数模型辨识某被控对象的数学模型可以表示为:,式中:;为白噪声,编制MATLAB程序,分别对上述对象进行ARX建模和辅助变量法建模,并比较两种方法得到的脉冲响应。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

系统辨识和最小二乘参数估计Matlab仿真
一、系统辨识
在控制系统的分析中,首先要建立系统的数学模型,控制系统的数学模型是定量描述系统或过程内部物理量(或变量)之间关系的数学表达式。

一般来说,建立控制系统数学模型有两种基本方法:
(1)机理建模(白箱模型):即根据系统内在运行机制、物料和能量守恒等物理学、化学规律建立系统的数学模型,一般步骤如下:
Step1:根据系统工作原理及其在控制系统中的作用,确定输入和输出;
Step2:根据物料和能量守恒等关系列写基本方程式;
Step3:消去中间量;
Step4:获得系统模型;
(2)实验法建模(黑箱模型):即对于机理尚不清楚或机理过于复杂的系统,可以人为的对其施加某种测试信号,并记录其输出响应,或者记录正常运行时的输入输出数据,然后利用这些输入输出数据确定系统模型结构和参数。

多年来,系统辨识已经发展为一门独立学科分支,通过系统辨识建立一个对象的数学模型,通常包括两方面的工作:一是模型结构的确定(模型的类型、阶次),二是模型参数估计。

根据时间是否连续,参数模型又可以分为连续时间系统模型和离散时间系统参数模型,这两类模型均可采用输入输出模型和状态空间模型描述,离散系统采用差分方程描述,以单输入单输出(SISO)离散系统参数模型为例。

1.确定性模型
SISO系统确定性模型可表示为:
u(k)和y(k)分别为输入和输出,d为纯延时。

2.随机性模型
如果受到随机扰动,则式子可写为:
为系统随机扰动,其结构如图:
系统辨识的一般步骤如图:
从图中可以看出,利用辨识的方法建立系统数学模型,从实验设计到模型获得,需要这些步骤。

二、最小二乘参数估计
1.批处理最小二乘
考虑以下CAR模型:
为白噪声,结构参数na、nb和d已知,参数估计的任务就是根据可测量的输入输出,确定如下参数:
仿真实例:
式中,为方差为1的白噪声,选用幅值为1的逆M序列作为输入,LS算法进行参数估计,仿真结果如图:
仿真程序(Matlab):
%批处理最小二乘参数估计(LS)
clear all;
a=[1 -1.5 0.7]'; b=[1 0.5]'; d=3; %对象参数
na=length(a)-1; nb=length(b)-1; %na、nb为A、B阶次
L=500; %数据长度
uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i)
yk=zeros(na,1); %输出初值
x1=1; x2=1; x3=1; x4=0; S=1; %移位寄存器初值、方波初值
xi=randn(L,1); %白噪声序列
theta=[a(2:na+1);b]; %对象参数真值
for k=1:L
phi(k,:)=[-yk;uk(d:d+nb)]'; %此处phi(k,:)为行向量,便于组成phi矩阵
y(k)=phi(k,:)*theta+xi(k); %采集输出数据
IM=xor(S,x4); %产生逆M序列
if IM==0
u(k)=-1;
else
u(k)=1;
end
S=not(S); M=xor(x3,x4); %产生M序列
%更新数据
x4=x3; x3=x2; x2=x1; x1=M;
for i=d+nb:-1:2
uk(i)=uk(i-1);
end
uk(1)=u(k);
for i=na:-1:2
yk(i)=yk(i-1);
end
yk(1)=y(k);
end
thetae=inv(phi'*phi)*phi'*y' %计算参数估计值thetae
2.递推最小二乘
在批处理最小二乘法时,由于每次处理的数据量较大,而且常常要求对象参数能够在线实时估计,解决的方法就是将其化成递推算法,其基本思想为:
算法介绍:
仿真实例:
式中,为方差为0.1的白噪声,取初值,选择方差为1的白噪声作为输入信号u(k),采用RLS算法进行参数估计,仿真结果如图:
仿真程序(Matlab):
%递推最小二乘参数估计(RLS)
clear all; close all;
a=[1 -1.5 0.7]'; b=[1 0.5]'; d=3; %对象参数
na=length(a)-1; nb=length(b)-1; %na、nb为A、B阶次L=400; %仿真长度
uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i)
yk=zeros(na,1); %输出初值
u=randn(L,1); %输入采用白噪声序列
xi=sqrt(0.1)*randn(L,1); %白噪声序列
theta=[a(2:na+1);b]; %对象参数真值
thetae_1=zeros(na+nb+1,1); %thetae初值
P=10^6*eye(na+nb+1);
for k=1:L
phi=[-yk;uk(d:d+nb)]; %此处phi为列向量
y(k)=phi'*theta+xi(k); %采集输出数据
%递推最小二乘法
K=P*phi/(1+phi'*P*phi);
thetae(:,k)=thetae_1+K*(y(k)-phi'*thetae_1);
P=(eye(na+nb+1)-K*phi')*P;
%更新数据
thetae_1=thetae(:,k);
for i=d+nb:-1:2
uk(i)=uk(i-1);
end
uk(1)=u(k);
for i=na:-1:2
yk(i)=yk(i-1);
end
yk(1)=y(k);
end
plot([1:L],thetae); %line([1,L],[theta,theta]); xlabel('k'); ylabel('参数估计a、b');
legend('a_1','a_2','b_0','b_1'); axis([0 L -2 2]);。

相关文档
最新文档