系统辨识大作业1201张青

合集下载

上机实习Ⅰ:系统辨识方法初识

上机实习Ⅰ:系统辨识方法初识

上机实习Ⅰ:系统辨识方法初识12自动化许天野12350068指导老师:王国利摘要:系统辨识、状态估计和控制理论是现代控制论中相互渗透的三个领域。

控制理论的应用离不开系统辨识技术,实际中,许多控制系统的模型在工作中是变化的,为了实现自适应控制,需要系统辨识技术不断更新模型参数。

通过学习使用MATLAB软件,初步体验系统辨识方法。

关键字:系统辨识,控制理论,MATLAB。

Practice 1:Practice the method of System identification Abstract: System identification, State estimation and The Principle of Automatic Control are three different disciplines of the modern control theory, which are interpenetrated with one another. In practice, the model of system is changing all the time. To control adaptively, the system model should be update its parameters, by the method of System identification. By learning the using of MATLAB, we are supposed to practice the method of system identification.Key Words: System identification, System identification, MATLAB目录一、引言 (3)1.1介绍 (3)1.2实验目的 (3)二、实验内容和方法 (3)2.1实验内容 (3)2.2实验步骤 (3)2.2.1输入信号选择 (4)2.2.2 数据收集 (4)2.2.3 实验步骤 (4)三、实验结果 (5)四、实验分析探究 (7)4.1分析 (7)4.2探究 (7)4.3结果分析 (10)一、引言1.1介绍在自然科学和社会科学的许多领域中,人们越来越重视对系统进行定量的系统分析、系统综合、仿真、控制和预测。

系统辨识基础--经典辨识方法

系统辨识基础--经典辨识方法

其中
Lh i 1t s1c1 sc2s2 1 ci 1 si 1
h
9
进一步利用下式
e s t 1 s ts2 t2 si ti
1 ! 2 !
i!
可得 得
L1h*t 1h*testdt Misi
0
i0
Mi
0
1h*t
ti
i!
dt
1Aisi1Misi11
i1 i0
a4 4 4.1207
b1 7.5 7.50402
b2 17.5 17.5233
h
15
4.3 脉冲响应法
ut
yt
1 ut
过 程 yt
0
t
0
t
gk1hkhk1
T0
h
16
ut
过程
yt
gt,0
模型参数 调整机构
~yt +
-
模型
gt,
图4.6 “学习法”原理
h
17
由脉冲响应求过程的传递函数-一阶过程
条件
增益K
a1
噪声 情况
无测量噪 声
有测量噪 声(方差 为0.01)
采样时间 4秒 1.5秒
1.5秒
数据长度 12 30
30
1.0 0.999984 0.999965
1.00204
10.0 11.7097 10.2171
11.5776
a2
6.5 6.52053 6.49897
6.47451
参数
真值 估 计 值
h
14
例 4.2
G s4s41 1s.5 5 3 7s 21 .7 5 7 .s 52 s 7 1.5s1

安大系统辨识作业

安大系统辨识作业

2012系统辨识实验姓名:周自飞学号:P4*******年级专业:09自动化线性系统参数估计的最小二乘法一、实验目的:1、掌握线性离散系统的数学模型;2、掌握线性离散系统在无噪声时的单位脉冲响应;3、掌握线性系统参数估计的最小二乘法。

二、实验原理:1、基本最小二乘算法2、递推最小二乘算法3、渐消记忆递推最小二乘算法4、辅助变量递推最小二乘算法5、增广递推最小二乘算法三、实验内容:设带有噪声的离散系统模型为:()()()()()()k213.0-13.0-+.028.11-412+ukkukyk--yξky=现给定系统的一列长度为50的输入序列:u(k)= 1,0.3,-0.5,0.9,-0.5,-0.3,-0.2,0.4,0.8,-0.6,-0.1,0,0.1,0.5,-0.6,-0.2,0.3,0.9,0.5,0.2,-0.6,-0.3,-0.1,0.7,0,0.3,-0.6,0.3,0.1,0.5,-0.7,-0.4,-0.9,-0.6,-0.2,-0.4,-0.2,0.1,-0.1,0.1,0.9,0.5,0.3,0.7,0.4,-0.2,-0.7,-0.2,0.1,01. 构造离散系统模型函数,给出无噪声时系统在单位脉冲输入下的响应序列;%zhouzifei.mb=[0.3 -0.213];a=[1 -1.28 0.41];impz(b,a,30);title(‘系统单位脉冲响应’);axis([-1 30 -0.2 0.5]);2. 给出系统在给定输入u(k)和噪声()kξ下的输出信号y(k);%zifei2.m3. 利用已有输入信号u(k)和在第2步中得出的输出信号y(k),使用下列方法辨识系统的参数:(1) 基本最小二乘算法%LS.m参数:a1 =-1.2803a2 =0.4138b0 = 0.2867b1 = -0.2104(2) 递推最小二乘算法%RLS.m参数:a1 =-1.2800 a2 =0.4100 b0 = 0.3000 b1 = -0.2130(3) 渐消记忆递推最小二乘算法%FMRLS参数:a1 =-1.2800 a2 =0.4100 b0 = 0.3000 b1 = -0.2130(4) 辅助变量递推最小二乘算法%IVLS.m参数:a1 =-1.2800 a2 =0.4100b0 = 0.3000 b1 = -0.2130(5) 增广递推最小二乘算法(可选做,有加分)%ARLS.m参数:a1 =-1.2800 a2 =0.4100 b0 = 0.3000 b1 = -0.2130四、实验结果:最小二乘法思想是使各次观测值和计算值之间差值的平方乘以度量其精确度的数值后的和为最小。

