模仿Matlab / Simulink中继行为

时间:2014-01-07 17:17:19

标签: matlab simulink

我试图用Matlab代码模仿Matlab的Simulink relay块的行为。我的代码如下(不熟悉持久变量?click):

function out = fcn(u,delta)
persistent y;

if isempty(y)
   y = 0;
end

if u >= delta
    y = 1;
elseif u <= -delta
    y = 0;
end

out = y;

当我查看输出I并与实际继电器块进行比较时,我看到: enter image description here

差异来自哪里?这两个块在相同的采样时间内?或者继电器块是否有额外的东西来显示不连续性?

Simulink blockdiagram download

1 个答案:

答案 0 :(得分:0)

我不太确定这个解释,也许有人可以支持它。

MATLAB function阻止不支持过零检测Relay阻止功能。这意味着后者提前知道,当您的正弦值达到阈值delta并相应地将输出设置为正确的时间时。 MATLAB function块需要 2 或更多步骤来检测斜率(分别是阈值的交叉点)。因此,从一个步骤到另一个步骤,它意识到新输出的条件已设置并更新输出,您将获得一个斜坡,而不是一个步骤。

C/C++ S-Function确实有过零检测 - 虽然看似quite complicated