Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

おおまかな補正と細かな補正を使用した周波数オフセットの補正

キャリア同期装置を使用して、ノイズを含む QAM 信号の位相および周波数オフセットを補正します。次に、キャリア同期装置とおおまかな周波数補償器の両方を使用して、これらのオフセットを補正します。

例のパラメーターを設定します。

fs = 10000;   % Symbol rate (Hz)
sps = 4;      % Samples per symbol
M = 16;       % Modulation order
k = log2(M);  % Bits per symbol
EbNo = 20;    % Eb/No (dB)
SNR = convertSNR(EbNo,"ebno",BitsPerSymbol=k,SamplesPerSymbol=sps);

constellation diagram オブジェクトを作成し、オフセット補正手法の効果を可視化します。コンスタレーション ダイアグラムを指定して、最後の 4000 個のサンプルのみを表示します。

constdiagram = comm.ConstellationDiagram( ...
    'ReferenceConstellation',qammod(0:M-1,M), ...
    'SamplesPerSymbol',sps, ...
    'SymbolsToDisplaySource','Property', ...
    'SymbolsToDisplay',4000, ...
    'XLimits',[-5 5], ...
    'YLimits',[-5 5]);

400 Hz の周波数オフセットと 30 度の位相オフセットを導入します。

phaseFreqOffset = comm.PhaseFrequencyOffset( ...
    'FrequencyOffset',400, ...
    'PhaseOffset',30, ...
    'SampleRate',fs);

ランダム データ シンボルを生成して 16-QAM 変調を適用します。

data = randi([0 M-1],10000,1);
modSig = qammod(data,M);

レイズド コサイン フィルター オブジェクトを作成し、変調された信号をフィルター処理します。

txfilter = comm.RaisedCosineTransmitFilter( ...
    'OutputSamplesPerSymbol',sps, ...
    'Gain',sqrt(sps));
txSig = txfilter(modSig);

位相オフセットと周波数オフセットを適用し、次に AWGN チャネルを通して信号を渡します。

freqOffsetSig = phaseFreqOffset(txSig);
rxSig = awgn(freqOffsetSig,SNR);

キャリア同期装置を使用して信号に細かな周波数補正を適用します。

fineSync = comm.CarrierSynchronizer( ...
    'DampingFactor',0.7, ...
    'NormalizedLoopBandwidth',0.005, ...
    'SamplesPerSymbol',sps, ...
    'Modulation','QAM');
rxData = fineSync(rxSig);

最後の 4000 個のシンボルのコンスタレーション ダイアグラムを表示します。

constdiagram(rxData)

収束時間があるとしても、プロットの表示が螺旋状なことから、キャリア同期装置がまだこの大きな量の周波数オフセットの補正を終えていないことが分かります。400 Hz のオフセットはサンプル レートの 1% です。

キャリア同期装置の前に挿入されたおおまかな周波数補償器を使用して、この処理を繰り返します。

おおまかな周波数補償器を作成し、管理しやすいレベルまで周波数オフセットを減少させます。

coarseSync = comm.CoarseFrequencyCompensator( ...
    'Modulation','QAM', ...
    'FrequencyResolution',1, ...
    'SampleRate',fs*sps);

受信信号をおおまかな周波数補償器に渡し、次にキャリア同期装置に渡します。

syncCoarse = coarseSync(rxSig);
rxData = fineSync(syncCoarse);

おおまかな周波数補正と細かな周波数補正の後に信号のコンスタレーション ダイアグラムをプロットします。受信データが基準コンスタレーションに一致するようになりました。

constdiagram(rxData)

参考

|