ドキュメンテーション センター

  • 評価版
  • 製品アップデート

このページは前リリースの情報です。該当の英語のページはこのリリースで更新されています。このリリースの英語のドキュメンテーションを参照するには、言語設定を United States に変更してください。

パンクチャドたたみ込み符号化

この例では、たたみ込みエンコーダーとビタビ デコーダー System object を使用して、パンクチャド符号化システムをシミュレートする方法を示します。ビタビ デコーダーの複雑度は符号化率に伴い急激に増大します。パンクチャとは、標準レートの 1/2 のエンコーダーとデコーダーを使用して高レートコードのエンコードとデコードを可能にする手法です。

はじめに

この例では、ランダムな 2 値情報源、たたみ込みエンコーダー、BPSK 変調器、加法性ホワイト ガウス ノイズ (AWGN) チャネルおよびビタビ デコーダーで構成される通信システムのシミュレーションを紹介します。また、シミュレーションを実行してビット誤り率 (BER) 曲線を求め、それらの曲線を理論的な限界と比較する方法を示します。

初期化

パンクチャを使用したたたみ込み符号化

レート 1/2、拘束長 7 の ConvolutionalEncoderConvolutionalEncoder System object を作成します。このエンコーダーは、入力として 1 ビットのシンボルを取り、出力として 2 ビットのシンボルを生成します。入力として 3 ビットのメッセージ ワードを想定する場合、エンコーダーは 6 ビットの符号語出力を生成します。

hConvEnc = comm.ConvolutionalEncoder(poly2trellis(7, [171 133]));

パンクチャ パターンを指定し、パンクチャ パターン ベクトル [1;1;0;1;1;0] を使用して前のレート 1/2 のコードからレート 3/4 のコードを作成します。このパンクチャ パターン ベクトル内の 1 は位置 1、2、4、および 5 にあるビットが送信されることを示し、ゼロは位置 3 および 6 にあるビットが送信信号からパンクチャ (削除) されることを示します。パンクチャした結果、パンクチャド コードは入力の 3 ビットごとに 4 ビットの出力を生成するようになります (パンクチャする前は、6 ビットの出力が生成されていました)。これにより、レート 3/4 コードになります。実行する例では、パンクチャ パターン ベクトルの長さは 6 の整数倍でなければなりません。これは、3 ビットの入力がレート 1/2 たたみ込みエンコーダーにより 6 ビットの出力に変換されるからです。

たたみ込みエンコーダー System object である hConvEnc で目的のパンクチャ パターンを設定するには、PuncturePatternSource プロパティを 'Property' に設定し、PuncturePattern プロパティを [1;1;0;1;1;0] に設定します。

hConvEnc.PuncturePatternSource = 'Property';
hConvEnc.PuncturePattern = [1;1;0;1;1;0];

変調器とチャネル

BPSKModulatorBPSKModulator System object を作成し、エンコードされたデータをチャネル経由で 2 値位相シフト キーイング変調を使用して送信します。

hMod = comm.BPSKModulator;

AWGNChannelAWGNChannel System object を作成します。チャネルの NoiseMethod プロパティを 'Signal to noise ratio (Eb/No)' に設定して、ビットあたりのエネルギーとノイズ パワー スペクトル密度の比 (Eb/No) を使用してノイズ レベルを指定します。シミュレーション実行時は、さまざまな値の Eb/No 比について、チャネル オブジェクトの EbNo プロパティを変更してコーディング システムをテストします。BPSK 変調器の出力は単位電力信号を生成します。したがって SignalPower プロパティを 1 ワットに設定します。使用するシステムは 2 値です。したがって SamplesPerSymbol プロパティを 1 に設定します。

hChan = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (Eb/No)',...
  'SignalPower', 1, 'SamplesPerSymbol', 1);

デパンクチャを使用したビタビ デコード

たたみ込みエンコーダー用に指定されたパンクチャド コードをデコードするよう ViterbiDecoderViterbiDecoder System object を構成します。この例ではビタビ デコーダーへの非量子化入力を想定するので、InputFormat プロパティを 'Unquantized' に設定します。

hVitDec = comm.ViterbiDecoder(poly2trellis(7, [171 133]), ...
  'InputFormat', 'Unquantized');

一般的にたたみ込みエンコーダーとビタビ デコーダーに使用するパンクチャ パターン ベクトルは同じでなければなりません。パンクチャ パターンを指定するには、ビタビ デコーダー System object である hVitDec の PuncturePatternSource プロパティを 'Property' に設定します。PuncturePattern プロパティをたたみ込みエンコーダーに使用するのと同じパンクチャ パターン ベクトルに設定します。

パンクチャされたビットは送信されないので、その値を示す情報はありません。その結果、デコード プロセスではそれらの値は無視されます。

hVitDec.PuncturePatternSource =  'Property';
hVitDec.PuncturePattern = hConvEnc.PuncturePattern;

パンクチャのないレート 1/2 コードの場合、通常はビタビ デコーダーのトレースバック長を 40 に近い値に設定します。パンクチャド コードをデコードするには、これより高い値が必要です。これは、これらのパンクチャがもたらすあいまいさを解決するのに十分なデータをデコーダーに与えるためです。この例では、トレースバック長に 96 を使用します。この値は、Viterbi decoder オブジェクト hVitDec の TraceBackDepth プロパティを使用して設定します。

