系统辨识的Matlab实现方法.docx
- 文档编号:12718948
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:21
- 大小:274.28KB
系统辨识的Matlab实现方法.docx
《系统辨识的Matlab实现方法.docx》由会员分享,可在线阅读,更多相关《系统辨识的Matlab实现方法.docx(21页珍藏版)》请在冰豆网上搜索。
系统辨识的Matlab实现方法
最近在做一个项目的方案设计,应各位老总的要求,只有系统框图和器件选型可不行,为了凸显方案设计的高大上,必须上理论分析,炫一下“技术富”,至于具体有多大实际指导意义,那就不得而知了!
本人也是网上一顿XX,再加几日探索,现在对用matlab实现系统
辨识有了一些初步的浅薄的经验,在此略做一小节。
必须要指出的是,本文研究对象是经典控制论理最简单最常用的线性时不变的siso系统,而且是2阶的哦,也就是具有如下形式的传递函数:
G(s)
1
T2s22Ts1
本文要做的就是,对于有这样传递函数的一个系统,要辨识得到其中的未知数T,E!
!
这可是控制系统设计分析的基础哦,没有系统模型,啥理论、算法都是白扯,在实际工程中非常重要哦!
经过总结研究,在得到系统阶跃响应实验数据之后(当然如果是其他响应,也有办法可以辨识,在此还是只讨论最简单的阶跃响应实验曲线,谁让你我是菜鸟呢),利用matlab至少可以有两种方法实现实现(目前我只会两种,呵呵)!
一、函数法
二、GUI系统辨识工具箱
F面分别作详细介绍!
函数法
看官别着急,先来做一段分析(请看下面两排红*之间部分),这
段分析是网上找来的,看看活跃一下脑细胞吧,如果不研读一下,对于下面matlab程序,恐怕真的就是一头雾水咯!
*******************************************************************************
G(s)可以分解为:
G(s)
T2(sJ(s2)
其中,「、「都是实数且均大于零。
则有:
传递函数进一步化为:
G(s)Ks2)
因此,辨识传递函数就转化为求解
口口
当输入为单位阶跃函数时,对上式进行拉普拉斯反变换,得系统时域
下的单位阶跃响应为:
y(t)12e
21
1t
2t
即
令
k
1
k2t
2t
1y(t)
2t1
(k1)2t
对上式两边取以e为底的对数得
y⑴吩Xln1^^)21
1
当It时,In1-e(k1)2t—0,则上式化简为
k
k
ln1y(t)"厂2t
该式的形式满足直线方程
其中,
|2的值,进而可得系统的传递函数。
y(t)atb
***************************************************
Matlab程序代码:
clc
closeall
t=[135791113151719];
y=[0.1490860.58900670.8306170.9339900.9739800.9910950.995868
0.9986800.9994900.999850];
y2=log(1-y);
plot(t,y2,'*');
gridon
pm=polyfit(t,y2,1)
value=polyval(pm,t);
holdon
plot(t,value,'r')
title('\fontname{黑体}\fontsize{20}y(t)=at+b')
w2=-pm
(1)
w1=w2/(1-exp(-pm
(2)))
T=1/sqrt(w1*w2)
theta=(w1+w2)/(2*sqrt(w1*w2))
z=[];
p=[-w1-w2];
k=w1*w2;
sys=zpk(z,p,k)
figure
(2)
step(sys,[0:
0.5:
20]);
axis([02001.2])
holdon
plot(t,y,'r*')
打开matlab,新建一个Function,把上述程序段拷进去,保存,运行
运行结果:
y(t)=at+b
系统的传递函数为
G(S)
0.54034
(S1.126)(S0.4797)
很顺利吧?
先高兴一个!
问题接着马上就来了,上面这个例子,这个传递函数的极点刚好都是负实数,因此辨识得很顺利,但是如果系统是欠阻尼系统,也就是如果传递函数的根是复数,那么上述函数段,就无能为力咯,会出现说“matlab无法处理增益为复数情况之
类•
例如
GS)
2
(S—厂j)(s—厂j)
对于这个系统,若果用simulink做一下阶跃响应,再把实验数据代入上述函数段,那就不行咯!
怎么办呢,只能另辟蹊径了!
二、(SystemIdentificationTool)系统辨识工具箱
早听说matlab博大精深,神通广大了,于是乎我确定肯定有更简单、直观、强大的工具来完成这小儿科把戏。
查资料琢磨之后,我做了个小实验,在simulink里验证了该种方法。
该方法的大原则是:
在确定了系统的输入输出数据(两个列向量NX1形式,如果是1XN,会提示出错!
)之后,设计好一定的辨识原则(比如说是2阶?
3阶?
,传递函数是零极点形式,还是带阻尼形式,等等),然后就交给强大的matlab,得到辨识结果。
Stepbystep,plz!
Step1、建立模型获取系统输入输出数据
图1
图1系统的输入是阶跃信号,用Scope1监视,并输出到workspace
(这步不会的自己XX哦),采样周期是0.1s,得到输入变量u(101X1的矩阵);本人在系统的阶跃响应上叠加了一白噪声,当然也可以不加噪声,加了噪声就是期望更真实的模拟实际情况,白噪声参数
设置见图2
图2
同样在Scope2监视,也将结果输出到workspace,得到响应数据y(同样也是101X1的矩阵)
Step2、进入辨识工具箱&设置辨识规则
直接在commandvindow输入ident,回车,进入辨识工具箱图3
图3
点击import下拉菜单,选时域数据timedomaindata,见图4
nSy?
ternJentificattcnTool-Untrtled
FileOptionsWindowHelp
ditia
Imwrtfta怡
Timedcmarilata..
TrS^ociniaiiOaT^^
Datyotwct,..
Example.it
DataViews
Trneplot
OataspecvA
Frequ-encj'function
Operatiors
Importmadcils
Compil耐...
在下图5红色圈区域输入之前得到的系统输入和输出数据,u和y
Import0去|[专
LhatQFormatforSigniflleL
Iim-oDomamnShgnaHu
input
Output:
rprtlrthiToiniriliriM
Datanam'ie
SaiLbirUngtime
mpllmsimi*rysi
IrRpari:
LJos.e
在下图6绿色圈内输入数据的一些信息,因为之前模型中,阶跃起点我是放在Os处的,这里也设置0,如果前面模型仿真是1s,这里应该也是1s;采样时间是0.1s,根据实际情况设置统一哦
图6
设置完之后,点击import此时界面变成图7
图7
如果在下图8勾选红框这个选项,就会出现我们刚才设定输入输出数
据的曲线,如图9所示,其他勾选项是频域的分析和显示,暂不用它。
图8
图9
看看与我们实际设置的输入输出是否符合,如果符合,那么我们离成功就不远咯,如果发现异常,那再好好检查一遍,直到确保数据导入没有问题!
下面两段红色斜杠之间的内容,对于本实验,可以直接跳过,看一下对后续复杂模型的处理有好处哦,也算全面熟悉一下工具。
///////////////////////////////////////////////////////////
到这接着选preprocess也就是对数据进行预处理了,下拉菜单中
有很多种处理方法和手段,有这个心思的人可以挨个试一下功能。
图
SystenIdentificMion~ool-Untitled
Selectch^nne^..
Removetrends
Fiftr
7]Timeplat
<-Preproce&s
Selectoxperimente
M*rgeexperirrents...
selectrange...
Removemeans
jPrepiocesa
Gperations
Impcrtmotels
ModelVie'^s
Modeloutpuli
Transientreap
Resampe...
Transfomidak...
^□n'linearARK
Qjidcshrt
=Fr&pLiencyr&ap匚|呻白恫frwA/诞n戡
一Frequencyfunctiori
Trist
n^gta
ValidatoriDa"a
Zercsandpoln
Noisespectrum
图10
预处理的对象是workingdata中的数据,每进行一种预处理在左边就会有新的数据生成,这时只要将新的数据移动到workingdata
的那个方框,就可以将workingdata换成你所想处理的数据了,可以这样多次进行处理,得到你最终想用来辨识的数据和用于验证的数据(不需要的数据可以拖到那个trash里面删除,就是回收站了,也可以从回收站中找回的)
接下来就是辨识了,首先把辨识用的数据拖到workingdata那个
方框,再把验证的数据拖到validationdata那个方框,这个
validationdata就是最原始数据稍作处理得到的一个更接近理论模型的对象数据,在这实验里,本人用的就是默认数据,也就是不做任
何preprocess处理。
///////////////////////////////////////////////////////////
点下拉菜单estimate,选你想要的模型,在弹出的对话框中设定参
数,图11
EjSystemIdentificationTocl-Jntitled
FileOpticrisWindowHdp
Imporlda.:
s
v—Pr^prgc孕*$▼
t
7^
firvtJflra
WorlqniflSats
Oparstcns
E&zimate->
7]Timeplot
I|Dataspectra
|Frfrqnpfiryfunrtirn
rJoilinear
Emirate->
LinearDarametricmooels..
Spectralrrodete...
Ccrrelationmodels..
Quick^tari
Inporimodels
Transientres>p
FionlinearARX
叮曰DUtpLTt
h-odelre^ids
JFreqjen^r&sp_JKamn-Wiener
YMata
i:
ionDsli
Noisespectrum
图11
这里边的模型种类比较多,有线性的、非线性的、状态空间的、
经典传递函数形式的等等,我们所选的就是图中红色方框process
models,单击。
弹出如下界面图12!
图12
在本实验中,我们做如下设置,见图13红框标出部分
图13
然后点击最下方Estimate,就有模型生成了。
图14
图14
先勾选上图绿色框选项,看到了什么?
给出了拟合率,bestfits
98.72有木有?
?
传递函数具体的数值,双击上图红色框,见图15?
图15
在右边的数据栏中;也就是modelviews中了,下面有很多可以选择,每选一个就可以生成一幅对应的图,是由用于验证的数据生成的。
把模型拖到toworkspace那个方框,再去看workspace,多的那个变量就是你所辨识出的模型了
注意:
在某个模型或某组数据上点一下,线变细了就不会在图中显示
出来了!
!
!
!
!
!
!
!
最后再一次提出,上述分析并不一定完全正确,可能有些概念并
不清晰可靠,当然还有很多功能并没有被发掘,可以确定的是解决这个问题的两个大方向没有问题,若想做到精益求精,还需要再仔细研究斟酌哦!
(注:
专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。
可复制、编制,期待你的好评与关注)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 系统 辨识 Matlab 实现 方法