前回は、BPSK 信号を PLL を使って周波数、位相ロックを掛けながら(といっても最初から合っている状態でしたが)復調する、ということをやってみました。
今回は、その BPSK 信号が百鬼夜行、魑魅魍魎うごめく(笑)伝送経路(通常の電波でしょうか)を通ってノイズだらけになったと想定して、PLL を使って復調してみます。
Xcos でのブロックは次の通りです。前回との違いは、左下にノイズ印加回路があるところです。
まずこのブロックを動かす前に、次のコマンドを実行して作成済みのデータを読み込んでおきます。
-->load('BPSKdata')
-->load('BPSK')
-->load('BPSKnoise')
実行したら、次のような結果が出ます。ノイズなしの状態と比較しています。
ノイズ付きだとすごい波形に見えます。
ノイズなし

ノイズ付き

ではこのときの 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回実行してデータを得ます。
結果は以下の通りです。
ノイズがある方がスペクトラムが広がっているのが分かります。
ノイズなし ノイズ付き


今回もただやってみただけで終わってしまいましたが、もう少し分析的に何かやれないか試行錯誤中です。
今回は、その BPSK 信号が百鬼夜行、魑魅魍魎うごめく(笑)伝送経路(通常の電波でしょうか)を通ってノイズだらけになったと想定して、PLL を使って復調してみます。
Xcos でのブロックは次の通りです。前回との違いは、左下にノイズ印加回路があるところです。
まずこのブロックを動かす前に、次のコマンドを実行して作成済みのデータを読み込んでおきます。
-->load('BPSKdata')
-->load('BPSK')
-->load('BPSKnoise')
実行したら、次のような結果が出ます。ノイズなしの状態と比較しています。
ノイズ付きだとすごい波形に見えます。
ノイズなし

ノイズ付き

ではこのときの 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回実行してデータを得ます。
結果は以下の通りです。
ノイズがある方がスペクトラムが広がっているのが分かります。
ノイズなし ノイズ付き


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