系统辨识大作业1201张青

系统辨识大作业1201张青

《系统辨识》大作业学号:********班级:自动化1班姓名:**信息与控制工程学院自动化系2015-07-11第一题模仿index2,搭建对象,由相关分析法,获得脉冲响应序列ˆ()g k,由ˆ()g k,参照讲义,获得系统的脉冲传递函数()G z和传递函数()G s;应用最小二乘辨识,获得脉冲响应序列ˆ()g k;同图显示两种方法的辨识效果图;应用相关最小二乘法,拟合对象的差分方程模型;构建时变对象,用最小二乘法和带遗忘因子的最小二乘法,(可以用辨识工具箱) 辨识模型的参数,比较两种方法的辨识效果差异;答:根据index2搭建结构框图:相关分析法:利用结构框图得到UY 和tout其中的U就是题目中要求得出的M序列,根据结构框图可知序列的周期是1512124=-=-=npN。

在command window中输入下列指令,既可以得到脉冲相应序列()g k:aa=5;NNPP=15;ts=2; RR=ones(15)+eye(15); for i=15:-1:1UU(16-i,:)=UY(16+i:30+i,1)'; endYY=[UY(31:45,2)];GG=RR*UU*YY/[aa*aa*(NNPP+1)*ts]; plot(0:2:29,GG) hold onstem(0:2:29,GG,'filled') Grid;title('脉冲序列g(τ)')最小二乘法建模的响应序列由于是二阶水箱系统,可以假设系统的传递函数为221101)(sa s a sb b s G +++=,已知)(τg ,求2110,,,a a b b已知G (s )的结构,用长除法求得G(s)的s 展开式,其系数等于从 )( g 求得的各阶矩,然后求G(s)的参数。

