Main Content

comm.SymbolSynchronizer

シンボル タイミングのクロック スキューの補正

説明

comm.SymbolSynchronizer System object™ は、PAM、PSK、QAM、または OQPSK 変調スキームの単一搬送波の送信機と受信機間のシンボル タイミングのクロック スキューを補正します。詳細は、シンボル同期の概要 を参照してください。

メモ

入力信号はサンプルレート ベースで動作し、出力信号はシンボル レート ベースで動作します。

シンボル タイミングのクロック スキューを補正するには、以下の手順に従います。

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

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

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

作成

説明

symbolSync = comm.SymbolSynchronizer は、単一搬送波の送信機と受信機間のクロック スキューを補正するシンボル同期装置 System object を作成します。

symbolSync = comm.SymbolSynchronizer(Name,Value) は、1 つ以上の名前と値のペアを使用してプロパティを設定します。たとえば、comm.SymbolSynchronizer('Modulation','OQPSK') は、OQPSK 変調された入力信号に対するシンボル同期装置 System object を構成します。各プロパティ名を引用符で囲みます。

調整可能な DampingFactorNormalizedLoopBandwidth、および DetectorGain プロパティを使用すると、オブジェクトを解放せずにシミュレーション ループでの同期装置のパフォーマンスを最適化できます。

プロパティ

すべて展開する

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

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

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

変調タイプ。'PAM/PSK/QAM' または 'OQPSK' を指定します。

調整可能: No

データ型: char | string

タイミング誤差検出器の方式。Zero-Crossing (decision-directed)Gardner (non-data-aided)Early-Late (non-data-aided)、または Mueller-Muller (decision-directed) として指定します。このプロパティは、同期装置で使用するタイミング誤差検出方式を割り当てます。詳細については、タイミング誤差の検出 (TED)を参照してください。

調整可能: No

データ型: char | string

シンボルあたりのサンプル数。1 より大きい整数として指定します。詳細については、ループ フィルターの Nsps を参照してください。

調整可能: No

データ型: double

ループ フィルターの減衰係数。正のスカラーとして指定します。詳細については、ループ フィルターの ζ を参照してください。

調整可能: Yes

データ型: double | single

ループ フィルターの正規化帯域幅。範囲 (0, 1) のスカラーとして指定します。ループ帯域幅 (Bn) は、入力信号のシンボル レート (Ts) に正規化されます。詳細については、ループ フィルターの BnTs を参照してください。

メモ

シンボル同期装置を確実にロックさせるには、NormalizedLoopBandwidth プロパティを 0.1 未満の値に設定します。

調整可能: Yes

データ型: double | single

位相検出器ゲイン。正のスカラーとして指定します。詳細については、ループ フィルターの Kp を参照してください。

調整可能: Yes

データ型: double | single

使用法

R2016b より前のバージョンでは、関数 step を使用して System object アルゴリズムを実行します。step に対する引数は作成したオブジェクトであり、この節で示す引数が次に続きます。

たとえば、y = step(obj,x)y = obj(x) は同等の演算を実行します。

説明

symbols = symbolSync(samples) は、入力サンプルに基づいて、単一搬送波の送信機と受信機間のシンボル タイミングのクロック スキューを補正し、同期されたシンボルを出力します。

  • 入力はサンプルレート ベースで動作し、出力信号はシンボル レート ベースで動作します。

  • DampingFactorNormalizedLoopBandwidth、および DetectorGain プロパティを調整して、同期装置のパフォーマンスを向上できます。

[symbols,timingErr] = symbolSync(samples) は、オーバーサンプリングされた入力 samples の各サンプルについて推定されたタイミング誤差も返します。

入力引数

すべて展開する

入力サンプル。PAM、PSK、QAM、または OQPSK 変調された単一搬送波信号のスカラーまたは列ベクトルとして指定します。

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

出力引数

すべて展開する

同期されたシンボル。可変サイズの列ベクトルとして返されます。出力シンボルは、入力サンプルからデータ型を継承します。入力の次元が Nsamp 行 1 列の場合、この出力の次元は Nsym 行 1 列になります。Nsym は Nsamp を Nsps で除算したものとほぼ同じです。ここで、NspsSamplesPerSymbol プロパティ値と同じです。出力長が NsampNsps×1.1 の最大出力サイズを超える場合、その出力長は切り捨てられます。

