ブロックを積みながら(161) Scilab/Xcos、ゼロクロス検出パレット

Joseph Halfmoon

今回は「ゼロクロス検出」です。連続量の変化を見張っていて「ゼロ」をまたぐところを捕まえてイベントを発生するっと。当然発生したイベントは「とびとびなタイミング」なので「不連続」です。この辺深く考えると夜も眠れなくなりそうなのでやめときます。それにね、よく動作が分からんブロックもあるのだよね、ここには。闇?

※「ブロックを積みながら」投稿順 index はこちら

※動作確認にはWindows 11のパソコン(64bit)上にインストールしたScilabの以下バージョンを使用しています。

Scilab 2024.0.0

ゼロクロス検出パレット

Helpページが以下に。

Zero crossing detection palette

パレットの全貌(といったってブロック4個だけれども)が以下に。zeroCrossPalette

今回練習してみるのは「- to +」「+ to -」とブロックに表記してある以下の2つのブロックとその名もズバリのZCROSS_fブロックの3つといたします。

    • NEGTOPOS_f
    • POSTONEG_f
    • ZCROSS_f

NEGTOPOS_f、POSTONEG_fは、お名前のとおり、入力が負から正、または正から負に向かってゼロクロスするときにイベントを発生するもの。

ZCROSS_fブロックは「ともかくゼロをまたげば」イベント発生してくれるものみたいです。どうもZCROSS_fブロックにはもっと秘めたるパワーがあるみたいなのだけれどもそこを引き出す使い方が良くわかりません。

GENERAL_fというお名前のブロックを使うと、1個のブロックから複数本のイベントを引き出せるみたいなのですが、その設定方法がサッパリ分かりません。Helpファイルにも何も書いてないです。今回は見送り。手抜きだな。

「- to +」「+ to -」の動作

確認用に作成したフローが以下です。zeroCrossFlow

ゼロクロス検出の対象となる入力信号は正弦波です。当然連続的な信号ね。一方ゼロクロスで発生したイベントで「捕まえる」のはランプ波形(これまた連続)です。一方的に増加しつづけるので、「捕まったとき」の値を読めばタイミングも知れます。「捕まえる」ために「S/H」サンプル・アンド・ホールドを使ってます。なお、ソルバ様が「積分」を拒否らないようにDUMMY CLSSブロックを置いてあります。この辺はXcosの内輪の事情ね。知らんけど。

念のため、正弦波の設定が以下に。gensinSetting

ランプ波形の設定が以下に。RampSetting

そして観察された波形が以下です。

zeroCrossWave赤色の方が「+ to -」の動作、黄緑の方が「- to +」の動作です。それぞれ初回のイベント発生位置に縦の矢印を書き込んであります。

どっちのエッジでもこいや

さて上記ではライジングなのかフォーリングなのかエッジ指定でしたが、どっち方向に横切ってもイベント発生してくれるのがZCROSS_fです。練習フローが以下に。zeroCrossFlow2

その動作が以下に。zeroCrossWave2

最初のイベントは立下り、2回目のイベントは立ち上がりで発生しているようです。もっと高度な使い方は分からんよな、何も説明ないし。ソースを読めってことかい。。。

ブロックを積みながら(160) Scilab/Xcos、整数(Integer)パレットその2 へ戻る

ブロックを積みながら(162) Scilab/Xcos、信号処理、暗示的パレット へ進む