Main Content

周波数オフセット補正のためのキャリア同期装置の減衰係数の調整

キャリア同期装置オブジェクトを使用して、周波数オフセットの補正を試行します。同期装置の減衰係数を増やして、オフセットが補正されたかどうかを判断します。

変調次数、サンプル レート、周波数オフセットおよび S/N 比の各パラメーターを設定します。

M = 8;
fs = 1e6;
foffset = 1000;
snrdb = 20;

変調信号に周波数オフセットを導入する位相周波数オフセット オブジェクトを作成します。constellation diagram オブジェクトを作成します。

pfo = comm.PhaseFrequencyOffset('SampleRate',fs, ...
    'FrequencyOffset',foffset);
constDiagram = comm.ConstellationDiagram( ...
    'ReferenceConstellation',pskmod(0:M-1,M,pi/M));

周波数オフセットを補正するキャリア同期装置オブジェクトを作成します。

carriersync = comm.CarrierSynchronizer('Modulation','8PSK', ...
    'DampingFactor',0.05,'NormalizedLoopBandwidth',0.01);

主処理ループには以下のステップが含まれます。

  • ランダム データを生成します。

  • 8-PSK 変調を適用します。

  • 周波数オフセットを導入します。

  • AWGN チャネルを通して信号を渡します。

  • 周波数オフセットを補正します。

  • コンスタレーション ダイアグラムを表示します。

for k = 1:200
    data = randi([0 M-1],1000,1);
    modSig = pskmod(data,M);
    txSig = pfo(modSig);
    rxSig = awgn(txSig,snrdb);
    syncOut = carriersync(rxSig);
    constDiagram(syncOut)
end

コンスタレーション点が明確に判別できないことから、キャリア同期装置が周波数オフセットを補正できないことが分かります。

関数 info を使用して、正規化されたプルイン レンジ、最大周波数同期遅延および最大位相同期遅延を求めます。

syncInfo = info(carriersync)
syncInfo = struct with fields:
    NormalizedPullInRange: 0.0044
    MaxFrequencyLockDelay: 78.9568
        MaxPhaseLockDelay: 130

正規化されたプルイン レンジをラジアンからサイクルに変換します。正規化周波数オフセットをプルイン レンジと比較します。

[foffset/fs syncInfo.NormalizedPullInRange/(2*pi)]
ans = 1×2
10-3 ×

    1.0000    0.7071

オフセットがプルイン レンジより大きくなっています。これが、キャリア同期装置が周波数オフセットの補正に失敗した理由です。

同期装置の減衰係数を 0.707 に変更します。

carriersync.DampingFactor = 0.707;

主処理ループを繰り返します。

for k = 1:200
    data = randi([0 M-1],1000,1);
    modSig = pskmod(data,M);
    txSig = pfo(modSig);
    rxSig = awgn(txSig,snrdb);
    syncOut = carriersync(rxSig);
    constDiagram(syncOut)
end

今度は観測可能な 8 つのクラスターがあり、周波数オフセットが補正されたことを示しています。

新しいプルイン レンジを特定します。正規化オフセットはプルイン レンジより小さくなります。これが、キャリア同期装置がオフセットを補正できた理由です。

syncInfo = info(carriersync);
[foffset/fs syncInfo.NormalizedPullInRange/(2*pi)]
ans = 1×2

    0.0010    0.0100