もともと scilab でデータ通信に関する色々な計算をやらせようとしていたのですが、ちょっとくじけていました。
その理由は VCO をどうやって作るのかが分からなかったのが原因でしたが、で、やっと分かったので今回やってみます。

ちなみにこちらのサイトでも解説はしています。が、「Scicos modmunのVCO_cブロック」にあるとなっていて、これが発見できないので自作となりました。
http://ksng.way-nifty.com/blog/2009/12/scilabvco2-1a1d.html

さて、VCO の式は以下のようになります。

イメージ 1
ちょっと乱暴な表現かも知れませんが、fc を中心周波数とする発振器の位相を制御する、その位相は制御信号の積分したものとする、ということです。

これを Xcos で表してみます。

イメージ 2
左の Sin generator は制御信号、それを積分します。その下の定数 0.5 は感度、その下の時計は時刻 t となっていて、これらを計算するブロックが Expression = sin ( 2 * %pi * 32 * (u3 + u1 * u2 ) となります。u1, u2, u3 はブロックの入力端子を上から定義しています。(打ち込む式は sin(2*%pi*32*(u3+u1*u2)) です)
32 というのは、中心周波数で 32Hz としました。後で以前にやったデジタル通信の復調に使うためです。
0.5 というのは、積分の前の信号が 1 になったとき、32Hz が 1.5 (= 1 + 0.5)倍になることを表しています。

シミュレーションで波形を確認してみます。制御信号は、1Hz の正弦波です。

拡大してみると入力信号の最大点で 48Hz、最小点で 16Hz になっているのが確認できます。

イメージ 3
イメージ 4

次回はこれを使って PLL を組んでみます。