comm.SymbolSynchronizer
シンボル タイミングのクロック スキューの補正
説明
comm.SymbolSynchronizer System object™ は、PAM、PSK、QAM、または OQPSK 変調スキームの単一搬送波の送信機と受信機間のシンボル タイミングのクロック スキューを補正します。詳細は、シンボル同期の概要 を参照してください。
メモ
入力信号はサンプルレート ベースで動作し、出力信号はシンボル レート ベースで動作します。
シンボル タイミングのクロック スキューを補正するには、以下の手順に従います。
comm.SymbolSynchronizerオブジェクトを作成し、そのプロパティを設定します。関数と同様に、引数を指定してオブジェクトを呼び出します。
System object の機能の詳細については、System object とはを参照してください。
作成
説明
は、単一搬送波の送信機と受信機間のクロック スキューを補正するシンボル同期装置 System object を作成します。symbolSync = comm.SymbolSynchronizer
は、1 つ以上の名前と値のペアを使用してプロパティを設定します。たとえば、symbolSync = comm.SymbolSynchronizer(Name,Value)comm.SymbolSynchronizer('Modulation','OQPSK') は、OQPSK 変調された入力信号に対するシンボル同期装置 System object を構成します。各プロパティ名を引用符で囲みます。
調整可能な DampingFactor、NormalizedLoopBandwidth、および DetectorGain プロパティを使用すると、オブジェクトを解放せずにシミュレーション ループでの同期装置のパフォーマンスを最適化できます。
プロパティ
特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release を使用します。
プロパティが "調整可能" の場合、その値をいつでも変更できます。
プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。
タイミング誤差検出器の方式。Zero-Crossing (decision-directed)、Gardner (non-data-aided)、Early-Late (non-data-aided)、または Mueller-Muller (decision-directed) として指定します。このプロパティは、同期装置で使用するタイミング誤差検出方式を割り当てます。詳細については、タイミング誤差の検出 (TED)を参照してください。
調整可能: No
データ型: char | string
ループ フィルターの正規化帯域幅。範囲 (0, 1) のスカラーとして指定します。ループ帯域幅 (Bn) は、入力信号のシンボル レート (Ts) に正規化されます。詳細については、ループ フィルターの BnTs を参照してください。
メモ
シンボル同期装置を確実にロックさせるには、NormalizedLoopBandwidth プロパティを 0.1 未満の値に設定します。
調整可能: Yes
データ型: double | single
使用法
R2016b より前のバージョンでは、関数 step を使用して System object アルゴリズムを実行します。step に対する引数は作成したオブジェクトであり、この節で示す引数が次に続きます。
たとえば、y = step(obj,x) と y = obj(x) は同等の演算を実行します。
説明
入力引数
入力サンプル。PAM、PSK、QAM、または OQPSK 変調された単一搬送波信号のスカラーまたは列ベクトルとして指定します。
データ型: double | single
複素数のサポート: あり
出力引数
同期されたシンボル。可変サイズの列ベクトルとして返されます。出力シンボルは、入力サンプルからデータ型を継承します。入力の次元が Nsamp 行 1 列の場合、この出力の次元は Nsym 行 1 列になります。Nsym は Nsamp を Nsps で除算したものとほぼ同じです。ここで、Nsps は SamplesPerSymbol プロパティ値と同じです。出力長が の最大出力サイズを超える場合、その出力長は切り捨てられます。
各入力サンプルの推定されたタイミング誤差。範囲 [0, 1] のスカラーまたは範囲 [0, 1] の要素からなる列ベクトルとして返されます。推定されたタイミング誤差は、入力サンプルレートに正規化されます。timingErr のデータ型とサイズは入力 samples と同じです。
オブジェクト関数
オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。
release(obj)
例
ノイズを含む QPSK 変調された信号上の固定シンボルのタイミング誤差を補正します。同期された受信信号のビット エラー レート (BER) をチェックします。
シミュレーション パラメーターを初期化します。
M = 4; % Modulation order for QPSK nSym = 5000; % Number of symbols in a packet sps = 6; % Samples per symbol fracTimingErr = 0.3; % Fractional part of timing error snr = 15; % Signal-to-noise ratio (dB)
ルート レイズド コサイン (RRC) 送信および受信フィルター System object を作成します。
txfilter = comm.RaisedCosineTransmitFilter( ... OutputSamplesPerSymbol=sps); rxfilter = comm.RaisedCosineReceiveFilter( ... InputSamplesPerSymbol=sps, ... DecimationFactor=sps/2);
シンボル同期装置 System object を作成して、タイミング誤差を補正します。
symbolSync = comm.SymbolSynchronizer
symbolSync =
comm.SymbolSynchronizer with properties:
Modulation: 'PAM/PSK/QAM'
TimingErrorDetector: 'Zero-Crossing (decision-directed)'
SamplesPerSymbol: 2
DampingFactor: 1
NormalizedLoopBandwidth: 0.0100
DetectorGain: 2.7000
ランダムな M-ary シンボルを生成し、QPSK 変調を適用します。
data = randi([0 M-1],nSym,1); modSig = pskmod(data,M,pi/4);
非整数遅延フィルターを作成し、0.3 サンプルの固定非整数タイミング誤差を導入します。送信 RRC フィルターは、シンボルあたり 4 つのサンプルを出力するため、1 つのサンプルは、一定の遅延およびチャネルの間 1/4 シンボルと等価です。固定遅延を最も近い整数シンボルに切り下げます。
hFracDelay = designFracDelayFIR(FractionalDelay=fracTimingErr,Bandwidth=0.8); fixedDelay = size(hFracDelay,2)/2 + fracTimingErr
fixedDelay = 11.3000
fixedDelaySym = ceil(fixedDelay/sps)
fixedDelaySym = 2
txfilter オブジェクトを使用して、送信 RRC フィルターで変調信号をフィルター処理します。fixedDelay オブジェクトを使用して、信号タイミング誤差を適用します。
txSig = txfilter(modSig); delaySig = filter(hFracDelay,1,txSig);
遅延した信号を、S/N 比が 15 dB の AWGN チャネルを介して渡します。
rxSig = awgn(delaySig,snr,'measured');rxfilter オブジェクトを使用して、受信 RRC フィルターで変調信号をフィルター処理します。散布図を表示します。タイミング誤差が原因で、受信した信号が予想した QPSK の基準コンスタレーションに合っていません。
rxSample = rxfilter(rxSig); scatterplot(rxSample(1001:end),2)

