基于系统矩阵的自定义传递函数

时间:2013-08-26 14:34:48

标签: matlab simulink equation-solving

背景:我有一个复杂的机械振荡系统。通过类比,我将其转换为电路(每个元件都是RLC振荡器)。计算电路的唯一方法是节点分析,手动操作太复杂了。

由于符号数学工具箱 SimPowerSystems 工具箱不可用,因此没有方便的方法来计算传递函数G(s)以使用传递函数块。

所以我考虑过使用自定义函数,但在查阅文档后我仍然很无奈。我希望在这里找到一些初步想法。

我的系统可以通过矩阵方程描述:

A*x = y

其中A是包含我的电路的RLC阻抗的8x8矩阵,因此基本上每个元素都是多项式Z(s),例如Z_11(s) = (s^1+2s^0)/(s^2+3s-s^-1)其中s是laplace-domain变量。向量x是一个8x1行向量,包含我的8个标量输出。 y是一个8x1行向量,其元素是我的4个输入信号之一或0.

最后,我需要一个带有4个输入和8个输出的Simulink模块,它解决了以s为变量的线性方程组。

替代方案我可以想象使用4个块,每个块只有一个输入(将其他输入设置为'zeroo`)并叠加它们。只选择一个输出也是可以想象的。

有没有办法实现这个?如何创建一个块,它在Laplace-Domain中工作,而不是在时域中工作?

2 个答案:

答案 0 :(得分:1)

您可以按照建议使用4 Transfer Function(SISO)块,但对于像您这样的MIMO系统,我建议您将系统转换为或重写为状态空间表示,改为使用State-Space块。

答案 1 :(得分:1)

需要使用传递函数定义n x n系统矩阵:

W = minreal( [  tf( ... ) ... tf(...) ; ... ; tf( ... ) ... tf(...)  ];

e.g:

Z_11(s) = (s^1+2s^0)/(s^2+3s-s^-1)

- >

Z_11 = tf( [1 2 0] , [1 3 -1] );

通常需要反转

H = inv(W);

此矩阵可以直接包含在控制系统工具箱的LTI-Sytem块中。 使用mux和demux嵌入输入和输出向量。

LTI系统内部正在使用建议的状态空间模型的n * n,因此大型系统手动创建它们会很复杂。