Main Content

comm.CarrierSynchronizer

搬送周波数オフセットの補正

説明

comm.CarrierSynchronizer System object™ は、単一搬送波変調方式を使用する信号の搬送周波数と位相オフセットを補正します。キャリア同期装置のアルゴリズムは、BPSK、QPSK、OQPSK、8-PSK、PAM、および矩形 QAM 変調方式と互換性があります。

メモ

  • この System object では、同期アルゴリズムによって発生した位相のあいまいさは解決されません。次の表に示すように、同期装置によって生じる潜在的な位相不確定性は、変調タイプによって異なります。

    変調位相不確定性 (度)
    'BPSK' または 'PAM'0, 180
    'OQPSK''QPSK' または 'QAM'0, 90, 180, 270
    '8PSK'0, 45, 90, 135, 180, 225, 270, 315

    は、搬送波同期と位相不確定性の解決について説明しています。

  • 最適な結果を得るには、大まかな同期と細かな同期を使用した 16-QAM の位相オフセットと周波数オフセットの補正に示すように、搬送波同期をオーバーサンプリングされていない信号に適用します。

単一搬送波変調方式を使用する信号の周波数オフセットと位相オフセットを補正するには、次のようにします。

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

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

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

作成

説明

carrSynch = comm.CarrierSynchronizer は、単一搬送波変調方式を使用する信号の搬送周波数オフセットと位相オフセットを補正する System object を作成します。

carrSynch = comm.CarrierSynchronizer(Name,Value) は、1 つ以上の名前と値のペアを使用してプロパティを設定します。各プロパティ名を引用符で囲みます。

プロパティ

すべて展開する

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

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

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

変調タイプ。'QAM''8PSK''BPSK''OQPSK''PAM'、または 'QPSK' として指定します。

例: comm.CarrierSynchronizer('Modulation','QPSK') は、QPSK 変調信号で使用するキャリア同期装置 System object を作成します。

調整可能: No

変調位相オフセット手法。'Auto' または 'Custom' として指定します。

  • 'Auto' — 指定した変調タイプに従来のオフセットが適用されます。

    変調位相オフセット (ラジアン)
    'BPSK''QAM' または 'PAM'0
    'OQPSK' または 'QPSK'π/4
    '8PSK'π/8
  • 'Custom'CustomPhaseOffset プロパティを使用してユーザー定義の位相オフセットを指定します。

調整可能: Yes

ラジアン単位のカスタム位相オフセット。スカラーとして指定します。

依存関係

このプロパティは、ModulationPhaseOffset プロパティを 'Custom' に設定した場合に適用されます。

データ型: double

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

調整可能: Yes

データ型: double

ループの減衰係数。正のスカラーとして指定します。

調整可能: Yes

データ型: double

ループの正規化帯域幅。範囲 (0,1] のスカラーとして指定します。ループ帯域幅は、同期装置のサンプルレートにより正規化されます。

ループ帯域幅を小さくすると、同期装置の収束時間が短縮されますが、同期装置のプルイン レンジも減少します。

調整可能: Yes

データ型: double

使用法

説明

[outSig,phErr] = carrSynch(inSig) は、入力信号の周波数オフセットと位相オフセットを補正します。この System object は、補正された出力信号と位相誤差の推定値を返します。

入力引数

すべて展開する

入力信号。複素スカラーまたは複素数値のベクトルとして指定します。

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

出力引数

すべて展開する

出力信号。inSig と同じデータ型と長さのスカラーまたは列ベクトルとして返されます。出力信号は入力信号を調整し、単一搬送波変調方式を使用する信号の搬送周波数と位相オフセットを補正します。

ラジアン単位の位相誤差推定。inSig と同じ長さをもつスカラーまたは列ベクトルとして返されます。

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

AWGN チャネルを通過した QPSK 信号の位相と周波数のオフセットを補正します。プリアンブルを使用して、位相不確定性を解決します。

シミュレーション パラメーターを定義します。