symbolSync オブジェクトを使用して、シンボル タイミング誤差を補正します。散布図を表示します。同期信号が、予想した QPSK コンスタレーションに合うようになりました。
rxSync = symbolSync(rxSample); scatterplot(rxSync(1001:end),2)

QPSK 信号を復調します。
recData = pskdemod(rxSync,M,pi/4);
一定の遅延と送信および受信 RRC フィルターによる合計システム遅延をシンボル単位で計算します。
sysDelay = (fixedDelaySym + ... txfilter.FilterSpanInSymbols/2 + ... rxfilter.FilterSpanInSymbols/2);
システム遅延を考慮して BER を計算します。
[numErr,ber] = biterr(data(1:end-sysDelay),recData(sysDelay+1:end))
numErr = 0
ber = 0
ノイズを含む BPSK 伝送信号上の固定シンボルのタイミング誤差を補正します。同期された受信信号のビット エラー レート (BER) をチェックします。
シミュレーション パラメーターを初期化します。
M = 2; % Modulation order for BPSK nSym = 20000; % Number of symbols in a packet sps = 4; % Samples per symbol timingErr = 2; % Samples of timing error snr = 15; % Signal-to-noise ratio (dB)
ルート レイズド コサイン (RRC) 送信および受信フィルター System object を作成します。
txfilter = comm.RaisedCosineTransmitFilter( ... OutputSamplesPerSymbol=sps); rxfilter = comm.RaisedCosineReceiveFilter( ... InputSamplesPerSymbol=sps,DecimationFactor=1);
シンボル同期装置 System object™ を作成して、タイミング誤差を補正します。
symbolSync = comm.SymbolSynchronizer( ... SamplesPerSymbol=sps, ... NormalizedLoopBandwidth=0.01, ... DampingFactor=1.0, ... TimingErrorDetector='Early-Late (non-data-aided)');
ランダム データ シンボルを生成して BPSK 変調を適用します。
data = randi([0 M-1],nSym,1); modSig = pskmod(data,M);
遅延オブジェクトを作成し、2 つのサンプルの固定タイミング誤差を導入します。送信 RRC フィルターは、シンボルあたり 4 つのサンプルを出力するため、1 つのサンプルは、一定の遅延およびチャネルの間 1/4 シンボルと等価です。固定遅延を最も近い整数シンボルに丸めます。
fixedDelay = dsp.Delay(timingErr); fixedDelaySym = ceil(fixedDelay.Length/sps);
txfilter オブジェクトを使用して、送信 RRC フィルターで変調信号をフィルター処理します。fixedDelay オブジェクトを使用して、信号タイミング誤差を適用します。
txSig = txfilter(modSig); delayedSig = fixedDelay(txSig);
遅延信号を AWGN チャネルを通して渡します。
rxSig = awgn(delayedSig,snr,'measured');rxfilter オブジェクトを使用して、受信 RRC フィルターで変調信号をフィルター処理します。散布図を表示します。タイミング誤差が原因で、受信した信号が予想した BPSK の基準コンスタレーションに合っていません。
rxSample = rxfilter(rxSig); scatterplot(rxSample(10000:end),2)

