2016-07-13 20 views
0

ピーク検出:Simulinkブロックまたはブロックのグループが必要です。入力ストリームの各値を前と後の値と比較してください。以前の値より大きく、次の値より大きい場合は、この値を出力します。Simulinkのmatlab関数ブロック内のアナログ入力の前と後の値

私はMatlabファンクションブロックで処理しようとしましたが、必要な遅延を行うことができません。私が試した限り、以前の値を保存することはできません。

どうすればよいですか?

アップデート:もう一つの例 コメントへの応答では、私は離散的な値を扱っていた場合の解決策が役立ちます示唆しました。私は特定のシナリオを実装するためのMATLAB関数を実装する必要が A・シュミットトリガー enter image description here

:だからここに私の必要性を表現するための別の例です。私は、次の enter image description here

のようなものを持ってしまいます私は

if u >= 2 
    y = 3; 
elseif (u < 2) 
    y = -3; 

ような何かを行うことができます。しかし、私は入力の前回値(ヒステリシス)を見て必要があるとして、まだこれは正しくない、他の賢明

PS:アナログでは以前の値と呼ばれるものは何もないことはわかっていますが、Simulinkはアナログ値を離散値として扱っていることがわかります。だから私はおそらくそれを行う方法があると思う。私はあなたのコードが1つのマイナーな間違いを除いて罰金だと思う

+1

[Unit Delay](http://de.mathworks.com/help/simulink/slref/unitdelay.html)ブロックを2回使用するとどうなりますか? –

+1

MATLAB Functionブロック内の 'persistent'変数を使用して以前の値を保存するか、または@MatthiasWが言ったように、ブロックの外に2つの単位遅延を使用し、既に遅延した信号をブロックに供給することができます。 –

+0

答えをありがとう、しかし、永続的な変数や遅延を使用して私は離散値を使用しているだけ便利です。連続値の場合、それは役に立ちません。上記の私の更新を確認してください。 – KhaledMaged

答えて

1

if u > 2 
y = 3; 
elseif u < -2 
y = -3; 
else 
y = u; 

変数「U」のelseifを一部に-2(上閾値が、負の符号を持つ)と比較して取得する必要があります

お手伝い願います!

関連する問題