Main Content

トレリス符号化変調の例

これらの例では、トレリス符号化変調 (TCM) 方式を示します。

QAM TCM の使用によるデータの変調および復調

任意の 4 点コンスタレーションの QAM TCM 変調を使ってノイズを含むデータを変調および復調します。結果の BER を推定します。

[171 133] 生成多項式を使用して、2 つの入力シンボルと 4 つの出力シンボルをもつトレリス構造を定義します。任意の 4 点コンスタレーションを定義します。

qamTrellis = poly2trellis(7,[171 133]);
refConst = exp(pi*1i*[1 2 3 6]/4);

qamTrellis および refConst を使用して、QAM TCM 変調器と復調器 System object™ のペアを作成します。

qamtcmod = comm.GeneralQAMTCMModulator( ...
    qamTrellis, ...
    Constellation=refConst);
qamtcdemod = comm.GeneralQAMTCMDemodulator( ...
    qamTrellis, ...
    Constellation=refConst);

TracebackDepth とシンボルあたりのビット数の積に等しい遅延 (ビット単位) をもつエラー レート計算機を作成します。

errorrate = comm.ErrorRate( ...
    ReceiveDelay=qamtcdemod.TracebackDepth * ...
    log2(qamTrellis.numInputSymbols));

ランダムなバイナリ データを生成して QAM TCM 変調を適用します。AWGN チャネルを通して信号を渡し、その信号を復調します。誤り統計を収集します。

for counter = 1:10
    % Generate binary data
    data = randi([0 1],500,1);
    % Modulate
    modSignal = qamtcmod(data);
    % Pass through an AWGN channel
    noisySignal = awgn(modSignal,4);
    % Demodulate
    receivedData = qamtcdemod(noisySignal);
    % Calculate the error statistics
    errorStats = errorrate(data,receivedData);
end

BER とビット エラー数を表示します。

fprintf("Error rate = %5.2e\nNumber of errors = %d\n", ...
    errorStats(1), errorStats(2))
Error rate = 9.84e-03
Number of errors = 49

ノイズを含む PSK TCM データの復調

8-PSK TCM 変調方式を使用して、AWGN チャネルのデータを変調および復調します。結果のエラー レートを推定します。

入力シンボル 4 つと出力シンボル 8 つをもつトレリス構造体を定義します。

trellis =  poly2trellis([5 4],[23 35 0; 0 5 13]);

トレリス t を使用して、8-PSK TCM 変調器および復調器の System object を作成します。

M = 8;
psktcmod = comm.PSKTCMModulator(trellis,ModulationOrder=M);
psktcdemod = comm.PSKTCMDemodulator(trellis, ...
    ModulationOrder=M, ...
    TracebackDepth=16);

シンボルあたりのビット数の TracebackDepth 倍に等しい遅延 (ビット) をもつエラー レート計算機を作成します。

errRate = comm.ErrorRate( ...
    ReceiveDelay=psktcdemod.TracebackDepth*log2(trellis.numInputSymbols));

ランダムなバイナリ データを生成して、それを 8-PSK TCM で変調します。AWGN チャネルを通して変調信号を渡し、その信号を復調します。誤り統計を計算します。

for counter = 1:10
    % Transmit frames of 250 2-bit symbols
    data = randi([0 1],500,1);
    % Modulate
    modSignal = psktcmod(data);
    % Pass through AWGN channel
    noisySignal = awgn(modSignal,7);
    % Demodulate
    receivedData = psktcdemod(noisySignal);
    % Calculate error statistics
    errorStats = errRate(data,receivedData);
end

BER とビット エラー数を表示します。

fprintf("Error rate = %5.2e\nNumber of errors = %d\n", ...
    errorStats(1),errorStats(2))
Error rate = 2.44e-02
Number of errors = 121

矩形 16-QAM TCM 変調を使用してデータを変復調する

AWGN チャネルのデータを、矩形 16-QAM TCM を使用して変復調します。ビット エラー レート (BER) を推定します。

QAM TCM 変調器と QAM TCM 復調器の System object を作成します。

rqamtcmod = comm.RectangularQAMTCMModulator;
rqamtcdemod = comm.RectangularQAMTCMDemodulator(TracebackDepth=16);

QAM TCM 復調器による遅延を決定します。復調器は、矩形 QAM を使用して変調された TCM 信号を、ビタビ アルゴリズムを使用して復調します。エラー レートの計算でビット エラー レートを正確に計算するには、受信サンプル数と送信サンプル数を一致させなければなりません。シンボルあたりのビットの数、および TCM 復調器内の復号化器のトレースバック長を使用して、システム内の遅延を計算します。

bitsPerSymbol = log2(rqamtcdemod.TrellisStructure.numInputSymbols);
delay = rqamtcdemod.TracebackDepth*bitsPerSymbol;

ReceiveDelay プロパティを delay に設定して、エラー レート計算機オブジェクトを作成します。

errRate = comm.ErrorRate(ReceiveDelay=delay);

バイナリ データを生成し、それを 16-QAM TCM で変調します。AWGN チャネルを通して信号を渡し、その信号を復調します。誤り統計を計算します。ループは、100 個のビット エラーが検出されるか、合計 1e7 ビットが送信されるまで実行されます。

% Initialize the error results vector.
errStats = [0 0 0];

while errStats(2) < 100 && errStats(3) < 1e7
    % Transmit frames of 200 3-bit symbols
    txData = randi([0 1],600,1);
    % Modulate
    txSig = rqamtcmod(txData);
    % Pass through AWGN channel
    rxSig = awgn(txSig,5);
    % Demodulate
    rxData = rqamtcdemod(rxSig);
    % Collect error statistics
    errStats = errRate(txData,rxData);
end

誤りデータを表示します。

fprintf("Error rate = %4.2e\nNumber of errors = %d\n", ...
    errStats(1),errStats(2))
Error rate = 2.03e-03
Number of errors = 100

参考

関数

オブジェクト

ブロック

関連する例

詳細