M = 4; % Modulation order
rng(1993) % For repeatable results
barker = comm.BarkerCode(...
    'Length',13,'SamplesPerFrame',13);  % For preamble
msgLen = 1e4;
numFrames = 10;
frameLen = msgLen/numFrames;

各フレームにプリアンブルを追加します。これは、後で位相不確定性の解決を実行するときに使用されます。ランダム データ シンボルを生成して QPSK 変調を適用します。

preamble = (1+barker())/2;  % Length 13, unipolar
data = zeros(msgLen,1);
for idx = 1 : numFrames
    payload = randi([0 M-1],frameLen-barker.Length,1);
    data((idx-1)*frameLen + (1:frameLen)) = [preamble; payload];
end

modSig = pskmod(data,4,pi/4);

comm.PhaseFrequencyOffsetSystem object™ を作成して、位相オフセットと周波数オフセットを変調入力信号に導入します。位相オフセットを 45 度、周波数オフセットを 1 kHz、サンプルレートを 10 kHz に設定します。周波数オフセットはサンプルレートの 1% に設定されます。

pfo = comm.PhaseFrequencyOffset( ...
    'PhaseOffset',45, ...
    'FrequencyOffset',1e4, ...
    'SampleRate',1e6);

シンボルあたりのサンプル数が 1 に設定された、位相と周波数のオフセットの補正に使用するキャリア同期装置 System object を作成します。

carrierSync = comm.CarrierSynchronizer( ...
    'SamplesPerSymbol',1, ...
    'Modulation','QPSK');

pfo System object を使用して位相オフセットと周波数オフセットを適用し、次に AWGN チャネルを通して信号を渡してホワイト ガウス ノイズを付加します。

modSigOffset = pfo(modSig);
rxSig = awgn(modSigOffset,12);

受信した信号の散布図を表示します。周波数オフセットのため、データは各基準コンスタレーション点のまわりに集まる代わりに、1 つの円の中に表示されます。

scatterplot(rxSig)

Figure Scatter Plot contains an axes object. The axes object with title Scatter plot contains an object of type line. This object represents Channel 1.

carrierSync System object を使用して、受信信号の位相オフセットと周波数オフセットを補正します。

syncSignal = carrierSync(rxSig);

コンスタレーション ダイアグラムを使用して、同期信号の最初と最後の 1000 個のシンボルを表示します。同期装置のループが収束する前は、プロットされたシンボルは各基準コンスタレーション点の周りに集まっていません。収束すると、プロットされたシンボルが各基準コンスタレーション点の周りに集まります。

constDiag = comm.ConstellationDiagram( ...
    'SymbolsToDisplaySource','Property', ...
    'SymbolsToDisplay',300, ...
    'ChannelNames',{'Before convergence','After convergence'}, ...
    'ShowLegend',true, ...
    'Position',[400 400 400 400]);

constDiag([syncSignal(1:1000) syncSignal(9001:10000)]);

同期信号を復調します。ビット誤りの総数と BER を計算して表示します。

syncData = pskdemod(syncSignal,4,pi/4);
[syncDataTtlErr,syncDataBER] = biterr( ...
    data(6000:end),syncData(6000:end))
syncDataTtlErr = 8001
syncDataBER = 0.9999

受信信号の位相不確定性により、ビット誤りが発生する可能性があります。プリアンブルを使用して、位相不確定性を判別します。同期信号からこの位相不確定性を削除して、ビット誤りを減らします。

idx = 9000 + (1:barker.Length);
phOffset = angle(modSig(idx) .* conj(syncSignal(idx)));
phOffset = round((2/pi) * phOffset); % -1, 0, 1, +/-2
phOffset(phOffset==-2) = 2; % Prep for mean operation
phOffset = mean((pi/2) * phOffset); % -pi/2, 0, pi/2, or pi
disp(['Estimated mean phase offset = ', ...
    num2str(phOffset*180/pi),' degrees'])
Estimated mean phase offset = 180 degrees
resPhzSig = exp(1i*phOffset) * syncSignal;

