手習ひデジタル信号処理(81) Scilab、ライブラリの.binファイルのミスマッチ?

Joseph Halfmoon

前回Scilab comm_tbxの復調(demodulation)系の関数使ってみたけれど動かない、ダメじゃん、とブー垂れました。その後、ライブラリの内部に立ち入ってちょいと調べたところ一部原因が分かってきました。なんだ、直るじゃん。今回はエラーを回避して動くようになった関数使って、askの変調、復調をやってみます。

※「手習ひデジタル信号処理」投稿順 Indexはこちら

※動作確認に使用させていただいているのは、Scilab 6.1.1(Windows版)です。

当方で使用しておりますのは、以下のバージョンです。Scilab環境からATOMS(Scilabのライブラリ管理ツール?)でインストールをいたしたもの。

Scilab Communication Toolbox 0.3.1

復調系関数、前回の問題点

前回、qpskで変調復調を通して「元に戻す」というHelp記載のサンプルコードを走らせようとして(コピペなのに)、デモジュレータの初期化で落ちました。各種復調方式試してみると、場所は異なるのですが、みなコケました。

今回、その原因調査ということで ask変調の場合の問題を調べてみました。調べた中では一番「いい線までいっている」感じだったので。1か所なんとかしてやれたら最後まで行くじゃん、と。知らんけど。

結論から言えば、ask変調の場合の原因は、ATOMS(Scilabのライブラリ管理ツール)でダウンロードしたライブラリの.binファイルのバージョンか何かが手元の処理系バージョンとミスマッチなんではないかと。ライブラリは.sci形式のソースファイルとは別にScilabの中間形式のバイナリ形式にビルド済の.bin形式を含んでます。通常、自動で.binがロードされますです。ソースは動きそうな雰囲気なので、疑いは.bin(バイナリなので中身は不明)がおかしいように見えました。ask復調で問題になったのは、以下のマクロファイルであったので、

itrp_init.sci

とりあえずこのソースを手動でexec()してみました。binファイルからロードされたマクロなどを無理やり上書きしてしまったということです。

そしたらask復調、動きました。これを見ると、ATOMSからダウンロードした.binファイル類を再生成してやれば他の問題も皆解決?とも思えました。それはまた次回トライね。今回はaskの復調ができていることをまず確認したいと思います。

2023年4月27日追記:.binファイル類に疑いをかけ、ライブラリの再構築を試みました(こちら。)ライブラリ内に再構築用のマクロも準備されていたので実施は簡単でした。しかし再構築しても症状は変わりませぬ。トホホ。。。

まずはデフォルト設定でask変調のサンプル波形作成

復調するには、その入力となる変調された波形が必要です。以下のコードで生成してみました。ここは前回も動作OKだったところ。

mod = mod_init('ask', 1e6, 200e3, 20e3);
b1 = prbs(100);
[mod,x] = mod_process(mod,b1);

サンプリング周波数 1e6 Hz、搬送波周波数 200e3 Hz、シンボルレート 20e3 で、他の設定は「デフォルト値にお任せ」の変調です。テスト用の疑似乱数系列生成のprbs()関数で100点の入力データを生成し、変数 b1に保存。これをmod_process()関数で変調して波形xといたします。

いよいよ復調

前回エラーで落ちていた復調がとおります。えい!(掛け声不要。)

demod = demod_init('ask', 1e6, 200e3, 20e3);
[demod,b2] = demod_process(demod, x);

これにて変数 b2 に復調後のビット列が保存されました。さっそく、b1とb2を比較しようとして気づきました。長さが違います。length

復調あるあるというべきか?連続してデータ列が流れ込んでくる部分は良いのだけれど、出だしとおしまいはプッツンしているのでピッタリ辻褄を合わせることは難しいのでしょう。とりあえず長さが不一致でもプロットはできるます。b1、b2をプロットしてみました。こんな感じ。

clf();
subplot(211)
plot_binary(b1);
xtitle("b1");
subplot(212)
plot_binary(b2);
xtitle("b2");

プロット結果が以下に。上b1が変調前、下b2が復調後です。

plot_b1_b2

変調できてる気がしますなあ。でも、b1とb2、ちょっとズレてないかい。b2の方が頭にゴミが入って遅れてる感じ(当たり前か?)

えいや~で以下のように2個遅れのb2と比較したらば完全一致しました。ここはBER=0ね。まあノイズとか載ってないので当たり前か。compare_sft2_result

なお、2シンボル分シフトせず、そのまま比較してしまうと以下のように39か所も不一致となります。compare_sft0_result

ASKのデフォルト設定での変調波形が?

変復調できて良かった、と思ったのです。しかし変調波形をplotしていて新たな疑問が。変調後の「デジタル」な波形を保持している変数xのプロットが以下に。plot_x_all

100シンボル分を1MHzのサンプリング速度で200kHzの搬送波に載せているので全体をプロットすると上のように潰れて見えませぬ。でもなんだか変?

自分としては、よくある幅が広くなったり狭くなったりする典型的?なASK変調波形を予想していたのだけれども、上記を拡大したら思っていた波形とは違いました。こんな感じ。なんじゃこれ?plot_x_mag

これは、変調関数に戻って、デフォルト設定でなく、自前で設定を変更しながらどう制御したら良いのか調べないとあきまへんな。

手習ひデジタル信号処理(80) Scilab、変調/復調系関数、どこまでOKなの? へ戻る

手習ひデジタル信号処理(82) Scilab、ライブラリ再生成してみたけどダメ。自力更生。へ進む