matlab 参数辨识,Matlab系统辨识尝试之详细过程1
前面介绍了Matlab系统辨识工具箱的一些用法,这里拿一个直观的例子来尝试工具箱的具体用法。比较长,给个简单目录吧:
1. 辨识的准备
2. 辨识数据结构的构造
3. GUI辨识
4. 辨识效果
5. 对固有频率的辨识
6. 结构化辨识
7. 灰箱辨识
8. 加入kalman滤波的灰箱辨识
1.辨识的准备
在辨识前,首先要根据自己辨识的情况,确定要辨识的状态空间模型的一些特点,如连续还是离散的;有无直通分量(即从输入直通到输出的分量);输入延迟;初始状态等。了解了这些情况就可以更快速的配置辨识时的一些设置选项。
2.辨识数据结构的构造
使用原始数据构造iddata结构:
data = iddata(y, u, Ts);
这里以一个弹簧质量系统的仿真为例
代码如下,其中用到了函数MDOFSolve,这在之前的博文介绍过(http://chunqiu.blog.ustc.edu.cn/?p=183),拿来用即可。如果发现运行有错误,可以将MDOFSolve函数开头的一句
omega2 = real(eval(omega2));
注释掉。
% 弹簧质量系统建模
clc
clear
close all
m = 200;
k = 980*1000;
c = 1.5*1000;
m1 = 1*m;
m2 = 1.5*m;
k1 = 1*k;
k2 = 2*k;
k3 = k1;
%% 由振动力学知识求固有频率
M = [m1 0; 0 m2];
K = [k1+k2 -k2; -k2 k3+k2];
[omega, phi, phin] = MDOFSolve(M, K);
fprintf('固有频率:%fHz\n', subs(omega/2/pi));
%% 转化到状态空间
innum = 2;
outnum = 2;
statenum = 4;
A = [0 1 0 0;
-(k1+k2)/m1 0 k2/m1 0;
0 0 0 1;
k2/m2 0 -(k3+k2)/m2 0];
B = [0 0;
1/m1 0;
0 0;
0 1/m2];
C = [1 0 0 0;
0 0 1 0];
D = zeros(outnum, innum);
K = zeros(statenum, innum);
mcon = idss(A,B,C,D,K,'Ts',0); % 连续时间模型
figure
impulse(mcon)
%% 信号仿真,构造数据供辨识
n = 511; % 输入信号长度
Ts = 0.001;
t = 0:Ts:(n-1)*Ts;
u1 = idinput(n, 'prbs'); % 输入1为伪随机信号
u2 = zeros(n, 1); % 输入2为空
u = [u1 u2];
simdat = iddata([],u,Ts); % 形成输入数据对象
e = randn(n, 2)*1e-7;
simopt = simOptions('AddNoise', true, 'NoiseData', e); % 添加噪声
yn = sim(mcon, simdat, simopt); % 加噪声仿真
y = sim(mcon, simdat); % 无噪声仿真
figure
fori = 1:outnum
subplot(outnum, 1, i)
plot(t, y.OutputData(:, i))
hold on
plot(t, yn.OutputData(:, i), 'r')
axis tight
title(sprintf('输出%d', i))
legend({'无噪声仿真', '含噪声仿真'})
end
% 保存输入输出数据,供后续辨识
data = iddata(y.OutputData, simdat.InputData, Ts);
datan = iddata(yn.OutputData, simdat.InputData, Ts);
运行后,变量data中保存了无噪声的系统仿真输入输出数据,datan中为含噪声的仿真数据。产生的图形如下
固有频率:9.915822Hz
固有频率:22.853200Hz
3. GUI辨识
辨识可以从GUI开始,GUI的辨识对应的代码可以导出,方便以后更便捷的调整参数。
3.1 输入ident打开系统辨识工具箱
3.2 数据导入到GUI,如下
3.3 原始数据预处理,主要是去趋势detrend:
3.4 开始状态空间辨识
3.5 先做阶次选择,红框标记的为建议设置,其他设置根据自己的模型特性做配置
点击Estimate做阶次估计
可以看到4阶后落差明显,所以4阶是最好的阶次,插入此辨识模型,查看辨识结果如下,可以看到辨识结果很好(因为原始数据中没加入噪声)。
在辨识主窗口双击辨识结果,可以看到辨识结果,点击Present可以将结果显示出来,Diary and Notes里有辨识的相关代码,可以拿来进一步做修改。
上面有个N4Horizon参数设置,它表示N4SID算法中使用的前向和后向预测界,意义如下:
它是一个包含3个元素的向量[r sy su],其中r是最大前向预测界,表示使用多达r步的前向预测器;sy、su表示预测器使用过去输出和过去输入的个数。这些值的设置对辨识结果有实质性的影响,但没有简单的准则指导如何选择它们。
如果指定N2Horizon为一个k*3的矩阵,则可以测试不同参数的效果,结果会给出最佳预测模型。如果设置成一个标量,则表示3个值相同。如果自己不知如何设置这些参数,可以让N2Horizon='auto',这样软件会根据AIC准则选择sy和su的值。'auto'也是默认值。
3.6 辨识的改善
后面可以尝试调整参数改善辨识效果,如使用PEM迭代辨识方法、改变辨识的状态方程形式等。下面总结一些常用的改善辨识效果的方法:
3.6.1 PEM或N4SID方法的选择
N4SID为子空间方法,可以先用来估计得到一个初始模型;PEM为最小化预测误差迭代方法(得到最大似然估计),对应的函数为
ssest,可以对初始估计进行改善。PEM会默认先运行N4SID得到初始估计矩阵再对初始估计矩阵进行迭代优化,所以它运行时间较长。
N4SID运行比SSEST快,但精度和鲁棒性均不如SSEST,需要指定额外的难于调整的参数。
3.6.2 Focus的选择
这在之前博文介绍过,这里简单提一下:
Prediction:使用噪声模型H的逆来衡量不同频率范围内拟合的相对重要性。这与最小化一步前向预测相对应,适合于在一段短时间间隔的拟合。适合于输出预测应用。
Simulation:使用输入的频谱来衡量不同频率范围内拟合的相对重要性,而不使用噪声模型来衡量。适合于输出仿真应用。
Stability:适合于估计最稳定的模型。
Filter:通过弹出Estimation Focus对话框来指定一个用户滤波器。干扰模型由估计数据决定。
3.6.3 Initial state
指定对待初始状态的方法。这个在使用PEM方法辨识时作为迭代的初始状态使用。如果辨识得到不精确的解,可以尝试指定特定的方法来处理初始状态而不是选择自动。
Auto:基于估计的数据自动选择Zero、Estimate或Backcast。
Zero:如果初始状态对估计误差的效果微不足道,可以设置为0来最优化方法的效果。
Estimate:把初始状态作为一个未知的参数向量从数据中辨识。
Backcast:用后向滤波方法(最小二乘拟合)估计初始状态。
3.6.4 K的辨识
当不确定如何配置K时,可以先不辨识它,只辨识系统矩阵。在得到系统模型后,再使用ssest配置K为自由参数辨识改善模型。如
init_sys = ssest(data, n,'DisturbanceModel','none');
init_sys.Structure.k.Free = true;
sys = ssest(data, init_sys);
init_sys为无噪声的动态模型。
4.辨识效果
上面讲的过程中是对无噪声数据处理的,效果很好,这里对各辨识算法的效果做对比。
对无噪声数据,n4sid和ssest辨识的效果如下
可以看到对无噪声数据两种算法的效果都非常好,都能达到准确的辨识。
对含噪声数据,n4sid和ssest辨识的效果如下
误差曲线图如下
可以看到n4sid算法对含噪声的数据辨识相对较差,而ssest辨识效果很好,基本把原系统辨识出来了。
matlab 参数辨识,Matlab系统辨识尝试之详细过程1相关推荐
- matlab系统辨识尝试之详细过程1,Matlab系统辨识尝试之详细过程1
Matlab系统辨识尝试之详细过程1 2018-11-27 前面介绍了Matlab系统辨识工具箱的一些用法,这里拿一个直观的例子来尝试工具箱的具体用法.比较长,给个简单目录吧:1. 辨识的准备 2. ...
- matlab 参数识别,[转载]自编最小二乘法的Matlab参数辨识程序(含实例)
function [sysd,sys,err] = ID(Y,U,Ts) % %基于递推最小二乘法的参数辨识程序 %仅针对二阶系统:) %出处:http://blog.sina.com.cn/xian ...
- matlab 纯迟延_基于Matlab参数辨识的纯迟延系统预估控制在火电厂的应用
V 01 . 27N o . 4 A ug . 2008 河北电力技术 H EB EI E L EC T R I C PO W E R 第 27 卷第 4 期 2008 年 8 月 基 于 M at ...
- matlab 参数优化函数,MATLAB优化函数fmincon解析
MATLAB,优化函数fmincon解析 [x,fval,exitflag,output,lambda,grad,hessian]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,n ...
- 遗传算法系统辨识matlab程序,8.8 基于遗传算法的机械手参数辨识 系统辨识理论及Matlab仿真课件.ppt...
8.8 基于遗传算法的机械手参数辨识 (1) 8.8.1 系统描述 双关节机械臂动力学方程可写为: 其中 为重力加速度. 参数 分别是机械力臂方程中未知物理参数 的函数,表达如下: 由 的定义,可知: ...
- matlab实现传递函数参数辨识,由阶跃响应曲线辨识传递函数的图解方法
第 22 卷第 1 期 山 东 科 技 大 学 学 报 ( 自 然 科 学 版 ) Vol. 22 No. 1 2 0 0 3 年 3 月 Journal of Shandong University ...
- matlab 广义最小二乘,基于MATLAB的广义最小二乘参数辨识与仿真
总第 238 期 2009 年第 8 期 计算机与数字工程 Computer & Digital Engineering Vol. 37 No. 8 173 基于 MA TLAB 的广义最小二 ...
- matlab传递函数参数辨识,基于matlab/Simulink的参数辨识
基于Simulink的辨识 Simulink自带Parameter Estimation功能.可以对Simulink模型中的参数进行估计.MATLAB的Parameter Estimation官方说明 ...
- matlab最小二乘法参数辨识,基于最小二乘法的永磁同步电机在线参数辨识的仿真...
摘 要:较高性能的永磁同步电机矢量控制系统需要实时更新电机参数,文章中采用一种在线辨识永磁同步电机参数的方法.这种基于最小二乘法参数辨识方法是在转子同步旋转坐标系下进行的,通过MATLAB/SIMU ...
- 函数的递推matlab,关于递推最小二乘法辨识参数的matlab编程(含注释)
最近在做关于过热气温的动态建模问题.有现场运行的历史数据,要找出导前区和惰性区的传递函数. 对这类算法了解不多,程序读起来比较吃力,所以就转来一篇完整的辨识程序,在原有基础上进行了简化,并稍加注解一下 ...
最新文章
- visual studio 怎么生成coredump文件_玩游戏丢失dll文件别着急 认识这些就妥了
- wordpress 表格文字对齐_Word文字对齐还用空格键?OUT了,这3个文字对齐方式你值得拥有!...
- 【maven插件】flatten-maven-plugin : 处理版本占位符
- shell 字符串切割
- 【UML】UML扩展的建模概念
- IOT---(3)深入解析物联网操作系统(架构、功能与实例分析)
- 万元华为旗舰新机超21万人预约,网友:有钱人真的多!
- paip.项目开发效率提升之思索
- QLabel显示QImage时报错
- 新百家姓前20位(附前300名)
- 发稿猫:5步分析钟薛高、东鹏特饮新品牌如何做营销
- 天地图key的申请步骤
- ios 凭据验证_苹果内购服务器验证凭证回执Data
- tig只看某个作者的提交
- 实录 | 清华大学计算机学生课外技术活动开放日专场博论(PPT下载)
- python宿舍管理保存_学生宿舍管理信息系统详细报告
- 昂达V820W使用指南
- QPainter使用QImage做画布时花屏
- C#:DataGridView边框线、标题、单元格的各种颜色
- fragment重叠问题