1. 原由

传递函数是针对线性时不变(Linear Time-Invariant,LTI)系统定义的,严格来说,时变传递函数的说法并不十分严谨。但 “时变”和“非线性”才是实际系统的本质特性,就拿最简单的RC电路来说,电阻会随温度变化,电容也会随使用时间发生变化,RC参数的变化就会造成传递函数的时变。对于已经建好的传递函数,需要分析参数时变的影响时,或者已经建好的某种控制算法,需要验证对于参数时变的适应能力时,应该如何处理呢?

这时,由线性时不变系统传递函数推广得到的时变传递函数是一个不错的选择。

2. 方法

2.1 方法一:通过微分方程实现时变传递函数

传递函数由微分方程通过拉普拉斯(Laplace)变换得到,已知传递函数形式后,可以反推出微分方程,再在Simulink中利用基本模块搭建模型。

如某时变二阶系统,其传递函数为:

其中, k(t) ,a(t),b(t)为时变参数。

传递函数反推出微分方程为:

上述微分方程在Simulink中容易搭建:


更方便的是,Matlab 2017b之后在控制系统工具箱(Control system toolbox)中推出了时变传递函数模块(Varying Transfer Function),可供用户直接选用。


Simulink自带的这个时变传递函数模块(Varying Transfer Function)就是使用的微分方程方法实现的。


2.2 方法二:通过状态空间实现时变传递函数

传递函数还可以转变为状态空间形式,如上述二阶系统可转变为可控标准型状态空间:

通过上述状态空间形式也可在Simulink中方便的实现时变传递函数。同样,Matlab 2017b之后在控制系统工具箱(Control system toolbox)中推出了时变状态空间模块(Varying State Space),可供用户直接选用。


2.3 方法三:通过S函数实现时变传递函数

核心思路与方法二相同,即:传递函数转变为状态空间(可选可控标准型和可观标准型),通过传递函数系数重构状态空间矩阵,通过状态空间实现时变传递函数。

在Matlab 2017b版本中推出线性时变系统表达方式之前,笔者早年使用Level-2 S函数开发时变传递函数模块,可供Matlab 2017b版本以前的用户使用 ,也可供需要学习Level-2 S函数使用方法的用户参考。


2.4 方法四:通过DCP模块实现时变传递函数

Simulink中的传递函数模块(Transfer Fcn)的分子系数(Numerator coefficients)和分母系数(Denominator coefficients)都支持在线调整,即在仿真过程中可通过set_param函数来在线调整传递函数的分子分母系数,由此实现时变传递函数。


笔者开发的DCP模块可实现各类模块在线更新参数的需求,通过DCP模块可方便的实现时变传递函数如下所示,DCP模块详见https://zhuanlan.zhihu.com/p/393407384


3. 演示

二阶时变传递函数:

参数时变规律为:

四种方法的Simulink模型:


阶跃响应仿真结果:


正弦响应仿真结果:


分析仿真结果:

方法一与方法三的仿真结果完全相同;方法二与方法一、方法三在a(t)发生突变的动态过程有所不同;方法四与方法一、方法二、方法三在k(t)发生突变时的动态过程有所不同;

其主要原因为四种建模方式不同,模型中的记忆环节(如积分环节、状态量)选取不同,记忆环节与输出之间的映射关系也不同,因此某些参数变化体现在记忆环节之前的输入参数中,有些参数变化体现在记忆环节之后的输出参数中,由此造成突变瞬间动态过程的响应差别,但进入稳态后的响应是相同的。

源程序下载

**有Matlab/Simulink方面的技术问题,欢迎发送邮件至944077462@qq.com讨论。更多Matlab/Simulink原创资料,欢迎关注微信公众号:Matlab Fans**

Simulink中构造时变传递函数的四种方法

Simulink中构造时变传递函数的四种方法相关推荐

  1. c语言中字符串去掉逗号,JS四种方法去除字符串最后的逗号

    window.οnlοad=function() { var obj = {name: "xxx", age: 30, sex: "female"};//定义一 ...

  2. java 中lock,java中lock获取锁的四种方法

    在java接口中会存放着许多方法,方便线程使用时的直接调用.对于lock接口大家都不陌生,我们已经初步对概念进行了理解.那么在获取锁的方法上想必还不是很清楚.下面我们就lock获取锁的四种方法分别进行 ...

  3. 【转】Java中字符串中子串的查找共有四种方法(indexof())

    原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下: 1.int ...

  4. 在Action类中获得HttpServletResponse对象的四种方法

    Struts2:在Action类中获得HttpServletResponse对象的四种方法 在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和req ...

  5. python可以实现哪些功能_Python中实现机器学习功能的四种方法介绍

    本篇文章给大家带来的内容是关于Python中实现机器学习功能的四种方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 在本文中,我们将介绍从数据集中选择要素的不同方法; 并使用S ...

  6. Java中字符串中子串的查找共有四种方法(indexof())

    2019独角兽企业重金招聘Python工程师标准>>> public class FirstDemo { /** *API中String的常用方法 */ // 查找指定字符串是否存在 ...

  7. java 当月最后一天_java中取得当月最后一天的四种方法

    java中取得当月最后一天的四种方法 第一种,使用Calendar的roll方法,在限制某个日期字段不改变的形式下,改变其他日期字段的值. 第二种,使用Calendar的getActualMaximu ...

  8. java indexof 子字符串_Java中字符串中子串的查找共有四种方法(indexof())

    Java中字符串中子串的查找共有四种方法(indexof()) Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现的指定子字符串在此 ...

  9. Struts2教程6:在Action类中获得HttpServletResponse对象的四种方法

    在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和request.而在Struts2中,并没有任何参数,因此,就不能简单地从execute方法获得H ...

最新文章

  1. mysql读取求和_MySQL从单独的表中获取求和值
  2. python mkdir -p_Python中的mkdir -p功能[复制]
  3. idea 控制台程序的打包
  4. python合法的变量名有哪些_Python判断变量名是否合法的方法示例
  5. 模拟CMOS 集成电路设计
  6. 嵌入式软件开发与互联网软件开发模式差异
  7. 勘测定界坐标交换格式文本文件转换成 shapefile 格式
  8. 数据字典在mysql中怎么做_如何编写数据字典
  9. 【C++】重定义,重载,重写
  10. 康托尔连续统假设正确吗?
  11. 网络安全技术 | 身份认证的革命——生物特征身份认证
  12. Error response from daemon: Pool overlaps with other one on this address space
  13. 路由器连接路由器设置方法
  14. 阿里云人机验证(无痕)完整流程以及注意事项
  15. 用c++语言编写的小程序,利用C++编写一些有趣的小程序
  16. cout保留两位小数位
  17. 安装配置群晖 DS918+ NAS及常用技巧
  18. java练习题——手动输入成绩, 每次加分百分之二十。
  19. Scrape Center爬虫平台之spa9案例
  20. element周选择器---设置展示周和日期

热门文章

  1. keil5改工程名称_广西某道路人行道维修工程招标公告
  2. combinations java_[LeetCode][Java] Combinations
  3. SAP采购订单-条件类型-配置开发步骤
  4. 区块链模块化的大胆尝试,解读公链Celestia
  5. 全大伟:城市道路交通为什么会拥堵?
  6. 第一句话真不知道说啥好啊!纠结啊。。。
  7. 《刺客信条:启示录》低配置画面设置优化
  8. ubuntu18.04安装搜狗输入法 QQ 截图工具 pycharm
  9. 刷机精灵android版授权教程6,刷机精灵 2.4.6.3 最新版
  10. 20060308: WOW角色不见了