位相不確定性を解決した後は、信号を復調します。更新されたビット誤りの総数と BER を再計算して表示します。位相不確定性をなくすことで、BER が大幅に減少します。

resPhzData = pskdemod(resPhzSig,4,pi/4);
[resPhzTtlErr, resPhzBER] = biterr( ...
    data(6000:end),resPhzData(6000:end))
resPhzTtlErr = 1
resPhzBER = 1.2497e-04

キャリア同期装置 System object™ を使用して、ノイズを含む 8-PSK 信号に生じた周波数オフセットを推定します。

シミュレーション パラメーターを定義します。

M = 8;                  % Modulation order
fs = 1e6;               % Sample rate (Hz)
foffset = 1000;         % Frequency offset (Hz)
phaseoffset = 15;       % Phase offset (deg)
snrdb = 20;             % Signal-to-noise ratio (dB)

comm.PhaseFrequencyOffsetSystem object を作成して、位相オフセットと周波数オフセットを変調信号に導入します。

pfo = comm.PhaseFrequencyOffset('PhaseOffset',phaseoffset, ...
    'FrequencyOffset',foffset,'SampleRate',fs);

キャリア同期装置 System object を作成して、位相と周波数のオフセットの補正に使用します。Modulation プロパティを 8PSK に設定します。

carrierSync = comm.CarrierSynchronizer('Modulation','8PSK');

ランダム データを生成して 8-PSK 変調を適用します。

data = randi([0 M-1],5000,1);
modSig = pskmod(data,M,pi/M);

pfo System object を使用して位相オフセットと周波数オフセットを適用し、AWGN チャネルを通して信号を渡してガウス ホワイト ノイズを付加します。

modSigOffset = pfo(modSig);
rxSig = awgn(modSigOffset,snrdb);

キャリア同期装置を使用して、受信した信号の位相オフセットを推定します。

[~,phError] = carrierSync(rxSig);

関数diffを使用して周波数オフセットを特定し、位相誤差の近似微分を計算します。位相誤差はラジアン単位で測定されるため、微分は 2π でスケーリングしなければなりません。

estFreqOffset = diff(phError)*fs/(2*pi);

推定された周波数オフセットのランニング平均をプロットします。同期装置が解に収束した後は、推定の平均値が入力周波数オフセット値 1000 Hz とほぼ等しくなります。

rmean = cumsum(estFreqOffset)./(1:length(estFreqOffset))';
plot(rmean)
xlabel('Symbols')
ylabel('Estimated Frequency Offset (Hz)')
grid

Figure contains an axes object. The axes object contains an object of type line.

AWGN チャネルにおける 16-QAM 信号の著しい位相と周波数のオフセットの補正は、2 つのステップで行われます。まず、大まかな周波数補償器により提供された推定値を使用して大まかな周波数オフセットを補正してから、搬送波同期を使用して補正を微調整します。周波数補正が大まかなため、正規化帯域幅が低い値に設定されていても、キャリア同期装置はすぐに収束します。正規化帯域幅の値が低いほど、残差が小さい搬送波オフセットをより良く補正できます。受信信号に位相と周波数のオフセットの補正を適用した後に、プリアンブルを使用して位相不確定性を解決します。

シミュレーション パラメーターを定義します。

fs = 10000;                  % Sample rate (Hz)
sps = 4;                     % Samples per symbol
M = 16;                      % Modulation order
k = log2(M);                 % Bits per symbol
rng(1996)                    % Set seed for repeatable results
barker = comm.BarkerCode(... % For preamble
    'Length',13,'SamplesPerFrame',13);
msgLen = 1e4;
numFrames = 10;
frameLen = msgLen/numFrames;

データ ペイロードを生成し、各フレームにプリアンブルを追加します。このプリアンブルは、後で位相不確定性の解決に使用されます。

preamble = (1+barker())/2;  % Length 13, unipolar
data = zeros(msgLen, 1);
for idx = 1 : numFrames
    payload = randi([0 M-1],frameLen-barker.Length,1);
    data((idx-1)*frameLen + (1:frameLen)) = [preamble; payload];
