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

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


LPF filter(num(s)/den(s)) To workspace


scope や timer、設定は今までと同じです。
シミュレーションを掛けてみると次のような波形が得られます。

まあ、もっともらしいでしょうか...。
念のため、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 結果が得られます。

拡大しておきます。

これを変調された波形に加算してみるわけですが、ちょっと長くなりましたので次回に回します。

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


LPF filter(num(s)/den(s)) To workspace


scope や timer、設定は今までと同じです。
シミュレーションを掛けてみると次のような波形が得られます。

まあ、もっともらしいでしょうか...。
念のため、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 結果が得られます。

拡大しておきます。

これを変調された波形に加算してみるわけですが、ちょっと長くなりましたので次回に回します。