基于MATLAB的控制系统时域模型辨识方法及步骤

目录

1.基本思想

2.具体步骤

2.1 采集时域数据

2.2 确认需要辨识的模型结构

2.3 根据特定系统模型结构,辨识模型系数

2.4 模型验证

2.5 MATLAB代码实现

3.直接使用系统辨识工具箱


1.基本思想

        根据实际系统采集到的数据,对模型进行建模,包括确定系统模型的模型结构,利用最小二乘法或其他最优化算法(极大似然估计、最速梯度下降等)进行模型结构中的模型参数进行求解。最后通过校验数据,进行模型验证,进而实现系统辨识。

2.具体步骤
2.1 采集时域数据

时域数据分为两个部分,模型辨识数据及模型验证数据。

本文利用阶跃法进行数据采集,采样频率fs为1kHz,则采样周期为Ts=1/fs。

利用不同的阶跃,收集两组不同的数据,或将一组数据分成两部分处理均可。

2.2 确认需要辨识的模型结构

一、模型阶次选取:MATLAB通过估计一个状态空间模型,来选取模型阶次,一般选择较低阶次模型;实际中常用的模型为一阶二阶模型,因此也可通过绘制数据波形,查看阶跃过程中是否存在超调,若存在超调,则可先进行二阶模型仿真,若不存在超调,则直接使用一阶模型。

MATLAB函数具体为:

sys = ssest(tt,nx);

Estimate state-space model using time-domain or frequency-domain data - MATLAB ssest

二、是否存在时滞:MATLAB函数可直接计算,也可以直接通过观察,看是否需要时滞表征系统结构模型。

其中MATLAB函数具体为:

delayest(data);

Estimate time delay (dead time) from data - MATLAB delayest - MathWorks 中国

2.3 根据特定系统模型结构,辨识模型系数

使用MATLAB函数进行模型辨识:

1.使用tfest()进行传递函数模型辨识

sysTF = tfest(data,2,0,delay_time);

2.使用ssest()进行状态空间模型辨识
Gss = ssest(data_offest,1:10);
s = tf('s');
sysTF1 = tf(Gss)*exp(-delay_time*s);

2.4 模型验证

1.系统模型符合度

指标:符合度在80%以上,均可认为是好的系统辨识结果;若是80%一下,需要在系统模型中,加入扰动模型,以此来判断系统模型是否合理。

2.根据对扰动模型的建模,判断系统模型是否缺少关键的模型状态

通过查看系统残差与输入的互相关性来确认偏差与扰动有关,还是与输入有关。

若残差与输入的胡相关性为0,则证明系统模型正确,不必再提升阶次,否则将引起过度拟合,使系统响应变慢。

