Main Content

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

comm.CoarseFrequencyCompensator

PAM、PSK、または QAM 信号の周波数オフセットの補正

説明

comm.CoarseFrequencyCompensator System object™ は、開ループ方法により、受信信号の周波数オフセットを補正します。

PAM、PSK または QAM 信号の周波数オフセットを補正するには、次を行います。

  1. comm.CoarseFrequencyCompensator オブジェクトを作成し、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とはを参照してください。

作成

説明

coarseFreqComp = comm.CoarseFrequencyCompensator は、おおまかな周波数オフセット補償器 System object を作成します。このオブジェクトは、開ループ方法により、受信信号の搬送波周波数オフセットを推定して補正します。推定アルゴリズムのオプションの詳細については、アルゴリズムを参照してください。

coarseFreqComp = comm.CoarseFrequencyCompensator(Name,Value) は、名前と値の引数を 1 つ以上使用してプロパティを指定します。たとえば、Modulation='QPSK' は、直交位相偏移変調変調を指定します。

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release を使用します。

プロパティが "調整可能" の場合、その値をいつでも変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。

変調タイプ。次のいずれかとして指定します。

  • 'BPSK' – 2 位相偏移変調

  • 'QPSK' – 直交位相偏移変調

  • 'OQPSK' – オフセット直交位相偏移変調

  • '8PSK' – 8 位相偏移変調

  • 'PAM' – パルス振幅変調

  • 'QAM' – 直交振幅変調

データ型: char | string

周波数オフセットの推定に使用されるアルゴリズム。'FFT-based' または 'Correlation-based' として指定します。

依存関係

このプロパティを有効にするには、Modulation'BPSK''QPSK''8PSK'、または 'PAM' に設定します。次の表は、変調タイプと推定アルゴリズムの有効な組み合わせを示します。

変調FFT ベースのアルゴリズム相関ベースのアルゴリズム
BPSK, QPSK, 8PSK, PAMありあり
OQPSK, QAMありなし

HDL 実装や、その他の FFT の使用を避けるべき状況では、相関ベースのアルゴリズムを使用します。

データ型: char | string

オフセット周波数推定の周波数分解能 (ヘルツ単位)。正のスカラーとして指定します。このプロパティは、スペクトル解析の実行に使用される FFT 長を設定します。この値は、サンプル レートより小さくなければなりません。

データ型: double

最大測定可能周波数オフセット (ヘルツ単位)。正のスカラーとして指定します。

このプロパティの値は、fsamp / M 未満でなければなりません。詳細については、相関ベースの推定を参照してください。

依存関係

このプロパティを有効にするには、Algorithm プロパティを 'Correlation-based' に設定します。

データ型: double

秒あたりのサンプル単位のサンプル レート。正のスカラーとして指定します。

データ型: double

シンボルあたりのサンプル数。4 以上の偶数の正の整数として指定します。

依存関係

このプロパティを有効にするには、Modulation'OQPSK' に設定します。

使用法

説明

y = coarseFreqComp(x) は、入力信号の搬送波周波数オフセットを補正する信号を返します。

[y,estimate] = coarseFreqComp(x) は、周波数オフセットのスカラー推定値を返します。

入力引数

すべて展開する

入力信号。列ベクトルで指定します。

データ型: single | double
複素数のサポート: あり

出力引数

すべて展開する

補正された出力信号。入力 x と同じ次元とデータ型をもつ複素数列ベクトルとして返されます。

周波数オフセットの推定値。スカラーとして返されます。

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。

release(obj)

すべて展開する

infoおおまかな周波数補償器の特性情報
cloneSystem object の複製
isLockedSystem object が使用中かどうかの判定
stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

ノイズを含む QPSK 信号に与えられる 4 kHz の周波数オフセットを補正します。

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

nSym = 2048;       % Number of input symbols
sps = 4;           % Samples per symbol
nSamp = nSym*sps;  % Number of samples
fs = 80000;        % Sampling frequency (Hz)

ルート レイズド コサイン送信フィルターを作成します。

txfilter = comm.RaisedCosineTransmitFilter( ...
    RolloffFactor=0.2, ...
    FilterSpanInSymbols=8, ...
    OutputSamplesPerSymbol=sps);

位相周波数オフセット オブジェクトを作成し、4 kHz の周波数オフセットを導入します。

freqOffset = comm.PhaseFrequencyOffset( ...
    FrequencyOffset=-4000, ...
    SampleRate=fs);

おおまかな周波数補償器オブジェクトを作成し、オフセットを補正します。

freqComp = comm.CoarseFrequencyCompensator( ...
    Modulation="qpsk", ...
    SampleRate=fs, ...
    FrequencyResolution=1);

QPSK シンボルを生成し、変調されたデータをフィルター処理して、信号を AWGN チャネル経由で渡し、さらに周波数オフセットを適用します。

data = randi([0 3],nSym,1);
modData = pskmod(data,4,pi/4);
txSig = txfilter(modData);
rxSig = awgn(txSig,20,"measured");
offsetData = freqOffset(rxSig);

おおまかな周波数補償器を使用して周波数オフセットを補正します。フィルター処理により有用なスペクトルのエネルギーが抑えられるため、周波数オフセットが大きい場合は、受信フィルター処理の前におおまかな周波数補正を適用すると効果的です。

[compensatedData,estFreqOffset] = freqComp(offsetData);

周波数オフセットの推定値を表示します。

estFreqOffset
estFreqOffset = -3.9999e+03

おおまかな周波数補償器 System object に関する情報を返します。FFT 長を求めるには、オブジェクト関数 info を呼び出す前におおまかな周波数補償器 System object を呼び出さなければなりません。

freqCompInfo = info(freqComp)
freqCompInfo = struct with fields:
    FFTLength: 131072
    Algorithm: 'FFT-based'

スペクトル アナライザー オブジェクトを作成して、オフセット信号と補正された信号のスペクトルをプロットします。補正された信号の中心周波数が 0 Hz であり、オフセット信号の中心周波数が -4 kHz であることを確認します。

sa = spectrumAnalyzer( ...
    SampleRate=fs, ...
    ShowLegend=true, ...
    ChannelNames=["Offset Signal","Compensated Signal"]);
sa([offsetData compensatedData])

キャリア同期装置を使用して、ノイズを含む 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)

アルゴリズム

すべて展開する

参照

[1] Luise, M., and R. Reggiannini. “Carrier Frequency Recovery in All-Digital Modems for Burst-Mode Transmissions.” IEEE® Transactions on Communications, Vol. 43, No. 2/3/4, Feb. 1995, pp. 1169–1178.

[2] Wang, Y., et al. “Non-Data-Aided Feedforward Carrier Frequency Offset Estimators for QAM Constellations: A Nonlinear Least-Squares Approach.” EURASIP Journal on Advances in Signal Processing, Vol. 2004, No. 13, Dec. 2004, p. 856139. https://doi.org/10.1155/S1110865704403175.

[3] Nakagawa, Tadao, et al. “Non-Data-Aided Wide-Range Frequency Offset Estimator for QAM Optical Coherent Receivers.” Optical Fiber Communication Conference/National Fiber Optic Engineers Conference 2011, OSA, 2011, paper OMJ1. https://doi.org/10.1364/OFC.2011.OMJ1.

[4] Olds, Jonathan. Designing an OQPSK demodulator.

拡張機能

バージョン履歴

R2015b で導入

すべて展開する