end

送信パルス整形フィルター、受信パルス整形フィルター、QAM の大まかな周波数補正、搬送波同期、およびコンスタレーション ダイアグラムのための System object™ を作成します。

txFilter = comm.RaisedCosineTransmitFilter( ...
    'OutputSamplesPerSymbol',sps);
rxFilter = comm.RaisedCosineReceiveFilter(...
    'InputSamplesPerSymbol',sps, ...
    'DecimationFactor',sps);
coarse = comm.CoarseFrequencyCompensator( ...
    'SampleRate',fs, ...
    'FrequencyResolution',10);
fine = comm.CarrierSynchronizer( ...
    'DampingFactor',0.4, ...
    'NormalizedLoopBandwidth',0.001, ...
    'SamplesPerSymbol',1, ...
    'Modulation','QAM');
axislimits = [-6 6];
constDiagram = comm.ConstellationDiagram( ...
    'ReferenceConstellation',qammod(0:M-1,M), ...
    'ChannelNames',{'Before convergence','After convergence'}, ...
    'ShowLegend',true, ...
    'XLimits',axislimits, ...
    'YLimits',axislimits);

また、AWGN チャネルの System object と、位相と周波数のオフセットを作成して、信号に損失を追加します。90 度よりも大きい位相オフセットを追加して位相不確定性を引き起こすと、コンスタレーションの象限変化が起こります。

ebn0 = 8;
freqoffset = 110;
phaseoffset = 110;
awgnChannel = comm.AWGNChannel( ...
    'EbNo',ebn0, ...
    'BitsPerSymbol',k, ...
    'SamplesPerSymbol',sps);
pfo = comm.PhaseFrequencyOffset( ...
    'FrequencyOffset',freqoffset, ...
    'PhaseOffset',phaseoffset, ...
    'SampleRate',fs);

ランダム データ シンボルを生成し、16-QAM 変調を適用して、変調された信号を送信パルス整形フィルターを通じて渡します。

txMod = qammod(data,M);
txSig = txFilter(txMod);

pfo System object を使用して位相オフセットと周波数オフセットを適用し、次に AWGN チャネルを通して信号を渡してホワイト ガウス ノイズを付加します。

txSigOffset = pfo(txSig);
rxSig = awgnChannel(txSigOffset);

大まかな周波数補償器 System object は、周波数オフセットの大まかな補正を行います。この例の条件では、受信信号補正の周波数オフセットを、送信信号の 10 Hz 以内に修正するだけで十分です。

syncCoarse = coarse(rxSig);

受信パルス整形フィルターを通して信号を渡し、細かな周波数補正を適用します。

rxFiltSig = fine(rxFilter(syncCoarse));

信号内の最初と最後の 1000 個のシンボルのコンスタレーション ダイアグラムを表示します。同期ループの収束前は、ダイアグラムの表示が螺旋状であり、周波数オフセットが補正されていないことが示されています。キャリア同期装置が解に収束した後は、シンボルが基準コンスタレーションと一致します。

constDiagram([rxFiltSig(1:1000) rxFiltSig(9001:end)])

信号を復調します。受信データと送信データを一致させるために、送信フィルターと受信フィルターによる信号遅延を考慮します。ビット誤りの総数と BER を計算して表示します。ビット誤りをチェックするときは、受信信号の後半部分を使用して、同期ループが収束していることを確認します。

rxData = qamdemod(rxFiltSig,M);
delay = (txFilter.FilterSpanInSymbols + ...
    rxFilter.FilterSpanInSymbols) / 2;
idxSync = 2000; % Check BER after synchronization loop has converged
[syncDataTtlErr,syncDataBER] = biterr( ...
    data(idxSync:end-delay),rxData(idxSync+delay:end))
syncDataTtlErr = 16116
syncDataBER = 0.5042

