Smith Predictor是针对时滞系统的。

原理:看Matlab help中的"Control of Processes with Long Dead Time: The Smith Predictor"足矣,写的非常好。

假设有一个有时滞的一阶模型,其传递函数如下:

s = tf('s');
P = exp(-93.9*s) * 5.6/(40.2*s+1);
P.InputName = 'u';
P.OutputName = 'y';
P

得到:

P =From input "u" to output "y":5.6exp(-93.9*s) * ----------40.2 s + 1

注意到时滞常数93.9是系统时间常数的两倍还多,

其阶跃响应如下:

step(P), grid on

我们常使用PI控制器来控制被控对象P:

C为PI控制器:

Cpi =1      1 Kp * (1 + ---- * ---)Ti     s 

这里,我们用PIDTUNE指令来tune一个PI控制器,包括用pidstd创建一个标准的PID控制器(Kp=1,Ti=1),设定开环带宽为0.006rad/s:

Cpi = pidtune(P,pidstd(1,1),0.006);
Cpi

得到:

Cpi =1      1 Kp * (1 + ---- * ---)Ti     s with Kp = 0.0501, Ti = 47.3Continuous-time PI controller in standard form

闭环系统的阶跃响应如下(feedback的第一个参数为PI控制器开环传函,第二个参数为测量单元传函):

Tpi = feedback([P*Cpi,1],1,1,1);  % closed-loop model [ysp;d]->y
Tpi.InputName = {'ysp' 'd'};step(Tpi), grid on

可以看出,闭环阶跃响应的超调幅度勉强可以接收,但是稳定的时间有点太长了(差不多600s)。为了提高响应速度,是否可以增加Kp呢?下面测试3种Kp:

Kp3 = [0.06;0.08;0.1];      % try three increasing values of Kp
Ti3 = repmat(Cpi.Ti,3,1);   % Ti remains the same
C3 = pidstd(Kp3,Ti3);       % corresponding three PI controllers
T3 = feedback(P*C3,1);
T3.InputName = 'ysp';step(T3)
title('Loss of stability when increasing Kp')

超调最大的就是Kp=0.1的情况。可以看出,在pidtune的情况下,增大Kp就增加了超调、引入了不稳定。

PI控制器对于时滞系统而言,其性能受限于long dead time,此时PI显得“缺乏耐心”。一个例子就是在我们用淋浴洗澡。因为水管比较长,因此它是一个时滞系统。如果我们“缺乏耐心”的调整水温,会频繁的冷热交替、让人非常烦恼。一个比较好的策略就是在进一步调整之前,等待当前setting的水温先发生变化。如果我们学习到了哪个setting可以得到我们想要的水温,我们就可以如尝所愿。这个就是“Smith compensator”的思想。

Smith预估器(或者称‘补偿器’)的框图如下:

假设P是水管,那么在Smith预估器中,我们就用一个Gp(系统内模)来预测没有时滞的系统输出(即上图中的yp)。在我们水管的例子中,Gp就是最佳水温对应的setting,yp就是水管长度为0时输出的水温。

然后将这个yp和ysp(水温设定值)进行比较,经过控制器C后得到控制量u。为了防止drift并抑制外部干扰,还需要将预测部分经过时滞环节的输出y1和实际被控对象的输出y进行比较,得到差值dy;dy经过滤波器F后会贡献给e。

综上可以看出,使用Smith预估器的前提是:

  • 准确估计系统的内模Gp(越接近实际的P越好)。
  • 准确估计系统的时滞环节τ
  • 设置控制器C

对于前述系统,

P =From input "u" to output "y":5.6exp(-93.9*s) * ----------40.2 s + 1

我们设置Gp和P一样(这里假设“百分百准确”的内模估计):

F使用一个20s的一阶滤波器:

F = 1/(20*s+1);
F.InputName = 'dy';
F.OutputName = 'dp';

对于C,我们使用PI控制器。这样,我们便构建了一个Smith预估器。通过它,我们可以增加系统的开环带宽、减少超调。如下所示,在用connet构建了总的plant后,我们用pidtuneIptions设计了一个90°的相位裕度、带宽为0.08rad/s的系统:

