scilab によるデジタル伝送をモデリングしていますが、今度はこれにノイズを入れてみて、正しく検出できるのかどうか確認してみます。といってもどのようなノイズを入れれば、より現実に近いのかは私はよく分かっていません。とりあえずもっともらしそうなものを入れてみます。

イメージ 1
構成は簡単で、ランダムノイズを発生させて、フィルタで低域のみを取り出して、33Hz(32Hzの近傍)とかけ算するだけです。AM変調の場合は、ランダムノイズの方にバイアスを掛けるのですが、やると搬送波が強く出過ぎる傾向があるからやっていません。
各パラメータは以下の通りです。

Random Generator                                  Sinusoid Generator
イメージ 2イメージ 3

LPF filter(num(s)/den(s))                                    To workspace
イメージ 4イメージ 5

scope や timer、設定は今までと同じです。
シミュレーションを掛けてみると次のような波形が得られます。
イメージ 6
まあ、もっともらしいでしょうか...。
念のため、FFT を掛けておきましょう。
ノイズデータは workspace で扱えるようになっていますので、コードは次のようになります。

//FFT for noisewave

// Xcosで生成したデータをコンソールで扱えるようにする。
noisedata=(getfield(3,noisewave))'

time_count=getfield(4,noisewave)
cycle=time_count(2)-time_count(1)
//サンプル間隔を検出

N=size(noisedata,'c')
f=1/cycle*(0:(N/2))/N
//サンプリング周期とデータ数からFFTマップに対する横軸の値を算出
//1サンプル周期の逆数掛けるサンプル数で最大周波数を計算

n=size(f,'*')

scf(7);
clf(7)
fdata=fft(noisedata)
plot2d(f,abs(fdata(1:n)))


save('BPSKnoise',noisewave,noisedata)

一応、データはファイルにセーブしておきます。

このコードを実行すると以下の FFT 結果が得られます。

イメージ 7
拡大しておきます。
イメージ 8
これを変調された波形に加算してみるわけですが、ちょっと長くなりましたので次回に回します。