使用されるランダム データによっては、同期ループが収束してロックされた後に、受信信号の位相不確定性によるビット誤りがある可能性があります。この場合は、プリアンブルを使用して同期信号の位相不確定性を判別してから削除し、ビット誤りを減らすことができます。位相不確定性がきわめて小さい場合は、ビット誤りの数が変わらないことがあります。

idx = 9000 + (1:barker.Length);
phOffset = angle(txMod(idx) .* conj(rxFiltSig(idx+delay)));

phOffsetEst = mean(phOffset);
disp(['Phase offset = ',num2str(rad2deg(phOffsetEst)),' degrees'])
Phase offset = -90.1401 degrees
resPhzSig = exp(1i*phOffsetEst) * rxFiltSig;

位相不確定性を解決した後は、信号を復調します。ビット誤りの総数と BER を再計算します。

resPhzData = qamdemod(resPhzSig,M);
[resPhzTtlErr,resPhzBER] = biterr( ...
    data(idxSync:end-delay),resPhzData(idxSync+delay:end))
resPhzTtlErr = 5
resPhzBER = 1.5643e-04

最小偏移変調 (MSK) 信号のタイミング位相オフセット、搬送周波数オフセット、搬送波位相オフセットなどのチャネル障害をモデル化します。comm.MSKTimingSynchronizer および comm.CarrierSynchronizer System object を使用して、受信機でそれらの信号を同期します。MSK タイミング同期装置はタイミング オフセットを再生し、キャリア同期装置は搬送周波数オフセットと搬送波位相オフセットを再生します。

MATLAB® スクリプト configureMSKSignalRecoveryEx を実行してシステム変数を初期化します。論理制御変数 recoverTimingPhase を定義してタイミング位相再生を有効にし、recoverCarrier を定義して搬送周波数および搬送波位相再生を有効にします。

configureMSKSignalRecoveryEx;
recoverTimingPhase = true;
recoverCarrier = true;

チャネル障害のモデル化

チャネル モデルが適用するサンプル遅延 timingOffset を指定します。可変非整数遅延オブジェクトを作成して、タイミング遅延を送信信号に導入します。

timingOffset = 0.2;
varDelay = dsp.VariableFractionalDelay;

comm.PhaseFrequencyOffset System object™ を作成して、搬送波位相オフセットと周波数オフセットを変調信号に導入します。MSK 変調器は送信されたシンボルをアップサンプリングするため、SampleRate プロパティを samplesPerSymbol とサンプル時間 Ts の比率に設定します。

freqOffset = 50;
phaseOffset = 30;
pfo = comm.PhaseFrequencyOffset(...
    'FrequencyOffset',freqOffset, ...
    'PhaseOffset',phaseOffset, ...
    'SampleRate',samplesPerSymbol/Ts);

シミュレーション SNR を 20 dB に設定します。MSK 変調器は 1 ワットの電力でシンボルを生成するため、信号強度は 1 W (0 dBW) になります。これは、awgn チャネルの信号強度入力の既定値です。

SNR = 20;

タイミング位相、搬送周波数、搬送波位相同期

MSK タイミング同期装置を作成し、4 次非線形法を使用して、シンボル タイミング位相を再生します。

timeSync = comm.MSKTimingSynchronizer(...
    'SamplesPerSymbol',samplesPerSymbol, ...
    'ErrorUpdateGain',0.02);

キャリア同期装置を作成し、搬送周波数と搬送波位相の両方を再生します。MSK コンスタレーションは位相オフセットが 0 度の QPSK であるため、それに応じて comm.CarrierSynchronizer を設定します。

phaseSync = comm.CarrierSynchronizer(...
    'Modulation','QPSK', ...
    'ModulationPhaseOffset','Custom', ...
    'CustomPhaseOffset',0, ...
    'SamplesPerSymbol',1);

ストリーム処理ループ

