我最初的问题是我有一个连续传递函数,其系数随时间变化。
目前,TF的系数是根据块掩码参数表示的。这些参数是可调的,如果我在模拟期间更改了掩码参数对话框中的值,则响应似乎会做出适当的反应。
但是我怎么能在代码/块流程中做到这一点?基本上,我 具有使用掩码设置的块参数'maskParam' 参数对话框,以及掩码初始化命令: 'PARAM = maskParam'。 'param'用于传递函数和I 想要实时更改它(如param = maskParam * f(t))。
我已经环顾四周,发现relevant solutions,但要么难以置信的复杂;或者我们在运行时允许修改的唯一传递函数是离散的1)我想避免z变换我相当复杂的TF(我没有控制工具箱)2)采样时间似乎是固定的。没有使用这种更新参数的“脏”技术,也许这就是解决方法?
说明:
答案 0 :(得分:2)
我假设您想在模拟运行时更改模拟参数?
解决方案是您在inf
期间运行模拟,并在模拟期间使用/更改工作空间变量以使更改生效。
例如:
如果查看w
块,可以在运行时设置它的值:
set_param('my_model_name/w', 'value', 100); % Will change to 100 immediately
你可以用数组做类似的事情(例如你的情况下的系数列表)。
给你提示
您正在使用离散传输功能块。请尝试以下方法:
1)为您的区块命名,例如fcn_1
2)在您的脚本中,键入set_param('your_model_name/fcn_1', 'numerator', '[1 2]');
这会将分子值设置为[1 2]
。对分母也这样做。
3)您应该能够通过本练习了解如何处理属性名称等,以便您可以使用set_param / get_param更改/获取它们。
我让你进一步调查。
答案 1 :(得分:0)
简短的回答是Simulink模块并不是真的设计用来做到这一点。根据定义,传递函数是Liner-Time Invariant,意味着其特征(读取系数)不随时间变化。
话虽如此,有一些解决方法,例如您在问题中提到的那些。除了@ ha9u63ar建议的set_param
方法之外,这些是解决我担心的问题的正确方法。另请参阅MathWorks网站上有关该主题的this blog。