我试图用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并与实际继电器块进行比较时,我看到:
差异来自哪里?这两个块在相同的采样时间内?或者继电器块是否有额外的东西来显示不连续性?
答案 0 :(得分:0)
我不太确定这个解释,也许有人可以支持它。
MATLAB function
阻止不支持过零检测,Relay
阻止功能。这意味着后者提前知道,当您的正弦值达到阈值delta
并相应地将输出设置为正确的时间时。 MATLAB function
块需要 2 或更多步骤来检测斜率(分别是阈值的交叉点)。因此,从一个步骤到另一个步骤,它意识到新输出的条件已设置并更新输出,您将获得一个斜坡,而不是一个步骤。
C/C++ S-Function
确实有过零检测 - 虽然看似quite complicated。