前回は、BPSK 信号を PLL を使って周波数、位相ロックを掛けながら(といっても最初から合っている状態でしたが)復調する、ということをやってみました。
今回は、その BPSK 信号が百鬼夜行、魑魅魍魎うごめく(笑)伝送経路(通常の電波でしょうか)を通ってノイズだらけになったと想定して、PLL を使って復調してみます。

Xcos でのブロックは次の通りです。前回との違いは、左下にノイズ印加回路があるところです。
まずこのブロックを動かす前に、次のコマンドを実行して作成済みのデータを読み込んでおきます。

-->load('BPSKdata')

-->load('BPSK')

-->load('BPSKnoise')

実行したら、次のような結果が出ます。ノイズなしの状態と比較しています。
ノイズ付きだとすごい波形に見えます。

ノイズなし

イメージ 1

ノイズ付き

イメージ 2
ではこのときの PLL で生成された VCO の周波数スペクトラムを見てみます。

スクリプトは以下のようです。
また、「To workspace」は以下のように変数名を「BPSKclocknoise0」としておきます。


//BPSKクロックをXcosからexportしてFFT表示をする。

BPSKclkn=getfield(3,BPSKclocknoise0)
BPSKclkn1=BPSKclkn'
//転置行列に変更
time_value=getfield(4,BPSKclocknoise0)
cycle=time_value(2)-time_value(1)
//サンプル間隔を検出

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

n=size(f,'*')

scf(1);
clf(1)
plot(time_value,BPSKclkn1)
//グラフ1に波形
scf(2);
clf(2)
BCKn=fft(BPSKclkn1)
plot2d(f,abs(BCKn(1:n)))
//グラフ2にFFT結果

これをノイズのところに付いているゲインブロックを「0」(ノイズなし)と「1」で2回実行してデータを得ます。
結果は以下の通りです。
ノイズがある方がスペクトラムが広がっているのが分かります。

ノイズなし                           ノイズ付き
イメージ 3イメージ 4

今回もただやってみただけで終わってしまいましたが、もう少し分析的に何かやれないか試行錯誤中です。