% Prediction model
Gp = 5.6/(40.2*s+1);
Gp.InputName = 'u';
Gp.OutputName = 'yp';Dp = exp(-93.9*s);
Dp.InputName = 'yp'; Dp.OutputName = 'y1';% Overall plant
S1 = sumblk('ym = yp + dp');
S2 = sumblk('dy = y0 - y1');
Plant = connect(P,Gp,Dp,F,S1,S2,'u','ym');% Design PI controller with 0.08 rad/s bandwidth and 90 degrees phase margin
Options = pidtuneOptions('PhaseMargin',90);
C = pidtune(Plant,pidstd(1,1),0.08,Options);
C.InputName = 'e';
C.OutputName = 'u';
C

下面比较一下有Smith预估器的闭环系统和只有PI控制器的系统的阶跃响应,前者的代码为:

% Assemble closed-loop model from [y_sp,d] to y
Sum1 = sumblk('e = ysp - yp - dp');
Sum2 = sumblk('y = y0 + d');
Sum3 = sumblk('dy = y - y1');
T = connect(P,Gp,Dp,C,F,Sum1,Sum2,Sum3,{'ysp','d'},'y');

比较:

step(T,'b',Tpi,'r--')
grid on
legend('Smith Predictor','PI Controller')

可以看出,Smith预估器没有超调、响应极快(当然,前提是估计的内模是完全准确的)。

对应的Bode图也印证了这一点,看下图中的带宽和相位裕度:

----------------------------------------------------Simulink分割线-----------------------------------------------------

上面的例子是用脚本写的。而在Simulink中,已经有了现成的Smith Predictor Controller模块,可以直接用。如果想用这个模块复现"Control of Processes with Long Dead Time: The Smith Predictor"的例子,需要注意:Smith Predictor Controller是离散的,因此在写传函时不能和连续的传函形式一样,而应该用Matlab的c2d函数先将例子中的TF进行转换:

>> h = tf(5.6,[40.2 1]);
>> hd = c2d(h,0.1)hd =0.01391----------z - 0.9975Sample time: 0.1 seconds
Discrete-time transfer function.

再设置Smith Predictor Controller中的Numerator和Denominator:

框图如下:

仿真结果如下(红色的y为Smith预估器的仿真输出,其他的y为PI控制器的仿真输出):

可以看出,在模型无误差的情况下,Smith预估器可以允许有更大的Kp、响应快速、且没有超调。

