MATLAB系统辨识工具箱简介(NJUST)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
源程序如下: clear all;close all; N=1000; A=[1,-1.5, 0.7]; B=[0,1,0.5]; C=[1,0.5];D=[1,0.5]; Model=idpoly(A,B); figure(1);Step(Model, [0,100]); grid;
Model_Wnoise=idpoly(A, B ,1); U=iddata([],idinput(N,'prbs')); E=iddata([],idinput(N,'rgs')); Y=sim(Model_Wnoise, [U,E]); Model_Noise1=idpoly(A,B,C); Y1=sim(Model_Noise1, [U,E]); Model_Noise2=idpoly(A,B,1,D); Y2=sim(Model_Noise2, [U,E]);
NN=[2,1,2,2,1]; Model_BJ=BJ(data,NN); NN=[2,2,1]; Model_oe=oe(data,NN); NN=[2,2,1]; Model_roe=roe(data,NN,'ff',0.98); NN=[2,1,1,1,1,1]; Model_pem=pem(data,NN); NN=[2,1,1,1,1,1]; Model_rpem=rpem(data,NN,'ff',0.98);
MATLAB 是一个高性能的数值计算、可视化演示和验证编程环境。提供了近 20 类基本 命令函数,它们有一部分是 MATLAB 的内部命令函数,有一部分是以 M 文件形式出现的函 数,这些 M 文件按类归于一子目录下。用户很容易获得在线帮助,因为每个文件中都包含 了这个函数的用法指南。
3.编写应用函数
%说明函数的功能和用法 %输入和输出参数的定义和用法 %函数体
︰
Outm=… Myfun 函数中,in1, …, inn 为输入参数,out1, …, outm 为输出参数,函数说明语句之后紧接的 注释语句,则提供了该函数的帮助信息。即这些内容为输入
help MyFun 命令所显示的信息。
这些自编的应用函数,以 M 文件的形式归于一个子目录下,由 Set Path 命令将这个子 目录置于 Matlab 的工作目录,之后就可以同 MATLAB 工具箱的任何函数一样进行使用了。
data=iddata(Y1,U); NN=struc(1:2,1:2,1:2); Loss_Fun=arxstruc(data,data,NN); order=selstruc(Loss_Fun,'aic'); order=[order(1),order(2),1,order(3)]; Model_Noise1=armax(data,order);
MATLAB 包括非常丰富的工具箱,为各个领域的研究和工程应用提供了有力的工具。
借助于这些工具,各个层次的研究人员可直观、方便地进行分析、计算和设计工作,从而大
大地节约了时间。同时,用户也可以根据自己的需要,编写实用的函数,方便自己和他人调
用这些函数。编写通用函数的工作量远大于编写专用的程序。
MATLAB 的通用函数一般由说明语句、注释体和函数体等部分组成。MATLAB 的通用
1
covf cra etfe spa
ar ivar arx iv4 ivx armax oe bj n4sid pem
rarx rarmax rbj roe rpem rplr segment
idinput sim predict compare pe resid aic fpe
arxstruc
2
估计模型的不确定性的函数 仿真几种可能的模型的输出响应,以说明不确定性 模型频率函数和标准偏差 零点、极点、静态增益及其标准偏差 含有估计参数的方差信息
其他与系统辨识有关的函数 绘制输入输出的 iddata 对象 绘制频率响应曲线 绘制 Bode 图 绘制 Nyquist 曲线 绘制零点和极点图 显示模型的信息 估计、计算和显示脉冲响应 绘制模型的特征 消除数据中的趋势项 用一般的滤波器或 ButterWorth 滤波器对输入输出数据进行滤波 对输入输出数据重新采样
(3)
e(k
)
=
1
+
1 0.5 z −1
ε
(k
)
在这 3 种情况下,试采用伪随机信号作为输入,应用相关分析法辨识系统的脉冲响应函数;
并辨识出系统的模型参数。
实验步骤如下: 首先,通过系统的模型获取仿真试验数据,然后利用相关分析法来辨识系统的脉冲响 应函数,再对所获得的非参数模型进行检验,同时,分别对各种噪声模型的试验结果进行对 比分析。对于参数模型的辨识,通过选取各种不同的参数模型,进行系统的结构辨识,在此 基础上应用各种参数估计算法来估计模型的参数,并对所估计的模型进行检验。
模型验证与仿真函数 生成信号,通常用作辨识的输入Leabharlann Baidu号 线性模型仿真 根据历史数据预测 k 步后辨识模型的输出数据 比较模型输出与实际输出 计算模型预测误差 计算模型预测误差并进行相关分析 计算已辨识模型的 AIC 信息准则 计算已辨识模型的 FPE 准则
模型结构选择的函数 计算 ARX 模型类的损失函数
(3) Box-Jenkins 模型
y(k)
=
B( z −1 ) F (z−1) u(k
− nk ) +
C ( z −1 ) D(z−1 )
ξ
(k
)
(4) 通用线性模型
A(z−1) y(k)
=
B(z−1 ) F (z−1)
u(k
−
nk
)
+
C(z−1 ) D( z −1 )
ξ (k)
3
2.获取在线帮助
非参数模型的辨识函数 估计时间序列的协方差函数 采用相关分析方法估计对象脉冲响应和方差函数 直接基于快速 Fourier 变换估计对象的频率响应 利用频谱分析方法估计对象的频率响应和噪声频谱
参数模型类的辨识函数 时间序列的 AR 模型 基于最优辅助变量选择的 AR 模型辨识 基于最小二乘法估计的 ARX 模型辨识 采用近似最优 4 阶段辅助变量法的 ARX 模型辨识 采用任意辅助变量的 ARX 模型辨识 估计 ARMAX 或 ARMA 模型的参数 基于预测误差法的输出误差模型辨识 基于预测误差法的 Box-Jenkins 模型辨识 基于子空间方法的状态空间模型辨识 基于预测误差法的通用线性输入输出模型辨识
Model_Para=arx(data, order); present(Model_Para); figure(4);compare(data, Model_Para); figure(5);resid(Model_Para, data);
[Para1,Para2]=rarx(data,order,'ff',0.98); count=length(Para1); A=[1, Para1(count,1),Para1(count,2)]; B=[0, Para1(count,3),Para1(count,4)]; Model_Para=poly2th(A,B);
Z=[Y,U]; Z=detrend(Z); figure(2);[Impulse_Res,r,c1]=cra(Z,100,0,1); figure(3);plot(Impulse_Res(2:50)); grid on ; hold on ;
%设置试验数据长度 %模型参数 %理想系统模型 %绘制阶跃响应曲线 %产生输入输出数据 %模型中加入白噪声 %伪随机序列 %白噪声序列 %产生输出数据 %有色噪声模型 1
非参数模型类的辨识函数 递推最小二乘法的 ARX 模型辨识 递推最小二乘法的 ARMAX 模型辨识(只能用于单输入单输出系统) Box-Jenkins 模型的递推辨识 输入误差模型的递推辨识 递推预测方法的线性输入输出模型辨识 伪线性回归的线性输入输出模型辨识 基于数据分段的 ARX 或 ARMAX 模型辨识
MATLAB 系统辨识工具箱简介
MATLAB 的辨识工具箱提供了进行系统模型辨识的有力工具,其主要功能 包括:
(1) 各种模型类的建立和转换函数 (2) 非参数模型的辨识 (3) 参数模型的辨识 (4) 递推参数估计 (5) 模型验证工具 (6) 集成多种功能的图形用户界面
1 系统辨识工具箱函数
函数名
ivstruc selstruc struc
idsimsd th2ff th2zp arxdata
plot ffplot bode nyquist pzmap present impulse view dtrend idfilt Resample
计算输出误差模型类的损失函数 根据各种准则选择模型结构 arxstruc 和 ivstruc 的典型结构矩阵
data=iddata(Y2,U); NN=struc(1:2,1:2,1:2); Loss_Fun=arxstruc(data,data,NN); order=selstruc(Loss_Fun,'aic'); order=[order(1),order(2),0,1,0,order(3)]; Model_Noise2=pem(data,order);
idarx iddata idgrey idpoly idmodel idss idfrd
c2d d2c tfdata zpkdata ssdata idmodred arxdata freqresp ss,tf,zpk,frd
表 1 系统辨识工具箱函数
功能 模型的建立函数 从 ARX 多项式建立 ARX 模型 标准包含输入输出数据的对象 根据 m 文件定义 idgrey 模型 构造基于输入输出模型的 idpoly 模型 基本的模型对象,综合了许多模型的公共特点 构造状态空间模型 构造 idfrd 模型 模型转换和模型结构函数 将连续时间模型转换为离散时间模型 将离散时间模型转换为连续时间模型 将模型转换为传递函数 计算模型的零点、极点和稳定增益 将模型转换为状态空间模型 对模型降阶 从模型中提取 ARX 模型参数 计算模型的频率函数 将系统辨识工具箱中的模型对象转换为控制系统工具箱中的 LTI 模型
%理想的脉冲响应 %阶次的估计 %输入输出数据组 %阶次的选择范围 %损失函数 %按赤池信息准则辨识系统阶次 %模型的检验 %参数估计 %显示模型 %预测与实际输出比较 %模型预测误差
%递推参数估计 %递推次数 %参数向量 %参数向量 %建立线性模型 %有色噪声模型 1 %输入输出数据组 %阶次范围 %损失函数 %辨识系统的阶次 %选择模型结构 %ARMAX 模型 %有色噪声模型 2 %输入输出数据组 %阶次范围 %损失函数 %辨识系统的阶次 %选择模型结构 %通用线性模型 %其他模型及辨识算法
函数必须存放于和函数同名的.m 后缀的文件中,才可以被其他程序所调用。如在 MyFun.m
文件中定义 MyFun()函数如下:
function [out1, …, outm]=MyFun(in1, …, inn) % MyFun 函数用于…
%说明语句 %注释体
%输入参数 in1, …, inn, 是… %输出参数 out1, …, outm 是…. out1=… ︰
%有色噪声模型 2
%检验非参数模型
%滤波处理 %相关分析法 %绘制脉冲响应曲线
5
impulse(Model_Wnoise,'r',50);
data=iddata(Y,U); NN=struc(1:3,1:3,1:3); Loss_Fun=arxstruc(data,data,NN); order=selstruc(Loss_Fun,'aic');
4
4.应用举例
考虑如下仿真系统 y(k) = 1.5y(k −1) − 0.7 y(k − 2) + u(k −1) + 0.5u(k − 2) + e(k) 其中 e(k) 为噪声项,分别取
(1) e(k) ~ N (0,σ 2 ) ;
(2) e(k) = ε (k) + 0.5ε (k −1), ε (k) 为白噪声;
在具体的辨识过程中,应该如何选择辨识函数呢?每个辨识算法都对应于特定的模型 类型,所以应先选定模型类,再选择辨识算法及辨识函数。
系统辨识常用的几类模型如下: (1) ARX 模型 A(z−1) y(k) = B(z−1)u(k − nk ) + ξ (k)
(2) ARMAX 模型 A(z−1) y(k) = B(z−1)u(k − nk ) + C(z−1)ξ (k)