symbolSync オブジェクトを使用して、シンボル タイミング誤差を補正します。散布図を表示します。同期信号が、予想した BPSK コンスタレーションに合うようになりました。
rxSync = symbolSync(rxSample); scatterplot(rxSync(10000:end),2)

BPSK 信号を復調します。
recData = pskdemod(rxSync,M);
一定の遅延と送信および受信 RRC フィルターによる合計システム遅延をシンボル単位で計算します。
sysDelay = dsp.Delay(fixedDelaySym + ... txfilter.FilterSpanInSymbols/2 + ... rxfilter.FilterSpanInSymbols/2);
システムの遅延、およびシンボル同期装置のリサンプリングによる出力データ長の変動を考慮して、BER を計算します。
outLength = min(length(data),length(recData));
[numErr1,ber1] = biterr( ...
sysDelay(data(1:outLength)),recData(1:outLength))numErr1 = 6
ber1 = 3.0000e-04
comm.SymbolSynchronizer および comm.CarrierSynchronizer System object を使用して、シンボル タイミングおよび周波数オフセットの誤りを補正します。
構成
シミュレーション パラメーターを初期化します。
M = 16; % Modulation order nSym = 2000; % Number of symbols in a packet sps = 2; % Samples per symbol spsFilt = 8; % Samples per symbol for filters and channel spsSync = 2; % Samples per symbol for synchronizers lenFilt = 10; % RRC filter length
送信機と受信機に対してルート レイズド コサイン (RRC) フィルター System object の対応するペアを作成します。
txfilter = comm.RaisedCosineTransmitFilter( ... FilterSpanInSymbols=lenFilt, ... OutputSamplesPerSymbol=spsFilt, ... Gain=sqrt(spsFilt)); rxfilter = comm.RaisedCosineReceiveFilter( ... FilterSpanInSymbols=lenFilt, ... InputSamplesPerSymbol=spsFilt, ... DecimationFactor=spsFilt/2, ... Gain=sqrt(1/spsFilt));
位相周波数オフセット System object を作成し、100 Hz のドップラー シフトを導入します。
doppler = comm.PhaseFrequencyOffset( ... FrequencyOffset=100, ... PhaseOffset=45, ... SampleRate=1e6);
可変遅延 System object を作成し、タイミング オフセットを導入します。
varDelay = dsp.VariableFractionalDelay;
キャリア同期装置 System object とシンボル同期装置 System object を作成し、ドップラー シフトとタイミング オフセットをそれぞれ補正します。
carrierSync = comm.CarrierSynchronizer( ... SamplesPerSymbol=spsSync); symbolSync = comm.SymbolSynchronizer( ... TimingErrorDetector='Early-Late (non-data-aided)', ... SamplesPerSymbol=spsSync);
コンスタレーション ダイアグラム System object を作成し、結果を表示します。
refConst = qammod(0:M-1,M,UnitAveragePower=true); cdReceive = comm.ConstellationDiagram( ... ReferenceConstellation=refConst, ... SamplesPerSymbol=spsFilt,Title='Received Signal'); cdDoppler = comm.ConstellationDiagram( ... ReferenceConstellation=refConst, ... SamplesPerSymbol=spsSync, ... Title='Frequency Corrected Signal'); cdTiming = comm.ConstellationDiagram( ... ReferenceConstellation=refConst, ... SamplesPerSymbol=spsSync, ... Title='Frequency and Timing Synchronized Signal');
主処理ループ
主処理ループでは以下を行います。
ランダムなシンボルを生成し、QAM 変調を適用します。
変調した信号をフィルター処理します。
周波数とタイミングのオフセットを適用します。
AWGN チャネルを通して、送信された信号を渡します。
受信した信号をフィルター処理します。
ドップラー シフトを補正します。
タイミング オフセットを補正します。
for k = 1:15 data = randi([0 M-1],nSym,1); modSig = qammod(data,M,UnitAveragePower=true); txSig = txfilter(modSig); txDoppler = doppler(txSig); txDelay = varDelay(txDoppler,k/15); rxSig = awgn(txDelay,25); rxFiltSig = rxfilter(rxSig); rxCorr = carrierSync(rxFiltSig); rxData = symbolSync(rxCorr); end
可視化
受信した信号、周波数を補正した信号および周波数とタイミングを同期した信号のコンスタレーション ダイアグラムをプロットします。特定のコンスタレーション点は、受信した信号内では識別できず、周波数を補正した信号内で一部のみを識別できます。ただし、タイミングと周波数を同期した信号は予想された QAM コンスタレーション点と一致します。
cdReceive(rxSig)

