在Simulink中实现非理性传递函数

时间:2015-05-27 15:13:15

标签: matlab function simulink transfer

我必须在simulink中实现以下传输功能:

(25s² + 7.5s + 1)(1 + 6s)/((1 + 2s)³ - (1 + 6s)*exp(-3s))

我找不到使用'Transfer Fcn'块实现此方法的方法,因为它似乎只接受一个合理的分子和分母。

有没有办法实现这个目标?目的是建立一个内部模型控制器。

1 个答案:

答案 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循环从数组rp构建子传输函数(child-tf' s num和{的数组{1}})。我不确定您是否可以将den与输出类型arrayfun一起使用。

transfer function