シミュレーションは MSK 変調を使用して、データを変調します。変調シンボルは、タイミング遅延、搬送周波数と位相シフト、および加法性ホワイト ガウス ノイズに適用されるチャネル モデルを通過します。受信機がタイミング位相と搬送周波数および搬送波位相の再生を実行します。最後に、信号シンボルが復調され、ビット エラー レートが計算されます。plotResultsMSKSignalRecoveryEx スクリプトは、以下の影響を示す散布図を以下の順序で生成します。

  1. チャネル障害

  2. タイミング同期

  3. 搬送波同期

この例は、シミュレーションの最後に、タイミング位相、周波数および位相推定をシミュレーション時の関数として表示します。

for p = 1:numFrames
    %------------------------------------------------------
    % Generate and modulate data
    %------------------------------------------------------
    txBits = randi([0 1],samplesPerFrame,1);
    txSym = modem(txBits);
    %------------------------------------------------------
    % Transmit through channel
    %------------------------------------------------------
    %
    % Add timing offset
    rxSigTimingOff = varDelay(txSym,timingOffset*samplesPerSymbol);
    %
    % Add carrier frequency and phase offset
    rxSigCFO = pfo(rxSigTimingOff);
    %
    % Pass the signal through an AWGN channel
    rxSig = awgn(rxSigCFO,SNR);
    %
    % Save the transmitted signal for plotting
    plot_rx = rxSig;
    %
    %------------------------------------------------------
    % Timing recovery
    %------------------------------------------------------
    if recoverTimingPhase
        % Recover symbol timing phase using 
        % fourth-order nonlinearity method
        [rxSym,timEst] = timeSync(rxSig);
        % Calculate the timing delay estimate for each sample
        timEst = timEst(1)/samplesPerSymbol;
    else
        % Do not apply timing recovery and 
        % simply downsample the received signal
        rxSym = downsample(rxSig,samplesPerSymbol);
        timEst = 0;
    end
    
    % Save the timing synchronized received signal for plotting
    plot_rxTimeSync = rxSym;
    
    %------------------------------------------------------
    % Carrier frequency and phase recovery
    %------------------------------------------------------
    if recoverCarrier
        % The following script applies carrier frequency and 
        % phase recovery using a second order phase-locked 
        % loop (PLL), and removes phase ambiguity
        [rxSym,phEst] = phaseSync(rxSym);
        removePhaseAmbiguityMSKSignalRecoveryEx;
        freqShiftEst = mean(diff(phEst)/(Ts*2*pi));
        phEst = mod(mean(phEst),360); % in degrees
    else
        freqShiftEst = 0;
        phEst = 0;
    end
    
    % Save the phase synchronized received signal for plotting
    plot_rxPhSync = rxSym;
    %------------------------------------------------------
    % Demodulate the received symbols
    %------------------------------------------------------
    rxBits = demod(rxSym);
    %------------------------------------------------------
    % Calculate the bit error rate
    %------------------------------------------------------
    errorStats = BERCalc(txBits,rxBits);
    %------------------------------------------------------
    % Plot results
    %------------------------------------------------------
    plotResultsMSKSignalRecoveryEx;
end

Figure contains 3 axes objects. Axes object 1 with title Timing Phase Estimate contains an object of type line. Axes object 2 with title Frequency Estimate contains an object of type line. Axes object 3 with title Phase Estimate contains an object of type line.

ビット エラー レートとエラー レート計算機によって処理されたシンボルの合計数を表示します。

BitErrorRate = errorStats(1)
BitErrorRate = 4.0001e-06
TotalNumberOfSymbols = errorStats(3)
TotalNumberOfSymbols = 499982

まとめおよび追加の実験

再生アルゴリズムは、タイミング、搬送周波数および搬送波位相の同期後に取得されるコンスタレーション プロットを使用することによって実証されます。

この例の書き込み可能なコピーとそのサポート ファイルを作成するには、このスクリプトを開きます。これにより、再生アルゴリズムの効果を示すため、論理制御変数 recoverTimingPhaserecoverCarrier を有効化および無効化してシミュレーションを再実行することができます。

付録