2.5 MATLAB代码实现
clear all;
close all;
fs = 1000;%采样频率
Ts = 1/fs;%采样周期
%采集数据,绘图
load('C:\Users\ykk\Desktop\idtest\idtest_data.mat');%需要更换你本地数据地址
input1 = idtestdata(2:end,2);%用来估计模型的测量数据,通过一系列阶跃进行收集
output1 = idtestdata(2:end,1);
data = iddata(output1,input1,Ts);
data.InputName = '设定转速';
data.InputUnit = 'rpm';
data.OutputName = '实时转速';
data.OutputUnit = 'rpm';
data.TimeUnit = 'seconds';
plot(data);
set(findall(gca,'Type','Line'),'LineWidth',2);
grid on;
%采集验证数据,并绘图
input2 = idtestvalidata(2:end,2);%一系列阶跃进行数据采集,用于模型验证
output2 = idtestvalidata(2:end,1);
validata = iddata(output2,input2,Ts);
validata.InputName = '设定转速';
validata.InputUnit = 'rpm';
validata.OutputName = '实时转速';
validata.OutputUnit = 'rpm';
validata.TimeUnit = 'seconds';
plot(validata);
set(findall(gca,'Type','Line'),'LineWidth',2);
grid on;
Identified transfer function with delay model
%延时和线性部分分离 Estimate the delay term
delay_samples = delayest(data,2,2,0,1000);
delay_time = delay_samples*Ts
sysTF = tfest(data,2,0,delay_time)
Identify a state space model
%remove delay from output
datareal_no_delay = output1(delay_samples+1:end);
%repackage offest data
data_offest = iddata(datareal_no_delay,input1(1:end-delay_samples),Ts);
%Fit data to a state space model of unknow order
Gss = ssest(data_offest,1:10);
%Convert to tf and add in the delay term
s = tf('s');
sysTF1 = tf(Gss)*exp(-delay_time*s)
Validata model
%check the training data
opt = compareOptions;
opt.InitialCondition = 'z';%;零初始条件
compare(data,sysTF,opt)
set(findall(gca,'Type','Line'),'LineWidth',2);
%check the validation data
opt = compareOptions;
opt.InitialCondition = 'z';%;零初始条件
compare(validata,sysTF,opt);
%假设未建模的响应来自于一些随机噪声或者随机干扰过程,如果单纯提高模型的阶次,有可能会出现过度拟
%合的情况,因此需要确认时随机干扰造成的误差,还是模型结构造成的误差。
%可以将干扰路径模拟成高斯白噪声,但从根本上说,它是在以一种随机的方式改变的,它可以被建模为过滤
%后的白噪声。
%因此,我们可以同时对系统的基本动态和干扰因素进行建模。
Whiteess and Correlation tests
%使用模型验证技术查看这些误差本质上是随机的,还是在某种程度上是相关的。
resid(sysTF,data);
%预测残差的白色化程度,以及残差与输入的相关性。
Try a new model structure :Process Model Estimation with 2ed order disturbance
%二阶包含扰动模型:
sysInit = idproc('P2DU','TimeUnit','seconds');
sysInit.Structure.Kp.Value = 1;
sysInit.Structure.Kp.Minimum = 0;
sysInit.Structure.Kp.Maximum = 5;
sysInit.Structure.Tw.Minimum = 0;
sysInit.Structure.Tw.Maximum = 1;
sysInit.Structure.Zeta.Minimum = 0.01;
sysInit.Structure.Zeta.Maximum = 0.9;
sysInit.Structure.Td.Minimum = 0;
sysInit.Structure.Td.Maximum = 1;
opt = procestOptions('DisturbanceModel','estimate');%此处选用默认
sysP2DU = procest(data,sysInit,opt)
Validata model
resid(sysP2DU,data);
%残差与输入之间互相关性基本为零,因此说,模型的误差与系统模型关系无关,而与干扰模型有关。
%数据只是收到随机干扰的影响。通过考虑扰动路径,使系统模型更有可信度。
%check the training data
opt = compareOptions;
opt.InitialCondition = 'z';
compare(data,sysP2DU,opt)
set(findall(gca,'Type','Line'),'lineWidth',2);
grid on;

%check the validation data 
opt = compareOptions;
opt.InitialCondition = 'z';
compare(validata,sysP2DU,opt)
set(findall(gca,'Type','Line'),'lineWidth',2);
grid on;
%对比上述无干扰模型的阶跃响应
step(sysP2DU,sysTF);
legend('sysP2DU','sysTF');
set(findall(gca,'Type','Line'),'lineWidth',2);
grid on;
%估计扰动的作用:1.扰动通常对系数动态估计有较大的影响,通过考虑干扰,可以提高整体模型的拟合。
%2.验证模型。
3.直接使用系统辨识工具箱

可以直接参考此博主笔记,非常详细。

MATLAB系统辨识工具箱学习,详细教程!_matlab系统辨识工具安装_释怀人生的博客-CSDN博客

本文参考视频:【Brian Douglas】线性系统辩识_哔哩哔哩_bilibili

  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ayuan0211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值