cdDoppler(rxCorr)

cdTiming(rxData)

ノイズを含む 8-PSK 信号で単調増加するシンボル タイミング誤差を補正します。正規化されたタイミング誤差を表示します。
シミュレーション パラメーターを初期化します。
M = 8; % Modulation order nSym = 5000; % Number of symbol in a packet sps = 2; % Samples per symbol nSamp = sps*nSym; % Number of samples in a packet
ルート レイズド コサイン (RRC) 送信および受信フィルター System object を作成します。
txfilter = comm.RaisedCosineTransmitFilter( ... 'OutputSamplesPerSymbol',sps); rxfilter = comm.RaisedCosineReceiveFilter( ... 'InputSamplesPerSymbol',sps, ... 'DecimationFactor',1);
可変非整数遅延 System object™ を作成し、単調増加するタイミング誤差を導入します。
varDelay = dsp.VariableFractionalDelay;
シンボル同期装置 System object を作成して、タイミング誤差を補正します。
symbolSync = comm.SymbolSynchronizer(... 'TimingErrorDetector','Mueller-Muller (decision-directed)', ... 'SamplesPerSymbol',sps);
ランダムな 8 値シンボルを生成し、8-PSK 変調を適用します。
data = randi([0 M-1],nSym,1); modSig = pskmod(data,M,pi/8);
変調された信号をレイズド コサイン送信フィルターで処理し、単調増加するタイミング遅延を加えます。
vdelay = (0:1/nSamp:1-1/nSamp)'; txSig = txfilter(modSig); delaySig = varDelay(txSig,vdelay);
遅延した信号を、S/N 比が 15 dB の AWGN チャネルを介して渡します。
rxSig = awgn(delaySig,15,'measured');受信 RRC フィルターで変調信号をフィルター処理します。散布図を表示します。タイミング誤差が原因で、受信した信号が予想した 8-PSK の基準コンスタレーションに合っていません。
rxSample = rxfilter(rxSig); scatterplot(rxSample,sps)