この例では、以下のスクリプトを使用しています。

  • configureMSKSignalRecoveryEx

  • plotResultsMSKSignalRecoveryEx

  • removePhaseAmbiguityMSKSignalRecoveryEx

アルゴリズム

comm.CarrierSynchronizer System object は、[1]で説明されている PLL ベースのアルゴリズムを使用する閉ループ補償器です。同期装置の出力 yn は、n 番目のサンプルの複素数入力信号 xn の周波数がシフトされたものです。同期装置の出力は

yn=xneiλn,

となり、λn はダイレクト デジタル シンセサイザー (DDS) の出力です。DDS とは離散時間式の電圧制御発振器であり、離散時間位相同期回路における中核コンポーネントです。この System object のコンテキスト内では、DDS は積分フィルターとして機能します。

周波数オフセットを補正するには、まずアルゴリズムが位相誤差 en を特定します。位相誤差の値は変調方式によって異なります。

変調位相誤差
QAM または QPSK

en=sgn(Re{xn})×Im{xn}sgn(Im{xn})×Re{xn}

この方程式の詳細については、[1]を参照してください。

BPSK または PAM

en=sgn(Re{xn})×Im{xn}

この方程式の詳細については、[1]を参照してください。

8-PSK

en={sgn(Re{xn})×Im{xn}(21)sgn(Im{xn})×Re{xn},for|Re{xn}||Im{xn}|(21)sgn(Re{xn})×Im{xn}sgn(Im{xn})×Re{xn},for|Re{xn}|<|Im{xn}|

この方程式の詳細については、[2]を参照してください。

OQPSK

en=sgn(Re{xn-SamplePerSymbol/2})×Im{xn-SamplePerSymbol/2}sgn(Im{xn})×Re{xn}

システムの安定性を確保するため、位相誤差は、以下で決定される双二次ループ フィルターを通過します。

ψn=gIen+ψn1,

ここで、ψn はサンプル n でのループ フィルターの出力で、gI は積分器のゲインです。積分器のゲインは次の方程式で決定されます。

gI=4(θ2/d)KpK0,

ここで、θ、d、K0、および Kp は System object のプロパティから決定されます。具体的には、

θ=BnT(ζ+14ζ)andd=1+2ζθ+θ2,

ここで、Bn は正規化されたループ帯域幅で、ζ は減衰係数です。位相再生ゲイン K0 は、シンボルあたりのサンプル数と等しくなります。変調タイプにより位相誤差検出器ゲイン Kp が決定されます。

変調Kp
BPSK、PAM、QAM、QPSK、または OQPSK2
8-PSK1

ループ フィルターの出力はその後 DDS に渡されます。DDS は、前進オイラー法の積分規則に基づく式で表される、別の双二次ループ フィルターです。

λn=(gPen-1+ψn-1)+λn-1,

ここで、gP は、次の式で表される比例ゲインです。

gP=4ζ(θ/d)KpK0.

この System object のオブジェクト関数 info は、正規化されたプルイン レンジ、最大周波数同期遅延および最大位相同期遅延の推定値を返します。正規化されたプルイン レンジ (Δf)pull-in はラジアン単位で表され、次のように推定されます。

(Δf)pull-inmin(1,2π2ζBn).

(Δf )pull-in の式は、2π2ζBn が 1 に近づくにつれて精度が低下します。

最大周波数同期遅延 TFL と最大位相同期遅延 TPL はサンプル単位で表され、次のように推定されます。

TFL4(Δf)pull-in2Bn3andTPL1.3Bn.

参照

[1] Rice, M. Digital Communications: A Discrete-Time Approach. Upper Saddle River, NJ: Prentice Hall, 2009, pp. 359–393.

[2] Zhijie, H., Y. Zhiqiang, Z. Ming, and W. Kuang. “8PSK Demodulation for New Generation DVB-S2.” 2004 International Conference on Communications, Circuits and Systems. Vol. 2, 2004, pp. 1447–1450.

拡張機能

バージョン履歴

R2015a で導入