前回Scilab comm_tbxのエラーがでる一部関数を個別にソースからロードすると実行できるようになりました。そこで生成済のライブラリのバイナリに疑いをかけたのです。しかし今回ライブラリの再生成実行、大外れでした。再生成しても挙動は同じ。その上、一部関数の挙動も怪しいので仕方なく自力更生。大丈夫か?
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※動作確認に使用させていただいているのは、Scilab 6.1.1(Windows版)です。
当方で使用しておりますcomm_tbxは、以下のバージョンです。Scilab環境からATOMS(Scilabのライブラリ管理ツール?)でインストールをいたしたもの。
Scilab Communication Toolbox 0.3.1
ライブラリの再構築方法とその結果
ライブラリのバイナリファイルの再構築の方法自体は簡単でした。Windows上にインストールした場合、ATOMSからインストールされるcomm_tbxのファイル類は以下のパスに存在すると思います。
ユーザフォルダ\AppData\Roaming\Scilab\scilab-6.1.1\atoms\x64\comm_tbx\0.3.1\
このフォルダ配下に macrosというフォルダがあり、その配下にマクロファイルを収めたサブフォルダが並んでます。macrosの直下にはいくつかの実行ファイルがあります。その中にクリーンナップ用のプログラムと、再ビルド用のプログラムの両方がありました。
-
- cleanmacros.sce
- buildmacros.sce
cleanmacros.sce を実行すると配下のサブフォルダ内の全ての *.BIN と lib を消去します。そして buildmacros.sce を実行すると BIN と lib を再生成してくれます。なお、buildmacros.sce 内でライブラリ名として以下の変数を参照しているので事前に定義しておかねばならないようです。
TOOLBOX_NAME = “comm_tbx”
まあ、これで疑いをかけたライブラリの旧BINファイルを一掃し、新規生成できました。念のためBINファイルをコンペアすると、ところどころ変更されているみたいです。
しかし、再生成後でもまったく同じエラーで同じところで落ちます
個別に関数をロードするとエラー回避できるところも同じ。なんでじゃ?
どんどん深みにハマっていくので、この辺で諦めたいと思います。後は自力更生あるのみ。その方が勉強になるし。
まずはASKの変調関数から作ってみた
ASKの変調はエラーこそ出ないものの、こちらの期待と異なる波形が出てきて怪しかったです。ほんまにASK?
そこで、自前の変調関数をこさえてみました。こんな感じ。
// generate ASK modulated signal // Fs: sampling frequency [Hz] // Fc: carrier frequency [Hz] // Fsym: symbol rate [baud] // m: modulation factor [0-1] // b: test sequence function askwave=genASK(Fs, Fc, Fsym, m, b) nSym=length(b); mb=1.0; ma=(1-m)/(1+m); mw = []; nLen=Fs/Fsym t=0:1/Fs:nSym/Fsym; Omega=2*%pi*Fc; cr=sin(Omega*t); for n=1:nSym if b(n)==0 then mwt=ones(1,nLen) * ma; else mwt=ones(1,nLen) * mb; end mw=[mw mwt]; end askwave=mw .* cr(1:nSym*nLen); endfunction
引数は以下のとおりです
-
- サンプリング周波数[Hz]
- 搬送波周波数[Hz]
- シンボルレート[baud、sps]
- 変調指数、0から1の間
- テスト用のビット列
上記を与えると、変調された波形を返してきます。大丈夫か?
実験結果
以下のようにすると、サンプリング周波数1MHz、搬送波周波数100kHz、シンボルレート10ksps、変調指数1.0で、20ビット分の疑似乱数列を変調した波形を返してくるはず。prbs()はcomm_tbx内の関数をありがたく使わせていただいとります。
ask10=genASK(1e6,1e5,1e4,1.0,prbs(20)); clf(); plot(ask10);
変調指数ってこんな感じで良かったんだっけ、今頃言うなよ、自分。