得到结果: a1 =-1.1561 a2 =0.4283 b0 =-0.0028 b1=0.2961在command window 中输入下列指令得到传递函数:最小二乘一次算法相关参数%最小二乘法一次完成算法 M=UY(:,1); z=UY(:,2); H=zeros(100,4); for i=1:100 H(i,1)=-z(i+1); H(i,2)=-z(i); H(i,3)=M(i+1); H(i,4)=M(i); endEstimate=inv(H'*H)*H'*(z(3:102)) %结束得到相关系数为:Estimate =-0.7866 0.1388 0.5707 0.3115带遗忘因子最小二乘法:%带遗忘因子最小二乘法程序M=UY(:,1);z=UY(:,2);P=1000*eye(5); %Theta=zeros(5,200); %Theta(:,1)=[0;0;0;0;0];K=zeros(4,400); %K=[10;10;10;10;10];lamda=0.99;%遗忘因数for i=3:201h=[-z(i-1);-z(i-2);M(i);M(i-1);M(i-2)];K=P*h*inv(h'*P*h+lamda);Theta(:,i-1)=Theta(:,i-2)+K*(z(i)-h'*Theta(:,i-2));P=(eye(5)-K*h')*P/lamda;endi=1:200;figure(1)plot(i,Theta(1,:),i,Theta(2,:),i,Theta(3,:),i,Theta(4,:),i,Theta(5,:) )title('带遗忘因子最小二乘法')grid%结束Estimate 可由仿真图得出,可知两种方法参数确定十分接近。

系统辨识步骤及内容

系统辨识步骤及内容

系统辨识步骤及内容系统辨识是研究如何用实验研究分析的办法来建立待求系统数学模型的一门学科。

Zadeh(1962)指出:“系统辨识是在输入和输出数据的基础上,从一类模型中确定一个与所观测系统等价的模型”。

Ljung(1978)也给出如下定义:“系统辨识有三个要素——数据、模型类和准则,即根据某一准则,利用实测数据,在模型类中选取一个拟合得最好的模型”。

实际上,系统的数学模型就是对该系统动态本质的一种数学描述,它向人们提示该实际系统运行中的有关动态信息。

但系统的数学模型总比真实系统要简单些,因此,它仅是真实系统降低了复杂程度但仍保留其主要特征的一种近似数学描述。

建立数学模型通常有两种方法,即机理分析建模和实验分析建模。

机理分析建模就是根据系统内部的物理和化学过程,概括其内部变化规律,导出其反映系统动态行为并表征其输入输出关系的数学方程(即机理模型)。

但有些复杂过程,人们对其复杂机理和内部变化规律尚未完全掌握(如高炉和转炉的冶炼过程等)。

因此,用实验分析方法获得表征过程动态行为的输入输出数据,以建立统计模型,实际上是系统辨识的主要方面,它可适用于任何结构的复杂过程。

系统辨识的主要步骤和内容有以下几个方面。

1、辨识目的根据对系统模型应用场合的不同,对建模要求也有所不同。

例如,对理论模型参数的检验及故障检测和诊断用的模型则要求建得精确些。

而对于过程控制和自适应控制等用的模型的精度则可降低一些,因为这类模型所关心的主要是控制效果的好坏,而不是所估计的模型参数是否收敛到真值。

2、验前知识验前知识是在进行辨识模型之前对系统机理和操作条件、建模目的等了解的统称。

有些场合为了获得足够的验前知识还要对系统进行一些预备性的实验,以便获得一些必要的系统参数,如系统中主要的时间常数和纯滞后时间,是否存在非线性,参数是否随时间变化,允许输入输出幅度和过程中的噪声水平等。

3、实验设计实验设计的主要内容是选择和决定:输入信号的类型、产生方法、引入点、采样周期、在线或离线辨识、信号的滤波等。

系统辨识大作业

系统辨识大作业

系统辨识大作业专业班级:自动化09-3学号:09051325姓名:吴恩作业一:设某物理量Y与X满足关系式2=++,实验获得一批数据Y aX bX c如下表,试辨识模型参数,,a b c。

(15分)解答:问题描述:由题意知,这是一个已知模型为Y=aX2+bX+c,给出了10组实验输入输出数据,要求对模型参数a,b,c进行辨识。

问题求解:这里对该模型参数辨识采用最小二乘法的一次算法(LS)求解。

2=++可以写成矩阵形式Y=AE+e;其中A=[X^2,X,1]构成, Y aX bX c利用matlab不难求解出结果。

运行结果:利用所求的的参数,求出给定的X对应的YE值,列表如下做出上表的图形如下12345678910xyy=ax 2+bx+c 参数求解结果分析:根据运行结果可以看出,拟合的曲线与真是观测的数据有误差,有出入,但是误差较小,可以接受。

出现误差的原因,一方面是由于给出的数据只有十个点,数据量太少,难以真正的充分的计算出其参数,另外,该问题求解采用的是LS 一次算法,因此计算方法本身也会造成相应的误差。

作业二:模仿实验二,搭建对象,由相关分析法,获得脉冲相应序列()g k,由()G z;和传递函数g k,参照讲义,获得系统的脉冲传递函数()G s及应用相关最小二乘法,拟合对象的差分方程模型;加阶跃()扰动,用最小二乘法和带遗忘因子的最小二乘法,辨识二阶差分方程的参数,比较两种方法的辨识差异;采用不少于两种定阶方法,确定对象的阶次。

对象模型如图:利用相关分析法,得到对象的脉冲相应序列。

如下图:(1).由脉冲相应序列,求解系统的脉冲传递函数G(z)Transfer function:0.006072 z^2 + 0.288 z + 0.1671-------------------------------z^2 + 0.1018 z - 0.7509Sampling time: 2(2).由脉冲相应序列求解系统的传递函数G(s)Transfer function:(0.04849+2.494e-018i)-----------------------s^2 + 0.1315 s + 0.6048(3).利用相关最小二乘法拟合系统的差分方程模型如下:(4).在t=100,加入一个0.5的阶跃扰动,,利用RLS求解差分方程模型:RLS加入遗忘因子之后与未加之前的曲线情况如下:未加遗忘因子之前参数以及残差的计算过程加入0.99的遗忘因子得到的参数辨识过程与残差的变化过程根据上面两种方法所得到的误差曲线和参数过渡过程曲线,我们可以看出来利用最小二乘法得到的参数最终趋于稳定,为利用带遗忘因子的最小二乘算法,曲线参数最终还是有小幅度震荡。

系统辨识讲义

系统辨识讲义

一个极简单的参数方法例子
我们测得0—N采样时刻的输入输出数据,即
u (0), u (1)," , u ( N − 1), u ( N ) y (0), y (1)," , y ( N − 1), y ( N )
假定系统的模型属于如下的模型类:
y ( k ) + ay ( k − 1) = bu (k − 1) + v(k )
k =1
N
∂V (θ ) N = ∑ 2ay 2 (k − 1) + 2 y (k ) y (k − 1) − 2by (k − 1)u (k − 1) ∂a k =1 ∂V (θ ) N = ∑ 2bu 2 (k − 1) − 2 y (k )u (k − 1) − 2ay (k − 1)u (k − 1) ∂b k 等:子空间辨识
1990年代,为了克服PEM针对多变量系统辨识
时需要进行非线性优化,以及IV不能同时辨识 出噪声模型的缺点。Bart De Moor, Verhaegen 等提出了针对多变量系统的subspace identification methods。该类方法不是基于优化 某个criterion,主要用到矩阵的奇异值分解, 无需非线性优化,因而计算量较小。
1.2 模型
数学模型是用来描述系统行为的数学语
言。 非线性系统的数学模型是非线性状态方 程和输出方程。线性系统的数学模型可 以有多种相互等价的形式:状态空间方 程、传递函数、阶跃响应、差分方程等。
扰 动 输入
系统
输出
1.3 建模的两大类方法
机理分析法(first principles modeling)或称为白
何求取参数估计值。least-squares, prediction error, instrumental variable 参数估计算法的统计性质:无偏性、一致性。 如何验证所得模型的有效性?如何选择模型阶数?

系统辨识大作业.

系统辨识大作业.

一、 问题描述考虑仿真对象:()0.9(1)0.15(2)0.02(3)0.7(1)0.15(2)()z k z k z k z k u k u k e k +-+-+-=---+ e() 1.0e(1)0.41e(2)(),~(0,1)k k k v k v N λ+-+-=式中,u(k)和z(k)是输入输出数据,v(k)是零均值、方差为1的不相关的随机噪声;u(k)采用与e(k)不相关的随机序列。

1. 设计实验,产生输入输出数据;2. 使用基本最小二乘法估计参数;3. 考虑其他适用于有色噪声的辨识方法估计参数;4. 模型验证。

二、 问题分析对于单输入单输出系统(Single Input Single Output, SISO ),如图 1所示,将待辨识的系统看作“灰箱”,它只考虑系统的输入输出特性,而不强调系统的内部机理。

图 1中,输入u(k)和输出z(k)是可以测量的,1()G z -是系统模型,用来描述系统的输入输出特性,y(k)是系统的实际输出。

1()N z -是噪声模型,v(k)是均值为零的不相关随机噪声,e(k)是有色噪声。

图 1 SISO 系统的“灰箱”结构对于SISO 随机系统,被辨识模型()G z 为:12121212()()()1n n nn b z b z b z y z G z u z a z a z a z ------+++==++++ 其相应的差分方程为11()()()n ni i i i y k a y k i b u k i ===--+-∑∑若考虑被辨识系统或观测信息中含有噪声,被辨识模型可改写为11()()()()n ni i i i z k a y k i b u k i v k ===--+-+∑∑式中,z(k)为系统输出量的第k 次观测值;y(k)为系统输出量的第k 次真值,y(k-1)为系统输出量的第k-1次真值,以此类推;u(k)为系统的第k 个输入值,u(k-1)为系统的第k-1个输入值;v(k)为均值为0的不相关随机噪声。

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

《系统辨识》大作业学号:********班级:自动化1班姓名:**信息与控制工程学院自动化系2015-07-11第一题模仿index2,搭建对象,由相关分析法,获得脉冲响应序列ˆ()g k,由ˆ()g k,参照讲义,获得系统的脉冲传递函数()G z和传递函数()G s;应用最小二乘辨识,获得脉冲响应序列ˆ()g k;同图显示两种方法的辨识效果图;应用相关最小二乘法,拟合对象的差分方程模型;构建时变对象,用最小二乘法和带遗忘因子的最小二乘法,(可以用辨识工具箱) 辨识模型的参数,比较两种方法的辨识效果差异;答:根据index2搭建结构框图:相关分析法:利用结构框图得到UY 和tout其中的U就是题目中要求得出的M序列,根据结构框图可知序列的周期是1512124=-=-=npN。

在command window中输入下列指令,既可以得到脉冲相应序列()g k:aa=5;NNPP=15;ts=2; RR=ones(15)+eye(15); for i=15:-1:1UU(16-i,:)=UY(16+i:30+i,1)'; endYY=[UY(31:45,2)];GG=RR*UU*YY/[aa*aa*(NNPP+1)*ts]; plot(0:2:29,GG) hold onstem(0:2:29,GG,'filled') Grid;title('脉冲序列g(τ)')最小二乘法建模的响应序列由于是二阶水箱系统,可以假设系统的传递函数为221101)(sa s a sb b s G +++=,已知)(τg ,求2110,,,a a b b已知G (s )的结构,用长除法求得G(s)的s 展开式,其系数等于从 )( g 求得的各阶矩,然后求G(s)的参数。

得到结果: a1 =-1.1561 a2 =0.4283 b0 =-0.0028 b1=0.2961在command window 中输入下列指令得到传递函数:最小二乘一次算法相关参数%最小二乘法一次完成算法 M=UY(:,1); z=UY(:,2); H=zeros(100,4); for i=1:100 H(i,1)=-z(i+1); H(i,2)=-z(i); H(i,3)=M(i+1); H(i,4)=M(i); endEstimate=inv(H'*H)*H'*(z(3:102)) %结束得到相关系数为:Estimate =-0.7866 0.1388 0.5707 0.3115带遗忘因子最小二乘法:%带遗忘因子最小二乘法程序M=UY(:,1);z=UY(:,2);P=1000*eye(5); %Theta=zeros(5,200); %Theta(:,1)=[0;0;0;0;0];K=zeros(4,400); %K=[10;10;10;10;10];lamda=0.99;%遗忘因数for i=3:201h=[-z(i-1);-z(i-2);M(i);M(i-1);M(i-2)];K=P*h*inv(h'*P*h+lamda);Theta(:,i-1)=Theta(:,i-2)+K*(z(i)-h'*Theta(:,i-2));P=(eye(5)-K*h')*P/lamda;endi=1:200;figure(1)plot(i,Theta(1,:),i,Theta(2,:),i,Theta(3,:),i,Theta(4,:),i,Theta(5,:) )title('带遗忘因子最小二乘法')grid%结束Estimate 可由仿真图得出,可知两种方法参数确定十分接近。

两种方法的辨识效果差异:采用相关分析法和最小二乘法辨识出的脉冲响应图形可看出,用最小二乘法辨识出的图形更像脉冲响应,他在最后无偏差,衰减为零,其可实现无偏差估计。

而相关分析法图形虽与相关分析的相近,但它最后有偏差。

带遗忘因子的递推最小二乘辨识的参数平均值可随着实际参数变化而突变。

但他对噪声比较敏感,只是参数围绕参数实际值上下波动,而辨识出参数的平均值接近实际值,而且比其他方法更加接近,并且可以防止数据饱和。

第二题设SISO系统差分方程为(40分)y(k) =)()2()1()2()1(2121kkubkubkyakyaξ+-+-+----辨识参数向量为θ=1[a2a1b2b ]T,输入输出数据详见数据文件uy01.txt—uy03.txt。

)(kξ为噪声方差各异的白噪声或有色噪声。

试求解:1)用最小二乘及递推最小二乘法估计θ;2)用辅助变量法及其递推算法估计θ;3)用广义最小二乘法及其递推算法估计θ;4)用夏氏偏差修正法、夏氏改良法及其递推算法估计θ;5)用增广矩阵法估计θ;6) 用极大似然法估计θ;7)分析噪声)(kξ特性;答:1.基本最小二乘法:%首先将TXT中的数据装载在Matlab中:clear;clc;Wbs = 0;while Wbs<1disp('从下列文件中选择所需加载文件:uy1.txt uy2.txt uy3.txt') filename = input('输入所需打开文件名:\','s');[Wbs,Message] = fopen(filename,'r');%打开文件;endData = fscanf(Wbs,'%g %g',[2 inf]);%生成数据矩阵Data = Data';%最小二乘法,取b0=0n = 2;%根据题目,本系统为2阶系统L = length(Data);%辨识所需数据的总长度N = L-n;%构造测量矩阵的数据长度FIA = zeros(N,2*n);%构造测量矩阵for i = 1:N %测量矩阵赋值for l = 1:n*2if(l>n)FIA(i,l) = Data(n+2+i-l,1);elseFIA(i,l) = -Data(n+i-l,2);endendendY = Data(n+1:n+N,2);%输出数据矩阵thita = inv(FIA'*FIA)*FIA'*Y;%计算参数矩阵disp('使用最小二乘算法所得结果如下:')%辨识参数数据输出如下:lsa1 = thita(1),lsa2 = thita(2),lsb1 = thita(3),lsb2 = thita(4)实验结果:Uy1.txt uy2.txt uy3.txt2.递推最小二乘法:%首先将TXT中的数据装载在Matlab中:clear;clc;Wbs = 0;while Wbs<1disp('从下列文件中选择所需加载文件:uy1.txt uy2.txt uy3.txt') filename = input('输入所需打开文件名:\','s');[Wbs,Message] = fopen(filename,'r');%打开文件;endData = fscanf(Wbs,'%g %g',[2 inf]);%生成数据矩阵Data = Data';%递推最小二乘法n = 2;%根据题目已知该系统阶数为2L = length(Data);%为辨识参数向量赋初值,这里均取为0.001for a = 1:1:n*2thita0(a,1) = 0.001;end%直接给出矩阵Pn的初始状态P0P0 = 10^9*eye(n*2,n*2);thita = [thita0,zeros(n*2,L)];%需辨识参数矩阵的初值及大小for i = n+1:1:L %这里i从第n+1个数开始for m = 1:n*2 %输入矩阵赋值if(m<=n)FIA1(m,1) = -Data(i-m,2);elseFIA1(m,1) = Data(i-m+2,1);endendX = FIA1'*P0*FIA1+1;%引入中间变量X为K递推公式中的求逆项,1维K1 = P0*FIA1/X;D1 = Data(i,2)-FIA1'*thita0;P1 = P0-K1*K1'*X;%求出P(K)矩阵P0 = P1;%作为下次迭代初值thita1 = thita0+K1*D1;%估值补偿公式,thita1为求被辨识的参数向量thita0 = thita1;%所得的参数向量作为下次迭代初值enddisp('递推最小二乘法所得结果如下:')Dta1=thita1(1),Dta2=thita1(2),Dtb1=thita1(3),Dtb2=thita1(4) %显示被辨识参数实验结果:Uy1.txt uy2.txt uy3.txt3.辅助变量法:%首先将TXT中的数据装载在Matlab中:clear;clc;Wbs = 0;while Wbs<1disp('从下列文件中选择所需加载文件:uy1.txt uy2.txt uy3.txt')filename = input('输入所需打开文件名:\','s');[Wbs,Message] = fopen(filename,'r');%打开文件;endData = fscanf(Wbs,'%g %g',[2 inf]);%生成数据矩阵Data = Data';%使用递推辅助变量法对2阶系统进行辨识,取b0=0n = 2;L = length(Data);N = L-n;%分别取出输入、输出数据u,yU = Data(1:L,1);Y = Data(1:L,2);%首先使用最小二乘法,粗略得到初始的被辨识参数向量fzOL = [-Y(2:L-1),-Y(1:L-2),U(2:L-1),U(1:L-2)];Y1 = Data(3:L,2);%构造输出向量,也用于辅助变量法的输出向量thita = inv(fzOL'*fzOL)*fzOL'*Y1;%得到初始参数向量%获得初值,以下使用辅助变量法for i=1:400Yf = fzOL*thita;%辅助模型输出%构造辅助变量矩阵,改变新的矩阵中的输出量,输入量不变Zfz = fzOL;Zfz(2:N,1) = -Yf(1:(N-1),1);Zfz(3:N,2) = -Yf(1:(N-2),1);thita = inv(Zfz'*fzOL)*Zfz'*Y1;%求取被估计参数的辅助变量估值enddisp('使用辅助变量法,得到如下辨识结果:')Fza1=thita(1),Fza2=thita(2),Fzb1=thita(3),Fzb2=thita(4)实验结果:Uy1.txt uy2.txt uy3.txt4.递推辅助变量法:%首先将TXT中的数据装载在Matlab中:clear;clc;Wbs = 0;while Wbs<1disp('从下列文件中选择所需加载文件:uy1.txt uy2.txt uy3.txt') filename = input('输入所需打开文件名:\','s');[Wbs,Message] = fopen(filename,'r');%打开文件;endData = fscanf(Wbs,'%g %g',[2 inf]);%生成数据矩阵Data = Data';%使用递推辅助变量法对2阶系统进行辨识,取b0=0n = 2;L = length(Data);%分别取出输入、输出数据u,yU = Data(1:L,1);Y = Data(1:L,2);N = 498;n0 = 100;% 取前100个数据利用最小二乘辨识FIA = [-Y(2:n0-1),-Y(1:n0-2),U(2:n0-1),U(1:n0-2)];Y1 = Data(3:n0,2);%构造输出向量,也用于辅助变量法的输出向量thita = inv(FIA'*FIA)*FIA'*Y1;%得到初始参数向量Z = [-Y(2:n0-1) -Y(1:n0-2) U(2:n0-1) U(1:n0-2)];thita = inv(Z'*FIA)*Z'*Y1;P0 = inv(Z'*FIA);%后面的数据计算,使用递推辅助变量法for n = n0+1:NY11 = [Y(1); Y(2); Z*thita];Zn = [-Y11(n-1) -Y11(n-2) U(n-1) U(n-2)];Z = [Z; Zn];kesy = [-Y(n-1); -Y(n-2); U(n-1); U(n-2)];K = P0*Zn'/(1+kesy'*P0*Zn');P1 = P0 - K*kesy'*P0;P0 = P1;thita = thita + K*(Y(n) - kesy'*thita);enddisp('递推辅助变量法辨识结果:');Dfa1=thita(1),Dfa2=thita(2),Dfb1=thita(3),Dfb2=thita(4)实验结果:Uy1.txt uy2.txt uy3.txt5.广义最小二乘法:%首先将TXT中的数据装载在Matlab中:clear;clc;Wbs = 0;while Wbs<1disp('从下列文件中选择所需加载文件:uy1.txt uy2.txt uy3.txt')filename = input('输入所需打开文件名:\','s');[Wbs,Message] = fopen(filename,'r');%打开文件;endData = fscanf(Wbs,'%g %g',[2 inf]);%生成数据矩阵Data = Data';%使用广义最小二乘法,辨识2阶系统的参数n = 2;L = length(Data);N = L-n;for m=1:1:300%分别取出输入、输出数据u,yU = Data(1:L,1); Y = Data(1:L,2);%首先使用最小二乘法,求系统参数向量初值gyOL = [-Y(2:L-1),-Y(1:L-2),U(2:L-1),U(1:L-2)];%LS测量矩阵Zgy1 = Data(3:L,2);%输出矩阵ythita = inv(gyOL'*gyOL)*gyOL'*Zgy1;%参数向量初值Gya1=thita(1);Gya2=thita(2);Gyb1=thita(3);Gyb2=thita(4);%得到初值后,以下使用广义最小二乘法进行辨识,由残差代替噪声误差E(1) = Y(1);%k=1时,残差的值E(2) = Y(2)+Gya1*Y(1)-Gyb1*U(1);%k=2时,残差的值for i = 3:N+n %残差公式如下:E(i)= Y(i)+Gya1*Y(i-1)+Gya2*Y(i-2)-Gyb1*U(i-1)-Gyb2*U(i-2);endE1 = E(n+1:n+N)';omiga(1:N,1) = -E(n:n+N-1)';omiga(1:N,2) = -E(n-1:n+N-2)';%fl表示由残差代替噪声项,而辨识得到的滤波器的估计参数fl=inv(omiga'*omiga)*omiga'*E1;%得到fl后,计算经过滤波的u,y数据;其中,k=1,2时:Data(1,1)=U(1);Data(1,2)=Y(1);Data(2,2)=Y(2)+fl(1)*Y(1);Data(2,1)=U(2)+fl(1)*U(1);%k>=3时:for k=3:N+nData(k,1) = U(k)+fl(1)*U(k-1)+fl(2)*U(k-2);Data(k,2) = Y(k)+fl(1)*Y(k-1)+fl(2)*Y(k-2);endenddisp('由广义最小二乘法得到的辨识结果如下:')Gya1=thita(1),Gya2=thita(2),Gyb1=thita(3),Gyb2=thita(4)实验结果:Uy1.txt uy2.txt uy3.txt6.递推广义最小二乘法:%首先将TXT中的数据装载在Matlab中:clear;clc;Wbs = 0;while Wbs<1disp('从下列文件中选择所需加载文件:uy1.txt uy2.txt uy3.txt') filename = input('输入所需打开文件名:\','s');[Wbs,Message] = fopen(filename,'r');%打开文件;endData = fscanf(Wbs,'%g %g',[2 inf]);%生成数据矩阵Data = Data';u1=Data(:,1);y1=Data(:,2);n=2;N=500-n;n0=50;%用前50组数据利用lsm估计出初值%构造矩阵phiphi(:,1)=-y1(n:n+n0-1);phi(:,2)=-y1(n-1:n+n0-2);phi(:,3)=u1(n:n+n0-1);phi(:,4)=u1(n-1:n+n0-2);y(:,1)=y1(n+1:n+n0);seta=(inv(phi'*phi))*phi'*y;seta0=seta;f0=[0 0]';p10=inv(phi'*phi);p20=10^6*eye(2,2);y(1:i,1)=y1(n+1:n+i);u(1:i,1)=u1(n+1:n+i);%计算残差e=y-phi*seta0;%f 估计omega=[-e(n+i-2) -e(i+1-1)]';K2=p20*omega*inv(1+omega'*p20*omega);f1=f0+K2*(e(n+i-2)-omega'*f0);p2=p20-K2*omega'*p20;p20=p2;f0=f1;%滤波yy(1:i,1)=y1(n:n+i-1);yy(1:i,2)=y1(n-1:n+i-2);uu(1:i,1)=u1(n:(n+i-1));uu(1:i,2)=u1((n-1):(n+i-2));yg=y+yy*f1; %yg(k)=y(k)+f(1)*y(k-1)+f(2)*y(k-2)ug=u+uu*f1; %ug(k)=u(k)+f(1)*u(k-1)+f(2)*u(k-2)% seta 估计ksai=[-yg(n+i-2) -yg(n+i-3) ug(n+i-2) ug(n+i-3)]';K1=p10*ksai*inv(1+ksai'*p10*ksai);% K(N+1)值p1=p10-K1*ksai'*p10; % P(N+1)值p10=p1;seta1=seta0+K1*(y1(n+i+1)-ksai'*seta0); % seta(N+1)值seta0=seta1;% 构造新phi 阵phi(1:i+1,1)=-y1(n:n+i-1+1);phi(1:i+1,2)=-y1(n-1:n+i-2+1);phi(1:i+1,3)=u1(n:n+i-1+1);phi(1:i+1,4)=u1(n-1:n+i-2+1);enddisp('递推广义最小二乘法辨识结果:');a1=seta0(1),a2=seta0(2),b1=seta0(3),b2=seta0(4)实验结果:Uy1.txt uy2.txt uy3.txt7.夏氏偏差修正法:%首先将TXT中的数据装载在Matlab中:clear;clc;Wbs = 0;while Wbs<1disp('从下列文件中选择所需加载文件:uy1.txt uy2.txt uy3.txt') filename = input('输入所需打开文件名:\','s');[Wbs,Message] = fopen(filename,'r');%打开文件;endData = fscanf(Wbs,'%g %g',[2 inf]);%生成数据矩阵Data = Data';%使用夏氏修正法,对2阶系统进行参数辨识n = 2;L = length(Data);N = L-n;U = Data(:,1);Y = Data(:,2);%首先使用最小二乘法,求系统参数向量初值glOL =[-Y(2:L-1),-Y(1:L-2),U(2:L-1),U(1:L-2)];Zgl1 = Data(3:L,2);Sgl1 = glOL'*glOL;Sgl2=inv(Sgl1);Sgl3=glOL'*Zgl1;Xsthita = Sgl2*Sgl3;%计算参数矩阵%得到初值后,以下使用夏氏修正法进行参数辨识:thitab0 = 0;%设偏差项的偏差初值为0Fa = Sgl2*glOL';M = eye(N)-glOL*Sgl2*glOL';F = eye(N);if(F>=10^-6*eye(N))E1 = Zgl1-glOL*Xsthita;%计算残差Eomiga(2:N,1) = -E1(1:N-1);omiga(3:N,2) = -E1(1:N-2);D = omiga'*M*omiga;Fx = inv(D)*omiga'*M*Zgl1;thitab = Fa*omiga*Fx;Xsthita = Xsthita - thitab;F = thitab - thitab0;thitab0 = thitab;enddisp('夏氏修正法')Xsa1 = Xsthita(1),Xsa2 = Xsthita(2),Xsb1 = Xsthita(3),Xsb2 = Xsthita(4)实验结果:Uy1.txt uy2.txt uy3.txt%首先将TXT中的数据装载在Matlab中:clear;clc;Wbs = 0;while Wbs<1disp('从下列文件中选择所需加载文件:uy1.txt uy2.txt uy3.txt') filename = input('输入所需打开文件名:\','s');[Wbs,Message] = fopen(filename,'r');%打开文件;endData = fscanf(Wbs,'%g %g',[2 inf]);%生成数据矩阵Data = Data';%最小二乘法,取b0=0n = 2;%根据题目,本系统为2阶系统L = length(Data);%辨识所需数据的总长度N = L-n;%构造测量矩阵的数据长度FIA = zeros(N,2*n);%构造测量矩阵for i = 1:N %测量矩阵赋值for l = 1:n*2if(l>n)FIA(i,l) = Data(n+2+i-l,1);elseFIA(i,l) = -Data(n+i-l,2);endendendY = Data(n+1:n+N,2);%输出数据矩阵thita = inv(FIA'*FIA)*FIA'*Y;%计算参数矩阵thitaLS = thita;%最小二乘估值m = inv(FIA'*FIA)*FIA';for i = 1:1:1000%构造OmegaErr = Y-FIA*thitaLS;%计算残差Eomiga(2:N,1) = -Err(1:N-1);omiga(3:N,2) = -Err(1:N-2);F = inv(omiga'*omiga)*omiga'*Err;thita = thitaLS-m*omiga*F;enddisp('使用夏氏改良法辨识结果为:')Xga1 = thita(1),Xga2 = thita(2),Xgb1 = thita(3),Xgb2 = thita(4)实验结果:Uy1.txt uy2.txt uy3.txt%首先将TXT中的数据装载在Matlab中:clear;clc;Wbs = 0;while Wbs<1disp('从下列文件中选择所需加载文件:uy1.txt uy2.txt uy3.txt')filename = input('输入所需打开文件名:\','s');[Wbs,Message] = fopen(filename,'r');%打开文件;endData = fscanf(Wbs,'%g %g',[2 inf]);%生成数据矩阵Data = Data';%这里选用450组数据进行递推迭代n = 2;N = 450-n;U = Data(:,1);Y = Data(:,2);%初始赋值如下:beta = [0 0 0 0 0 0]';P0= 10^10*eye(6,6);E1 = 0;E2 = 0;%循环迭代for i = 3:NE1 = Y(n+i)-beta(1)*Y(n+i-1)-beta(2)*Y(n+i-2)-beta(3)*Y(n+i-1)-beta(4)*U(n+i-2);E2 = Y(n+i-1)-beta(1)*Y(n+i-2)-beta(2)*Y(n+i-3)-beta(3)*U(n+i-2)-beta(4)*U(n+i-3); FIA = [-Y(n+i) -Y(n+i-1) U(n+i) U(n+i-1) -E1 -E2]';K = P0*FIA*inv(1+FIA'*P0*FIA);P1 = P0-K*FIA'*P0;P0 = P1;beta1 = beta+K*(Y(n+i+1)-FIA'*beta);beta = beta1;enddisp('取450组数据进行递推夏氏辨识的结果为:');Dxa1=beta(1),Dxa2=beta(2),Dxb1=beta(3),Dxb2=beta(4)实验结果:Uy1.txt uy2.txt uy3.txt10.增广矩阵法:%首先将TXT中的数据装载在Matlab中:clear;clc;Wbs = 0;while Wbs<1disp('从下列文件中选择所需加载文件:uy1.txt uy2.txt uy3.txt') filename = input('输入所需打开文件名:\','s');[Wbs,Message] = fopen(filename,'r');%打开文件;endData = fscanf(Wbs,'%g %g',[2 inf]);%生成数据矩阵Data = Data';%使用增广矩阵法进行2阶系统的参数辨识n = 2;L = length(Data);U = Data(1:L,1);Y = Data(1:L,2);for i = 1:3*n %首先给辨识参数向量赋初值,这里取thita0为0thita0(i,1) = 0;endP0 = 10^10*eye(3*n,3*n);%然后设定初始状态P0为充分大的对角阵ERR0 = 0.00000000001;%收敛情况指标,相对误差ERR0thita = [thita0,zeros(3*n,L)];%设定参数向量的初值及大小zs = zeros(L,1);%构造初始噪声矩阵hn = [0,0,0,0,0,0]';for j = n+1:1:Lzs(j-1) = Y(j-1)-hn'*thita0;hn = [-Y(j-1),-Y(j-2),U(j-1),U(j-2),zs(j-1),zs(j-2)]';K = P0*hn*inv(hn'*P0*hn+1);%计算修正矩阵Kthita0 = thita0+K*[Y(j)-hn'*thita0];P0 = P0-K*hn'*P0;%计算状态矩阵P(N)thita(:,j) = thita0;E = abs((thita(:,j-1)-thita0)./thita0);if E<=ERR0 break;%根据设定的误差限,判断何时跳出endendZgma1=thita0(1),Zgma2=thita0(2),Zgmb1=thita0(3),Zgmb2=thita0(4), Zgmc1=thita0(5),Zgmc2=thita0(6)Uy1.txt uy2.txt uy3.txt11.极大似然法:%首先将TXT中的数据装载在Matlab中:clear;clc;Wbs = 0;while Wbs<1disp('从下列文件中选择所需加载文件:uy1.txt uy2.txt uy3.txt')filename = input('输入所需打开文件名:\','s');[Wbs,Message] = fopen(filename,'r');%打开文件;endData = fscanf(Wbs,'%g %g',[2 inf]);%生成数据矩阵Data = Data';n = 2;L = length(Data);N = L-n;U = Data(:,1);Y = Data(:,2);mthita = zeros(3*n,1);%给被辨识参数矩阵赋初始值%用最小二乘法求初始的被辨识参数矩阵OL = [-Y(2:L-1),-Y(1:L-2),U(2:L-1),U(1:L-2)];Z1 = Data(3:L,2);thita = inv(OL'*OL)*OL'*Z1;mthita(1:2*n,1) = thita;%得到出之后,使用牛顿—拉布森极大似然法编程E = zeros(L,1);J = 0;sgma0 = 1;Ea1 = zeros(L,1);Ea2 = zeros(L,1);Eb1 = zeros(L,1);Eb2 = zeros(L,1);Ec1 = zeros(L,1);Ec2 = zeros(L,1);%给J的梯度和Hassian矩阵赋初始值Ethita = zeros(3*n,1);fd = zeros(3*n,1);Hassian = zeros(3*n,3*n);for p = 1:500Ja1 = mthita(1);Ja2 = mthita(2);Jb1 = mthita(3);Jb2 = mthita(4);Jc1 = mthita(5);Jc2 = mthita(6);for i = n+1:Ly2(i) = -Ja1*Y(i-1)-Ja2*Y(i-2)+Jb1*U(i-1)+Jb2*U(i-2)+Jc1*E(i-1)+Jc2*E(i-2);E(i) = Y(i)-y2(i);J = 0.5*(E(i)^2);sgma = (1/N)*(E(i)^2);endfor j = n+1:1:LEa1(j) = Y(j-1)-[Jc1,Jc2]*[Ea1(j-1),Ea1(j-2)]'; Ea2(j) = Y(j-2)-[Jc1,Jc2]*[Ea2(j-1),Ea2(j-2)]';Eb1(j) = -U(j-1)-[Jc1,Jc2]*[Eb1(j-1),Eb1(j-2)]';Eb2(j) = -U(j-2)-[Jc1,Jc2]*[Eb2(j-1),Eb2(j-2)]';Ec1(j) = -E(j-1)-[Jc1,Jc2]*[Ec1(j-1),Ec1(j-2)]';Ec2(j) = -E(j-2)-[Jc1,Jc2]*[Ec2(j-1),Ec2(j-2)]';Ethita = [Ea1(j),Ea2(j),Eb1(j),Eb2(j),Ec1(j),Ec2(j)];fd = fd+E(j)*Ethita';%迭代计算J的梯度矩阵Hassian = Hassian + Ethita'*Ethita;%迭代计算Hassian矩阵end%用牛顿-拉卜森法计算被辨识的参数的估值mthita = mthita - inv(Hassian)*fd;JFIA = (sgma-sgma0)/sgma0;sgma0 = sgma;%跳出迭代的判断if JFIA<0.000000001 breakendenddisp('极大似然法(牛顿-拉卜森方法),得到的结果为:')Ja1 = mthita(1),Ja2 = mthita(2),Jb1 = mthita(3),Jb2 = mthita(4),Jc1 = mthita(5),Jc2 = mthita(6)实验结果:Uy1.txt uy2.txt uy3.txt12.分析噪声)(k 特性:RLS 法:当噪声比较小时,辨识精度较高;当噪声比较大时,收敛点可能不唯一,参数估计值往往是有偏的;但是运用此方法时,数据要充分多,否则辨识精度明显下降;另外噪声模型阶次不宜过高,也会影响精度,所以误差的原因主要是数据量的大小以及噪声模型阶次。

相关文档
最新文档