初めての被リンク
半年以上ブログをやっていて、はじめてこのサイトにリンクを貼ってくださる方が現れました。反応をいただくというのは、嬉しいものですね!
それは「くさなぎ君の兄」というサイトさんで、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のドキュメントはプアだけれど、とりあえずちゃんと動いてはいる模様
吉武さん、はじめまして。リンクされてゐることに今日気付きました。PN Sequence Generatorの使ひ方を研究してくださりありがたうございました。例の変数を1に設定するとさうなりますね。
’Vector of Size of outputs’が31といふのは、符号の一周期を一度に出力する意味とは思ひも寄りませんでした。そんな設定が初期設定として入ってゐるのは不思議です。出力をダンプすることは考へましたがどのブロックを使ふのか調べるのが面倒になり止めました。
ただ他の三つの変数で符号の長さは決まりますので、このパラメーターを追及してもよかったと思ひました。
今回はScicosを追及せず通常のスクリプトで処理しました。過去に同じことをMATLABのスクリプトでやりましたのでそれを移植しました
。
吉武さんのサイトは参考にさせていただきます。
はじめまして!コメントありがとうございます。
’Vector of Size of outputs’の初期値は、本当に謎ですね。不思議です。
スクリプトによる処理の記事、拝見させていただきました。素晴らしいです。
MATLABは細かいところまで良く出来ているのに対し、Scicosはイマイチで色々とつまづきの石があるのですね。
しかし、くさなぎ君の兄さんが記事の中で、MATLABとScicosはどうちがって、どのように対処すれば良いのか明確に説明していただいていますので、通信は門外漢の私でも「なるほど!」と納得する事ができました。
これからも、くさなぎ君の兄さんの記事を楽しみにしています。