我必须在simulink
中实现以下传输功能:
(25s² + 7.5s + 1)(1 + 6s)/((1 + 2s)³ - (1 + 6s)*exp(-3s))
我找不到使用'Transfer Fcn'
块实现此方法的方法,因为它似乎只接受一个合理的分子和分母。
有没有办法实现这个目标?目的是建立一个内部模型控制器。
答案 0 :(得分:0)
我知道的唯一方法是在Simulink中实现之前必须对传递函数进行合理的近似。它实际上是时间延迟部分的PADE近似:用m阶泰勒多项式逼近exp(-Ts)。
我个人从来没有详细说明过,但我知道Matlab也有Padé approximation of model with time delays。
更新:
我尝试做一个完整实现的例子,希望它有所帮助。在示例中,我使用third-order pade approximation
作为Matlab的示例。但是你必须自己选择订单才能最好地适应你的问题。
>> s = tf('s');
>> sys = (1+6*s)*exp(-3*s);
>> mysys = (25*s^2 + 7.5*s + 1)*(1 + 6*s)/(1 + 2*s)^3 - pade(sys, 3)
mysys =
48 s^7 + 38 s^6 + 718 s^5 + 1434 s^4 + 1106 s^3 + 267.8 s^2 + 20 s
--------------------------------------------------------------------
8 s^6 + 44 s^5 + 107.3 s^4 + 140.6 s^3 + 97.33 s^2 + 33.33 s + 4.444
Continuous-time transfer function.
现在,由于传递函数形式不正确(比极点更零),因此必须将其分解为适当形式的组合:
>> [num,den] = tfdata(mysys, 'v');
>> [r,p,~]=residue(num,den)
r =
1.0e+02 *
0.1298 + 0.8244i
0.1298 - 0.8244i
1.5805 + 0.0000i
-0.1937 + 0.0000i
0.0700 + 0.0000i
-0.0088 + 0.0000i
p =
-1.2259 + 1.1696i
-1.2259 - 1.1696i
-1.5481 + 0.0000i
-0.5000 + 0.0000i
-0.5000 + 0.0000i
-0.5000 + 0.0000i
最后,使用for循环从数组r
和p
构建子传输函数(child-tf' s num
和{的数组{1}})。我不确定您是否可以将den
与输出类型arrayfun
一起使用。
transfer function