Matlab中的Smith 预估器相关推荐

  1. smith预估 matlab,毕业论文】大滞后系统Smith预估器的控制仿真

    <毕业论文]大滞后系统Smith预估器的控制仿真>由会员分享,可在线阅读,更多相关<毕业论文]大滞后系统Smith预估器的控制仿真(6页珍藏版)>请在人人文库网上搜索. 1.毕 ...

  2. 基于Smith预估器的PID控制在房间湿度控制

    摘要:本文首先对空调进行相关数据采集,通过MATLAB软件,用最小二乘法,建立冷水阀门开度与厂房房间内温度间的数学模型,为系统仿真提供模型依据. 本文第3章先介绍了SMITH预估原理,并将其改进.在预 ...

  3. matlab中离散数值求解器在哪,matlab - 在ode MATLAB求解器上使用中间值 - SO中文参考 - www.soinside.com...

    我正在使用刚性求解器(ode15s)对ODE系统进行时间积分.它工作正常,但我想加快速度. 方程组以状态空间形式给出: function [dx] = fun(t,x,M,C,K,other_para ...

  4. matlab中矩阵方程的求解器,矩阵方程的计算求解(Matlab实现)

    一.Lyapunov方程的计算求解 1.连续Lyapunov方程 连续Lyapunov方程可以表示为: AX + XA* = -C % 其中A*是A的转置 Lyapunov方程源于微分方程稳定性理论, ...

  5. 史密斯预估器matlab仿真,(毕业论文)史密斯预估器设计.doc

    (毕业论文)史密斯预估器设计 摘 要 大迟延对象的控制一直是控制领域研究的焦点问题.加热炉温度控制便属于这类复杂的控制对象.传统的加热炉温度控制系统采用的是原料油出口温度同燃料油流量或同炉膛温度的串级 ...

  6. 模糊神经网络-PID Smith预估集成控制系统

    我们在matlab2021a中建立如下的simulink模型: 对模糊神经网络PID-Smith预估控制(图中简称RBF-FUZZY-PID)和传统的PID控制方法进行比较.被控对象模型中.和=10, ...

  7. Smith预估控制器

    Smith预估器主要针对存在大滞后的系统,作用延迟和反馈延迟环节的控制,Smith预估器的另一篇文章,请参看下面的博客文章: 博途1200/1500PLC Smith预估器(补偿器)算法实现(FB)_ ...

  8. 基于matlab介绍传感器融合和跟踪工具箱中用于评估跟踪器性能的不同定量分析工具(附源码)

    目录 一.分配和错误指标 1.1 轨道和真相定义 1.2 计算和分析指标 1.3 分析分配指标 ​编辑 1.4 分析错误指标 ​编辑二.将指标汇总为分数 2.1 欧斯帕公制 2.2 分析 OSPA 指 ...

  9. matlab figure函数_如何在Matlab中使用GUI做一个简易音乐播放器? ---- (六)控件间的数据传递...

    我纠结了两个星期是否要写这一章-最后决定还是要写一章收尾,来解释其中的控件间的数据传递问题. 在前五篇中,如果有童鞋跟上了我的思路或者做完了这样一个gui,会发现还有一个一直避开的遗留问题,就是将歌曲 ...

最新文章

  1. 电脑主板线路连接图解_电工速学手册:306页现场电工全能图解,实用技术精选大合集!...
  2. 数据挖掘之随机事件与随机变量
  3. Matplotlib 中文用户指南 8.1 屏幕截图
  4. python算法实验是什么_PCA 算法实验代码(python)
  5. Validator验证Ajax提交表单的方法
  6. POJ 1469 COURSES 二分图最大匹配
  7. 阿里、字节年薪百万的测开专家,都在关注哪些前沿技术
  8. 关于银行等带有安全控件插件的输入selenium无法sendkeys的解决方案
  9. 打算_20160604
  10. 算法笔记二分查找问题1
  11. 详细图解MySQL(win7x64 5.7.16版本)下载、安装、配置与使用
  12. 如何计算某一天是星期几?—— 蔡勒(Zeller)公式
  13. easyrecovery15新版绿色序列号数据恢复软件
  14. 无毒健康软件下载地址 http://www.downcc.com/ 绿色资源网
  15. pip install XXX总是报错,例如:Exception: Traceback (most recent call last):这种错误怎么办?
  16. prince2 成功的项目管理_学员心得 | 宋文彬:学习PRINCE2的心路历程
  17. ZARA卖床单,线上年增长300%,服饰品牌HOME店成趋势?
  18. 计算机教室冷量负荷,7.2空调负荷计算 - 民用建筑供暖通风与空气调节设计规范 GB50736-2012 - 消防规范大全 - 消防资源网!...
  19. 原生JS实现的滚动抽奖工具(可设置每个奖品概率、滚动速度、滚动圈数)
  20. mysql 设置自增字段

热门文章

  1. (转)常用的js代码
  2. LEDE 源码下载与编译
  3. time(0) 是什么意思?
  4. java 文件上传乱码_java上传txt文件,出现中文乱码
  5. Echarts设置y轴值间隔
  6. 2022/03/03js作业第一个不同宽度变色第二个是输入几年几月几日判断是今年的第几天(不算闰年2月为28日)
  7. 统计笔记3:statistical inference
  8. 朱松纯团队新作:让AI「读懂」人类价值观!登上Science Robotics
  9. 2021-07-14 PMP 横道图、网络图、看板、燃尽图了解
  10. spring源码构建时缺失spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar