0

我有一个具有两个输入和一个公共输出的系统。

让输入为 in1、in2 和输出 - out。

所以我有两个传递函数:out/in1,out/in2。

使用 simulink,我可以对每个传递函数使用 transfer fcn 块,然后将它们的输出相加以获得所需的输出。

但是是否有可能以某种方式将传递函数 out/in1、out/in2 连接在一起并使用一些 simulink 块来避免传递函数输出的求和?

提前感谢您的时间和帮助!

% in symbolic

syms Ht s D K Hg

TF1 = tf([D K],[4*Hg*Ht (2*Hg*D+2*Ht*D) (2*Hg*K+2*Ht*K) 0]);

TF2 = tf([-2*Ht -D -K],[4*Hg*Ht (2*Hg*D+2*Ht*D) (2*Hg*K+2*Ht*K) 0]);

% or in numerical way

Ht = 2.2667;
Hg = 0.92952;
D = 2.29;
K = 1.0216;

TF1 = tf([D K],[4*Hg*Ht (2*Hg*D+2*Ht*D) (2*Hg*K+2*Ht*K) 0]);

TF2 = tf([-2*Ht -D -K],[4*Hg*Ht (2*Hg*D+2*Ht*D) (2*Hg*K+2*Ht*K) 0]);
4

1 回答 1

0

有一个非常简单的解决方案。给定两个传递函数TF1=tf(num1,den1)TF2=tf(num2,den2),总和TF1+TF2可以表示为单个传递函数tf(num1*den2+num2*den1,den1*den2)

对于实际实现,您将希望使用conv来自组件传递函数的多项式系数向量来计算分子和分母多项式。

num = polyadd(conv(num1,den2),conv(num2,den1));
den = conv(den1,den2);

注意polyadd不是内置的 Matlab 函数,但您可以自己编写或使用https://stackoverflow.com/a/55085308

如果您已经拥有单输入、单输出 (SISO) 传递函数对象tf1,并且tf2在 Matlab 中,您还可以使用tf1+tf2或通过使用来获得总和parallel(tf1,tf2,1,1,1,1)(参见https://www.mathworks.com/help/control/ref/并行.html )。

为什么这行得通?

您有两个传递函数:

Y_1=\frac{N_1(s)}{D_1(s)}\cdot U
Y_2=\frac{N_2(s)}{D_2(s)}\cdot U

并且您对组合系统感兴趣:
Y=Y_1+Y_2=\bigg(\frac{N_1(s)}{D_1(s)}+\frac{N_2(s)}{D_2(s)}\bigg)\cdot U

它具有传递函数:

\frac{N_1(s)}{D_1(s)}+\frac{N_2(s)}{D_2(s)}=\frac{N_1(s) \cdot D_2(s) + N_2(s) \cdot D_1(s)}{D_1(s) \cdot D_2(s)}

于 2019-11-13T08:52:03.513 回答