1

我想绘制传递函数的阶跃响应。等式是 1/as^2 + bs + c (对不起,我不知道如何在这里写分数)。我得到了两组值,以及传递函数参数的相应方程:

a1 = [-2, -1 + 2i](i 是虚数单位)

a2 = [-3, -1 - 2i]

a = 1

b = (a1 + a2)

c = (a1 * a2)

第一组值 (-2, -3) 在 Matlab 和 Simulink 中都能完美运行。当我想在 Simulink 的分母中输入虚数时,问题就开始了,如下所示:

分母问题

在 Matlab 中,我可以这样做:

a1 = -1 + 2i;
a2 = -1 - 2i;
a = 1;
b = (a1 + a2);
c = (a1 * a2);

num = 1;
den = [a b c];
s = tf(num, den);
step(s);

然而在 Simulink 中,它总是给我这个错误。我知道有 'simout' 和 'simin' 方法,但我想知道是否可以手动完成?

4

1 回答 1

2

您在 MATLAB 中实现的传递函数与您尝试在 Simulink 中实现的传递函数不同。

在 MATLAB 中,您有 tf = 1/(s^2 - 2s + 5)。在 Simulink 中,您尝试实现 tf = 1/(s^2 -3s + (6-2i))。

具有复杂系数的传递函数实际上没有意义。Simulink 不允许你这样做,而 MATLAB 会抛出各种警告,所有这些都意味着它无法处理你正在尝试做的事情,

>> den = [1 -3 6-2i]
den =
   1.0000 + 0.0000i  -3.0000 + 0.0000i   6.0000 - 2.0000i
>> s = tf(num, den);
Warning: The numerator or denominator of this transfer function has complex-valued
coefficients. 
> In tf (line 360) 
>> step(s)
Warning: The data cannot be plotted because it is not real valued. 
> In wavepack.waveform/draw (line 65)
  In wrfc.plot/draw (line 17)
  In wrfc.plot/init_listeners>LocalRefreshPlot (line 79)
  In DynamicSystem/stepplot (line 131)
  In DynamicSystem/step (line 92)

另请注意,没有诸如siminsimout方法之类的东西。有一个模块用于从 MATLAB 导入信号,另一个模块用于将信号导出回 MATLAB,默认情况下分别读取/写入名为simin/的 MATLAB 变量simout。但它们不是方法。

于 2019-01-03T22:15:45.497 回答