初めての被リンク
半年以上ブログをやっていて、はじめてこのサイトにリンクを貼ってくださる方が現れました。反応をいただくというのは、嬉しいものですね!
それは「くさなぎ君の兄」というサイトさんで、ScicosLabを使った通信モデルを作ろうとされている模様です。
ちなみに、Sicos難しいというエントリーも書かれていました。通信ライブラリ Modnumを入れてはみたものの、どうもうまく動かない、と。
ぱっと見た限り、正常なモデルに見えます。これが動かないなんておかしい・・・という事で、こちらで追試してみました。
やりたい事
Modnumの動作確認をかねて、PNシーケンスを発生させてみよう、という事のようです。
そこで、すっごくシンプルなモデルとしてこんな感じのモデルを作って実行されたようです。
_図1 PNシーケンス発生&確認モデル_
これを実行すると、こんな感じになってしまってワケが分からない、と。
_図2 図1モデルの実行結果_
くさなぎ君の兄様は、「MATLABのが簡単なのかなぁ?」という趣旨のことをおっしゃっておられましたが・・・はい!まちがいなくMATLAB/Simulinkのが簡単です。
仕事でやるのであれば、絶対にMATLAB/Simulink買ったほうがいいと思います。たぶん1年もたたずに投資を回収できることでしょう。
まぁMATLABはさておき、作られているScicosLabモデルそのものにはなんの問題もないはずです。これは気になりますね・・・
気になるポイント
通信はあまり詳しく知らないので何ですが、PNシーケンスとは擬似乱数発生器のはず。
それを「PN Sequence Generator」というのが作ってくれるわけですが、「なんで、出力ベクトル幅が31もあるの???」これが最大の疑問でした。
_図3 PN Sequence Generatorのプロパティ_
普通、出力は1コだけで、それが1ステップ毎に変化する、と。なのに31個も同時に出力してしまっています。うーん??
こういう時、Simulinkであれば31個の信号を個別にDisplayに分けて・・・ということを気軽にひょいひょいとできます。でもScicosLabだとそれがちょっと面倒で、いちいちヤル気をそぐのですよね。。。
そこで、こんなモデルを作って信号をテキストファイルに出力してみました。
_図4 テキストファイルへの出力を追加したモデル_
すると・・・
こんな感じになりました。
0.100E+00 0.100E+01 -0.100E+01 0.100E+01 -0.100E+01 0.100E+01 0.100E+01 0.100E+01 -0.100E+01 0.100E+01 0.100E+01 -0.100E+01 -0.100E+01 -0.100E+01 0.100E+01 0.100E+01 0.100E+01 0.100E+01 0.100E+01 -0.100E+01 -0.100E+01 0.100E+01 0.100E+01 -0.100E+01 0.100E+01 -0.100E+01 -0.100E+01 0.100E+01-0.100E+01 -0.100E+01 -0.100E+01 -0.100E+01
0.200E+00 0.100E+01 -0.100E+01 0.100E+01 -0.100E+01 0.100E+01 0.100E+01 0.100E+01 -0.100E+01 0.100E+01 0.100E+01 -0.100E+01 -0.100E+01 -0.100E+01 0.100E+01 0.100E+01 0.100E+01 0.100E+01 0.100E+01 -0.100E+01 -0.100E+01 0.100E+01 0.100E+01 -0.100E+01 0.100E+01 -0.100E+01 -0.100E+01 0.100E+01-0.100E+01 -0.100E+01 -0.100E+01 -0.100E+01
0.300E+00 0.100E+01 -0.100E+01 0.100E+01 -0.100E+01 0.100E+01 0.100E+01 0.100E+01 -0.100E+01 0.100E+01 0.100E+01 -0.100E+01 -0.100E+01 -0.100E+01 0.100E+01 0.100E+01 0.100E+01 0.100E+01 0.100E+01 -0.100E+01 -0.100E+01 0.100E+01 0.100E+01 -0.100E+01 0.100E+01 -0.100E+01 -0.100E+01 0.100E+01-0.100E+01 -0.100E+01 -0.100E+01 -0.100E+01
0.400E+00 0.100E+01 -0.100E+01 0.100E+01 -0.100E+01 0.100E+01 0.100E+01 0.100E+01 -0.100E+01 0.100E+01 0.100E+01 -0.100E+01 -0.100E+01 -0.100E+01 0.100E+01 0.100E+01 0.100E+01 0.100E+01 0.100E+01 -0.100E+01 -0.100E+01 0.100E+01 0.100E+01 -0.100E+01 0.100E+01 -0.100E+01 -0.100E+01 0.100E+01-0.100E+01 -0.100E+01 -0.100E+01 -0.100E+01
0.500E+00 0.100E+01 -0.100E+01 0.100E+01 -0.100E+01 0.100E+01 0.100E+01 0.100E+01 -0.100E+01 0.100E+01 0.100E+01 -0.100E+01 -0.100E+01 -0.100E+01 0.100E+01 0.100E+01 0.100E+01 0.100E+01 0.100E+01 -0.100E+01 -0.100E+01 0.100E+01 0.100E+01 -0.100E+01 0.100E+01 -0.100E+01 -0.100E+01 0.100E+01-0.100E+01 -0.100E+01 -0.100E+01 -0.100E+01
ははーん、なるほどなるほど。31本の信号が出力されていて、それが全ステップで同じである、と。それでああいう波形になるんですね。
たぶん氷解
擬似乱数発生装置とはいえ、しょせんは擬似。周期というものがあるはずです。
ひょっとして、デフォルト設定のPN Sequence Generatorは、周期=31なんじゃないか?と思いました。レジスタ5個しかありませんから、最大でも32種類の状態しかもちません。オールネガティブを除けば31種類。うん、計算もあってます。
そこで、「Vector of Size of Outputs」を1にしてみました。すると、こんな波形が・・・
_図5 「Vector of Size of Outputs」=1に対する結果_
おぉ!乱数っぽいですね!
この時の出力データは、こうなりました。
0.100E+00 0.100E+01
0.200E+00 -0.100E+01
0.300E+00 0.100E+01
0.400E+00 -0.100E+01
0.500E+00 0.100E+01
0.600E+00 0.100E+01
0.700E+00 0.100E+01
0.800E+00 -0.100E+01
0.900E+00 0.100E+01
0.100E+01 0.100E+01
ここで、幅=31の時のデータと見比べてみましょう。
1、-1、1、-1、1、1、1、・・・
うーん、一致しています!きっとこれが原因だったのですね。
つまり、
幅=31の時:発生させた乱数をいっきに31個出す
幅=1の時:発生させた乱数を1つずつ出す
という事だったんですね。たまたま周期が31であったために、幅=31のときは全く変化がないような波形になってしまっていた、と。
これくらいの事ドキュメントに書いておいてくれればいいのに・・・Modnumめ!
でもまぁ、タダだから文句もいえませんね。。。
まとめ
- 初めての被リンクうれしいなぁ!
- PN Sequence Generatorの「Vector of Size of Outputs」は1にしておくと良いかも
- Modnumのドキュメントはプアだけれど、とりあえずちゃんと動いてはいる模様