2014-01-07 143 views
1

我試圖模仿Matlab的Simulink的relay塊的behavoir只用Matlab代碼。我的代碼如下(不熟悉持續可變click):模仿Matlab/Simulink仿真繼電器behavoir

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

+0

多少採樣時間繼電器你是編程?我假設你看到了對命令的迴應。 – NKN

+0

的'MATLAB function'塊inherts求解器的採樣時間。 –

回答

0

我不太肯定這樣的解釋,也許有人可以支持它。

MATLAB function Block不支持過零檢測Relay Block有。這意味着後者事先知道,當你的正弦達到閾值delta,並設置相應的輸出,以正確的時間。所述MATLAB function塊需要或多個步驟,以檢測斜率(分別爲閾值交叉點)。因此,從一步到另一步是意識到新輸出的條件設定和更新輸出,你會得到一個斜坡,而不是一步。

C/C++ S-Function s do have 零交叉檢測 - 雖然它似乎quite complicated

+0

這可能確實是這樣。起初沒有想到這一點。希望有人能證實這一點,但我現在的猜測是你是正確的。 –