各入力サンプルの推定されたタイミング誤差。範囲 [0, 1] のスカラーまたは範囲 [0, 1] の要素からなる列ベクトルとして返されます。推定されたタイミング誤差は、入力サンプルレートに正規化されます。timingErr のデータ型とサイズは入力 samples と同じです。

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

ノイズを含む QPSK 変調された信号上の固定シンボルのタイミング誤差を補正します。同期された受信信号のビット エラー レート (BER) をチェックします。

シミュレーション パラメーターを初期化します。

M = 4;         % Modulation order for QPSK
nSym = 5000;   % 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',sps/2);

シンボル同期装置 System object を作成して、タイミング誤差を補正します。

symbolSync = comm.SymbolSynchronizer;

ランダムな M-ary シンボルを生成し、QPSK 変調を適用します。

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

遅延オブジェクトを作成し、2 つのサンプルの固定タイミング誤差を導入します。送信 RRC フィルターは、シンボルあたり 4 つのサンプルを出力するため、1 つのサンプルは、一定の遅延およびチャネルの間 1/4 シンボルと等価です。

fixedDelay = dsp.Delay(timingErr);
fixedDelaySym = ceil(fixedDelay.Length/sps); % Round fixed delay to nearest integer in symbols

txfilter オブジェクトを使用して、送信 RRC フィルターで変調信号をフィルター処理します。fixedDelay オブジェクトを使用して、信号タイミング誤差を適用します。

txSig = txfilter(modSig);
delaySig = fixedDelay(txSig);

遅延した信号を、S/N 比が 15 dB の AWGN チャネルを介して渡します。

rxSig = awgn(delaySig,snr,'measured');

rxfilter オブジェクトを使用して、受信 RRC フィルターで変調信号をフィルター処理します。散布図を表示します。タイミング誤差が原因で、受信した信号が予想した QPSK の基準コンスタレーションに合っていません。

rxSample = rxfilter(rxSig);  
scatterplot(rxSample(1001:end),2)

Figure Scatter Plot contains an axes object. The axes object with title Scatter plot, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

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

rxSync = symbolSync(rxSample);
scatterplot(rxSync(1001:end),2)

Figure Scatter Plot contains an axes object. The axes object with title Scatter plot, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

QPSK 信号を復調します。

recData = pskdemod(rxSync,M,pi/4);

一定の遅延と送信および受信 RRC フィルターによる合計システム遅延をシンボル単位で計算します。

sysDelay = dsp.Delay(fixedDelaySym + txfilter.FilterSpanInSymbols/2 + ...
    rxfilter.FilterSpanInSymbols/2);

システム遅延を考慮して BER を計算します。

[numErr,ber] = biterr(sysDelay(data),recData)
numErr = 11
ber = 0.0011

ノイズを含む 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); % Round fixed delay to nearest integer in symbols

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)

Figure Scatter Plot contains an axes object. The axes object with title Scatter plot, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

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

rxSync = symbolSync(rxSample);
scatterplot(rxSync(10000:end),2)

Figure Scatter Plot contains an axes object. The axes object with title Scatter plot, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

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)

Figure Scatter Plot contains an axes object. The axes object with title Scatter plot, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

symbolSync オブジェクトを使用して、シンボル タイミング誤差を補正します。散布図を表示します。同期信号が、予想した 8-PSK コンスタレーションに合うようになりました。

[rxSym,tError] = symbolSync(rxSample);
scatterplot(rxSym(1001:end))

Figure Scatter Plot contains an axes object. The axes object with title Scatter plot, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

タイミング誤差の推定をプロットします。時間が経過すると、正規化されたタイミング誤差が 1 サンプルまで増加します。

figure
plot(vdelay,tError)
xlabel('Time (s)')
ylabel('Timing Error (samples)')

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Timing Error (samples) contains an object of type line.

アルゴリズム

すべて展開する

参照

[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.

拡張機能

バージョン履歴

R2015a で導入

参考

オブジェクト

ブロック