symbolSync オブジェクトを使用して、シンボル タイミング誤差を補正します。散布図を表示します。同期信号が、予想した 8-PSK コンスタレーションに合うようになりました。
[rxSym,tError] = symbolSync(rxSample); scatterplot(rxSym(1001:end))

タイミング誤差の推定をプロットします。時間が経過すると、正規化されたタイミング誤差が 1 サンプルまで増加します。
figure plot(vdelay,tError) xlabel('Time (s)') ylabel('Timing Error (samples)')

ヒント
関数
pskdemodを使用して、シンボルタイミングが同期された OQPSK 変調後の信号を復調します。comm.SymbolSynchronizerSystem object の出力を OQPSK 復調することはできません。このオブジェクトは、OQPSK 変調された入力信号に対してシンボルレート QPSK 変調された信号を出力するためです。comm.OQPSKDemodulatorSystem object には、シンボルごとに 2 つのサンプルをもつ OQPSK 変調された入力信号が必要です。
アルゴリズム
シンボル タイミング同期装置アルゴリズムは、次の 4 つの要素で構成される位相同期回路 (PLL) アルゴリズムをベースにしています。
タイミング誤差検出器 (TED)
内挿器
内挿コントローラー
ループ フィルター
OQPSK 変調の場合、信号の同相成分と直交成分は、状態バッファーを使用して、前の入力の最後の半分のシンボルをキャッシュし、最初に揃えられます (QPSK 変調と同様)。最初の整列の後、残りの同期処理は QPSK 変調の場合と同じです。
このブロック線図は、タイミング同期装置の例を示しています。この図で、整合フィルター処理の後、シンボル タイミング PLL が受信サンプル信号 x(t) に作用します。シンボル タイミング PLL は、送信機と受信機間のクロック スキューを補正した後、シンボル信号 を出力します。

