Main Content

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

符号化およびフィルター処理した信号の遅延検出

畳み込み符号化とフィルター処理を行ったリンクの遅延を特定します。遅延を使用して、ビット エラー数を正確に特定します。

QPSK 変調器と復調器のペアを作成します。ビットを処理するオブジェクトを指定します。

qpskmod = comm.QPSKModulator(BitInput=true);
qpskdemod = comm.QPSKDemodulator(BitOutput=true);

レイズド コサイン送信フィルターと受信フィルターのペアを作成します。

txfilt = comm.RaisedCosineTransmitFilter;
rxfilt = comm.RaisedCosineReceiveFilter;

畳み込み符号化器とビタビ復号化器のペアを作成します。

convEnc = comm.ConvolutionalEncoder;
vitDec = comm.ViterbiDecoder(InputFormat='Hard');

ランダムなバイナリ データを生成します。データを畳み込み符号化します。

txData = randi([0 1],1000,1);
encData = convEnc(txData);

符号化したデータを変調します。レイズド コサイン送信フィルターを使用して変調されたデータを渡します。

modSig = qpskmod(encData);
txSig = txfilt(modSig);

フィルター処理された信号を AWGN チャネルを通して渡します。

rxSig = awgn(txSig,20,'measured');

受信信号をフィルター処理してから復調します。

filtSig = rxfilt(rxSig);
demodSig = qpskdemod(filtSig);

復調したデータを復号化します。

rxData = vitDec(demodSig);

関数 finddelay を使用して、送受信されたバイナリ データ間の遅延を検出します。

td = finddelay(txData,rxData)
td = 44

計算した遅延が予想された遅延と一致していることを確認します。これは、整合フィルターの群遅延とビタビ復号化器のトレースバック長の和と等しくなります。

tdexpected = ( ...
    txfilt.FilterSpanInSymbols + rxfilt.FilterSpanInSymbols)/2 + ...
    vitDec.TracebackDepth;
isequal(td,tdexpected)
ans = logical
   1

送信したシーケンスの最後の td ビットを破棄し、受信したシーケンスの最初の td ビットを破棄して、ビット誤り数を計算します。

numErrors = biterr(txData(1:end-td),rxData(td+1:end))
numErrors = 0