hVitDec.TracebackDepth = 96;

誤り率の計算

ErrorRateErrorRate 計算機 System object を作成して、デコードされたビットと元の送信されたビットを比較します。誤り率計算機オブジェクトの出力は、計算されたビット誤り率 (BER)、観測された誤り数、および処理されたビットの数を含む 3 要素ベクトルです。ビタビ デコーダーは、出力がデコードされたビット ストリームにトレースバック長と等しい遅延を発生します。この遅延を考慮に入れるには、誤り率計算機 System object の ReceiveDelay プロパティを 96 に設定します。

hErrorCalc = comm.ErrorRate('ReceiveDelay', hVitDec.TracebackDepth);

ストリーム処理ループ

さまざまなノイズ レベルについて、パンクチャド符号化システムの BER の性能を分析します。

符号化されない Eb/No 比と符号化された Eb/No 比の値

一般に、システム性能は、チャネル エンコーダーの入力で得られるビットあたりのエネルギーとノイズの電力スペクトル密度の比 (Eb/No) の値から測定します。その理由は、この値がシステム エンジニアによって直接制御されるためです。2 ~ 5 dB の Eb/No 値について、符号化 システムの性能を分析します。

EbNoEncoderInput = 2:.5:5; % in dB

AWGN チャネルに入力される信号はエンコードされた信号です。エンコーダー出力でのエネルギー比に対応するように Eb/No 値を変換します。エンコーダーに 3 ビットを入力して 4 ビットの出力を得る場合、エネルギー関係は次のように 3/4 の比率で与えられます。

EbNoEncoderOutput = EbNoEncoderInput + 10*log10(3/4);

シミュレーション ループ

BER 性能の結果を得るには、通信システムを介して 3,000 ビットのフレームを送信します。各 Eb/No 値について、誤りまたは送信が特定の数に達したらシミュレーションをすぐに停止します。結果の精度を高めるには、目標の誤り数または最大送信回数を引き上げます。

frameLength = 3000; % this value must be an integer multiple of 3
targetErrors = 300;
maxNumTransmissions = 5e6;

エンコードされた Eb/No 値についてループします (シミュレーションが完了するまで数秒かかります)。

BERVec = zeros(3,length(EbNoEncoderOutput)); % Allocate memory to store results
for n=1:length(EbNoEncoderOutput)
  reset(hErrorCalc)
  reset(hConvEnc)
  reset(hVitDec)
  hChan.EbNo = EbNoEncoderOutput(n); % Set the channel EbNo value for simulation
  while (BERVec(2,n) < targetErrors) && (BERVec(3,n) < maxNumTransmissions)
    % Generate binary frames of size specified by the frameLength variable
    data = randi([0 1], frameLength, 1);
    % Convolutionally encode the data
    encData = step(hConvEnc, data);
    % Modulate the encoded data
    modData = step(hMod, encData);
    % Pass the modulated signal through an AWGN channel
    channelOutput = step(hChan, modData);
    % Pass the real part of the channel complex outputs as the unquantized
    % input to the Viterbi decoder.
    decData = step(hVitDec, real(channelOutput));
    % Compute and accumulate errors
    BERVec(:,n) = step(hErrorCalc, data, decData);
  end
end

結果と理論上の曲線との比較

[ 1 ] に従って、パンクチャド コードのビット誤り率限界の近似値を使用して、シミュレーション結果を比較します。次のコマンドは、2:.02:5 における Eb/No 値の合計の最初の 7 項を使用して、この限界の近似値を計算します。nerr に使用する値は [ 2 ] の表 2 にあります。

dist = 5:11;
nerr = [42 201 1492 10469 62935 379644 2253373];
codeRate = 3/4;
bound = nerr*(1/6)*erfc(sqrt(codeRate*(10.0.^((2:.02:5)/10))'*dist))';

結果をプロットします。シミュレーションに指定した目標の誤り数または最大送信回数が小さすぎる場合、曲線近似アルゴリズムにエラーが発生することがあります。

berfit(EbNoEncoderInput,BERVec(1,:)); % Curve-fitted simulation results
hold on;
semilogy((2:.02:5),bound,'g'); % Theoretical results
legend('Empirical BER','Fit for simulated BER', 'Theoretical bound on BER')
axis([1 6 10^-6 10^-1])

場合によっては、低いビット誤り率でシミュレーション結果の誤り率が限界を少し超えることがあります。このような結果になるのは、シミュレーションの分散 (観察されたビット誤り数が 500 未満の場合) またはデコーダーの有限トレースバック長が原因です。

まとめ

System object をいくつか使用して、たたみ込みコーディングとパンクチャのある通信システムをシミュレートしました。システムをシミュレートして、さまざまな Eb/No 比の値に対する BER 性能を求めました。それらの BER 結果を理論的限界と比較しました。

参考文献

  1. Yasuda, Y., K. Kashiki, and Y. Hirata, "High Rate Punctured Convolutional Codes for Soft Decision Viterbi Decoding," IEEE Transactions on Communications, Vol. COM-32, March, 1984, pp. 315-319

  2. Begin, G., Haccoun, D., and Paquin, C., "Further results on High-Rate Punctured Convolutional Codes for Viterbi and Sequential Decoding," IEEE Transactions on Communications, Vol. 38, No. 11, November, 1990, p. 1923

この情報は役に立ちましたか?