シンボル タイミング同期装置は、非データ支援 TED 方式と判定指向 TED 方式をサポートしています。次の表は、TED 方式オプションに対するタイミング推定式を示しています。
| TED メソッド | 式 |
|---|---|
ゼロクロッシング (判定指向) | |
Gardner (non-data-aided) | |
アーリーレイト (非データ支援) | |
Mueller-Muller (decision-directed) |
非データ支援 TED (ガードナーおよびアーリーレイト) 法は受信したサンプルを使用しますが、送信信号の情報やチャネル推定の結果を使用しません。非データ支援 TED は、同相軸または直交軸に一致するコンスタレーション点をもつ変調スキームを使用して信号のタイミング誤差を推定するために使用されます。ガードナー法またはアーリーレイト法に適した信号の例には、{1+0i, 0+1i, -1+0i, 0−1i} に点をもつ位相オフセットがゼロの QPSK 変調信号や、位相オフセットがゼロの BPSK 変調信号が含まれます。
アーリーレイト法はガードナー法に似ていますが、ガードナー法はアーリーレイト法に比べ自己ノイズが低いため、SNR 値の高いシステムで優れたパフォーマンスを発揮します。
ガードナー法 — ガードナー法は、搬送波位相再生に依存しない非データ支援フィードバック法です。ベースバンド システムと変調搬送波システムに使用されます。より具体的には、この手法は約 40% ~ 100% の過剰帯域幅をもつナイキスト パルスによる線形変調タイプを使用するシステムで使用されます。例としては、PAM、PSK、QAM、または OQPSK 変調を使用するシステム、ロールオフ係数が 0.4 ~ 1 のレイズド コサイン フィルターを使用する信号を整形するシステムなどがあります。ノイズがある場合、このタイミング再生方法の性能は、過剰帯域幅 (レイズド コサイン フィルターの場合はロールオフ係数) の増大とともに向上します。ガードナー法はアーリーレイト ゲート法に似ています。
アーリーレイト法 — アーリーレイト法は、非データ支援フィードバック法です。PAM、PSK、QAM、または OQPSK 変調などの線形変調タイプを使用するシステムに適しています。たとえば、ナイキスト パルスのあるレイズド コサイン フィルターを使用するシステムがこれに該当します。ノイズがある場合、このタイミング再生方法の性能は、パルスの過剰帯域幅 (レイズド コサイン フィルターの場合はロールオフ係数) の増大とともに向上します。
判定指向 TED (ゼロクロッシングおよびミュラー・マラー) 法は、関数 sign を使用して、受信したサンプルの同相成分と直交成分を推定するため、非データ支援 TED 法に比べ計算量が少なくなります。
ゼロクロッシング法 — ゼロクロッシング法は、同期装置の入力にシンボルあたり 2 つのサンプルが必要な判定指向の手法です。過剰帯域幅のすべての値の SNR 条件が低い場合や、おおよその範囲が [0.4, 0.6] となる中程度の過剰帯域幅係数の SNR 条件が中程度の場合に使用されます。
ミュラー・マラー法 — ミュラー・マラー法は、判定指向のフィードバック法で、搬送波位相の事前再生を必要とします。入力信号にナイキスト パルスがある場合 (たとえば、レイズド コサイン フィルターを使用する場合)、ミュラー・マラー法には自己ノイズはありません。ノイズがある狭帯域信号の場合、ミュラー・マラー法の性能はパルスの過剰帯域幅係数の減少とともに向上します。
判定指向方式 (ゼロクロッシングおよびミュラー・マラー) では、同期装置に渡される信号の同相成分と直交成分の符号に基づいてタイミング誤差を推定するため、ゼロの同相または直交成分のいずれかに点をもつコンスタレーション用には推奨されません。 および は、タイミング誤差検出器への入力信号の同相成分と直交成分です。ここで、 は推定されるタイミング誤差です。ミュラー・マラー法の係数 および は、 および の推定です。タイミングの推定は、関数 sign を同相成分と直交成分に適用することで実行され、判定指向 TED 方式にのみ使用されます。
時間遅延は、シンボル レートに同期しない整合フィルターの固定レート サンプルから推定されます。結果として得られるサンプルはシンボルの境界に揃わないため、内挿器を使用してサンプルを "移動" させます。時間遅延が未知であるため、内挿が適応可能でなければなりません。また、内挿されるものは利用可能なサンプルの線形結合であることから、これをフィルターの出力であると考えることもできます。

内挿器は、Farrow 構造と 1/2 に設定されている係数 α をもつ区分的な放物線内挿器を使用します (Rice, Michael, Digital Communications: A Discrete-Time Approach を参照)。
内挿制御によって、内挿器は基底点インデックスと非整数間隔を与えられます。基底点インデックスは内挿に最も近いサンプルのインデックスです。非整数間隔は、内挿とその基底点インデックス間の時間と内挿間隔との時間比率です。

内挿はサンプルごとに実行され、内挿が出力であるかどうかを判別するためにストローブ信号が使用されます。同期装置は、1 を法とするカウンターの内挿制御を使用して、内挿器で使用するストローブと非整数間隔を供給します。
同期装置は比例積分器 (PI) ループ フィルターを使用します。比率ゲイン K1 および積分器ゲイン K2 は、
および
により計算されます。中間項 θ は次により求められます。
ここで、
Nsps はシンボルあたりのサンプル数です。
ζ は減衰係数です。
BnTs は、ループ帯域幅 (Bn) をシンボル レート (Ts) で正規化したものです。
Kp は検出器ゲインです。

参照
[1] Rice, Michael. Digital Communications: A Discrete-Time Approach. Upper Saddle River, NJ: Prentice Hall, 2008.
[2] Mengali, Umberto and Aldo N. D’Andrea. Synchronization Techniques for Digital Receivers. New York: Plenum Press, 1997.
拡張機能
使用上の注意および制限:
MATLAB コード生成における System object (MATLAB Coder)を参照してください。
バージョン履歴
R2015a で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)