最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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

AWGN チャネルにおける QAM 信号の位相と周波数のオフセットを補正します。著しいオフセットの補正には、おおまかな周波数推定器とキャリア同期装置の System object™ を使用します。

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

fs = 10000;           % Sample rate (Hz)
sps = 4;              % Samples per symbol
M = 16;               % Modulation order
k = log2(M);          % Bits per symbol

AWGN チャネル System object™ を作成します。

awgnChannel = comm.AWGNChannel('EbNo',15,'BitsPerSymbol',k,'SamplesPerSymbol',sps);

パルス整形フィルターの作成

txFilter = comm.RaisedCosineTransmitFilter(...
    'OutputSamplesPerSymbol',sps);
rxFilter = comm.RaisedCosineReceiveFilter(...
    'InputSamplesPerSymbol',sps, ...
    'DecimationFactor', sps);

コンスタレーション ダイアグラム オブジェクトを作成し、搬送波同期の効果を可視化します。

constDiagram = comm.ConstellationDiagram(...
    'ReferenceConstellation',qammod(0:M-1,M), ...
    'XLimits',[-5 5],'YLimits',[-5 5]);

QAM 租周波数推定器を作成し、周波数オフセットを大まかに推定します。これは、キャリア同期装置に渡される信号の周波数オフセットを減らすために使用します。この場合は、10 Hz 以内の周波数推定で十分です。

coarse = comm.QAMCoarseFrequencyEstimator('SampleRate',fs, ...
    'FrequencyResolution',10);

キャリア同期装置 System object を作成します。周波数補正が大まかなため、正規化帯域幅が低い値に設定されていても、キャリア同期装置はすぐに収束します。正規化帯域幅の値が低いほどより良く補正できます。

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

位相オフセット オブジェクトと周波数オフセット オブジェクトを作成します。pfo を使用して、それぞれ 30 度の位相と 250 Hz の周波数オフセットを導入します。おおまかな周波数推定器の出力を使用して受信した信号のオフセットを補正するには、pfc を使用します。

pfo = comm.PhaseFrequencyOffset(...
    'FrequencyOffset',250,...
    'PhaseOffset',30,...
    'SampleRate',fs);

pfc = comm.PhaseFrequencyOffset('FrequencyOffsetSource','Input port', ...
    'SampleRate',fs);

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

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

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

rxSig = awgnChannel(pfo(txSig));

周波数オフセットを推定し、PFC を使用してそれを補正します。出力 syncCoarse のコンスタレーション ダイアグラムをプロットします。ダイアグラムの表示が螺旋状であることから、位相と周波数のオフセットが補正されていないことがわかります。

freqEst = coarse(rxSig);
syncCoarse = pfc(rxSig,-freqEst);
constDiagram(syncCoarse)

キャリア同期装置オブジェクトを使用して、細かな周波数補正を適用します。

rxData = rxFilter(fine(syncCoarse));

最後の 1000 個のシンボルのコンスタレーション ダイアグラムを表示します。キャリア同期装置が解に収束していることから、これらのシンボルが基準コンスタレーションに合うことがわかります。

release(constDiagram)
constDiagram(rxData(9001:10000))