主要内容

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

comm.TurboDecoder

并列连结复号化スキームを使用した入力信号の复号化

说明

comm.TurboDecoder系统对象™は,并列连结复号化スキームを使用して符号化された入力信号を复号化します。入力信号は通常,ベースバンド复调操作からの软判定出力です。详细は,並列連結畳み込み復号化スキームを参照してください。

並列連結復号化スキームを使用して入力信号を復号化するには、以下の手順に従います。

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

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

系统对象の机能の详细については,系统对象とはを参照してください。

作成

说明

turbodec=通信涡轮解码器は,ターボ符号化器系统对象を作成します。このオブジェクトは,"事後" 確率 (应用程序)構成復号化器を使用して、並列連結され、畳み込み符号化された入力データを繰り返し復号化します。

turbodec= comm.TurboDecoder(网格中间层指数努米特は,それぞれ网格结构InterleaverIndices,および努米特をもつターボ復号化器 系统对象を作成します。网格入力は网格结构プロパティで记述されているように指定しなければなりません。中间层指数入力はInterleaverIndicesプロパティで记述されているように指定しなければなりません。努米特入力は裸体プロパティで记述されているように指定しなければなりません。

turbodec= comm.TurboDecoder(___名称价值は、前の構文の入力引数の組み合わせに加えて、1.つ以上の名前と値のペアを使用してプロパティを設定します。各プロパティ名を引用符で囲みます。たとえば、comm.TurboDecoder('InterleaverIndicesSource','Input port')は,呼び出し时にSystem对象に入力引数として提供されるインターリーバーインデックスを使用してターボ复号化器系统对象を构成します。

プロパティ

すべて展開する

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

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

プロパティ値の変更の詳細については、系统对象を使用したMATLABでのシステム设计を参照してください。

构成畳み込み符号のトレリス表现。符号化率K / Nの符号に対するトレリス表现を含む构造体として指定します.Kは入力ビットストリーム数を表し,Nは出力ビットストリーム数を表します。

メモ

ターボ符号化器のķは1でなければなりません。详细は,符号化率を参照してください。

トレリス構造体は、関数多年生植物を使用して作成するか,手动で作成することができます。この构造体の详细については,畳み込み符号のトレリス表現および関数伊斯特雷利斯を参照してください。

トレリス构造体には次のフィールドがあります。

符号化器への入力シンボルの数0.2K.と等しい整数として指定します。ここで,Kは入力ビットストリームの数です。

データ型:双重的

符号化器からの出力シンボルの数0.2Nと等しい整数として指定します。ここで、Nは出力ビット ストリームの数です。

データ型:双重的

符号化器内の状態の数。2.のべき乗として指定します。

データ型:双重的

现在の状态と现在の入力のすべての组み合わせの次の状态。整数の行列として指定します。最大サイズはnumStates行2K.列でなければなりません。

データ型:双重的

现在の状态と现在の入力のすべての组み合わせの出力0.8进数の行列として指定します。最大サイズはnumStates行2K.列でなければなりません。

データ型:双重的

データ型:塑造

インターリーバーインデックスのソース。“财产”または“输入端口”として指定します。

  • このプロパティを“输入端口”に设定すると,オブジェクトは,オブジェクトを呼び出すときに设定された入力インターリーバーインデックス中间层指数を使用して実行されます。インターリーバー インデックスと符号化された入力信号のベクトル長と値は、オブジェクトを呼び出すたびに変更できます。

  • このプロパティを“财产”に设定すると,オブジェクトはInterleaverIndicesプロパティに指定したインターリーバー インデックスを使用します。

データ型:烧焦|一串

インターリーバーインデックス。整数の列ベクトルとして指定します。ベクトルの长さは大号でなければなりません。ここで,Lは复号化された出力メッセージdecmsgの長さです。ベクトルの各要素は、範囲 [1升]の整数で一意でなければなりません。インターリーバー インデックスは、復号化器で入力ビットを並べ替えるために使用されるマッピングを定義します。

調整可能:

依存関係

このプロパティを有効にするには、InterleaverIndicesSourceプロパティを“财产”に設定します。

データ型:双重的

复号化アルゴリズム。“真实应用程序”“最大值*”または“马克斯”として指定します。このプロパティを“真实应用程序”に設定すると、オブジェクトは真の 应用程序復号化を実装します。このプロパティを“最大值*”または“马克斯”に設定すると、オブジェクトは近似を使用して、計算速度を上げます。詳細は、APP复号化器を参照してください。

データ型:烧焦|一串

スケーリング ビット数。範囲 [0, 8] の整数として指定します。このプロパティは、計算中に精度が失われないように、構成復号化器が入力データのスケーリングに使用するビット数を設定します。構成復号化器は入力に 2.NumScalingBitsを掛けて、同じ係数で事前出力を割ります。詳細は、APP复号化器を参照してください。

依存関係

このプロパティを有効にするには、算法プロパティを“最大值*”に設定します。

データ型:双重的

复号化の反复回数。正の整数として指定します。このプロパティは,オブジェクトへの各呼び出しに使用される复号化反复の回数を设定します。オブジェクトは,符号化されていない出力ビットの対数尤度比(LLR)への更新を反复して提供します。オブジェクトの出力は最终LLR更新の硬判定出力です。

データ型:双重的

使用法

说明

decmsg=turbodec(码字は,トレリス构造体とインターリーバーインデックスで指定された并列连结畳み込み复号化スキームを使用して入力符号语を复号化します。turbodecはバイナリ復号化されたデータを返します。詳細は、並列連結畳み込み復号化スキームを参照してください。

decmsg=turbodec(码字中间层指数はさらにインターリーバー インデックスを指定します。この構文を有効にするには、InterleaverIndicesSourceプロパティを“输入端口”に設定します。インターリーバー インデックスは、復号化器で入力を並べ替えるために使用されるマッピングを定義します。

入力引数

すべて展開する

並列連結符号語。長さ Mの列ベクトルとして指定します。ここで、Mは並列連結符号語の長さです。

データ型:双重的|仅有一个的

インターリーバーインデックス。整数の列ベクトルとして指定します。ベクトルの长さは大号でなければなりません。ここで,Lは复号化された出力メッセージdecmsgの長さです。ベクトルの各要素は、範囲 [1升]の整数で一意でなければなりません。インターリーバー インデックスは、復号化器で入力ビットを並べ替えるために使用されるマッピングを定義します。

依存関係

このプロパティを有効にするには、InterleaverIndicesSourceプロパティを“输入端口”に設定します。

データ型:双重的

出力引数

すべて展開する

复号化されたメッセージ。长さ大号のバイナリ列ベクトルとして返されます。ここで大号は复号化された出力メッセージの长さです。この出力信号は,码字入力のデータ型と同じです。

オブジェクト关数

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

释放(OBJ)

すべて展開する

系统对象のアルゴリズムの実行
释放 リソースを解放し、系统对象のプロパティ値と入力特性の変更を可能にします。
重置 系统对象の内部状態のリセット

すべて折りたたむ

AWGNチャネル上でのBPSKデータの送受信を,ターボ符号化および复号化を使用してシミュレートします。

シミュレーションパラメーターを指定してから,有效な符号化率とノイズ分散を计算します.BPSK変调の场合,シンボルあたりのビット数(BPS)が1のため, E. S. / N 0. E. B. / N 0. と等価になります。他の変调方式でのこの符号の再利用を容易にするために,この例の计算にはbps的项が含まれています。パケット长,トレリス构造体,および反复回数を定义します。 E. S. / N 0. および符号化率を使用してノイズ分散を計算します。結果が繰り返し再現されるように、乱数発生器を既定の状態に設定します。

modOrd = 2;%调制阶数bps=log2(modOrd);每个符号位%的EbNo = 1;%每比特能量与噪声功率谱密度之比(dB)EsNo=EbNo+10*log10(bps);%每符号能量与噪声功率谱密度之比(dB)L = 256;%以位为单位的输入数据包长度网格=poly2trellis(4,[13 15 17],13);numiter=4;n=log2(网格.numoutsymbols);numails=log2(网格.numStates)*n;M=L*(2*n-1)+2*numails;%输出的码字的分组长度率= L / M;%编码率snrdB=EsNo+10*log10(费率);%信噪比(dB)noiseVar = 1./(10.^(snrdB/10));%噪声方差rng违约

ランダムなインターリーバー インデックスを生成します。

intrlvrindexes=randperm(L);

ターボ符号化器および復号化器のペアを作成します。定義されたトレリス構造体とランダムなインターリーバー インデックスを使用します。最大 4.回の反復を実行するように復号化器を構成します。

turboenc=comm.TurboEncoder(网格,intrlvrindex);turbodec=comm.TurboDecoder(网格,intrlvrindex,numiter);

BPSK変调器と复调器のペアを作成し,复调器がLLR法を使用して判定される软ビットを出力するようにします。

bpskmod = comm.BPSKModulator;bpskdemod = comm.BPSKDemodulator('DecisionMethod'“对数似然比”...“差异”,noiseVar);

AWGNチャネル オブジェクトと誤り率オブジェクトを作成します。

awgnchan = comm.AWGNChannel(“噪音法”“差异”“差异”,noiseVar);错误率=通信错误率;

主処理ループは以下のステップを実行します。

  1. バイナリ データを生成します。

  2. データをターボ符号化します。

  3. 符号化したデータを変调します。

  4. AWGNチャネルを通して、変調された信号を渡します。

  5. LLRを使用して軟ビットを出力し、ノイズの多い信号を復調します。

  6. 復調されたデータをターボ復号化する。復調器からのビット マッピングはターボ復号化器が想定するマッピングとは逆であるため、復号化器の入力は復調信号の逆数を使用しなければなりません。

  7. 误り统计を计算します。

为了frmIdx=1:100 data=randi([0 1],L,1);encodedData=turboenc(数据);modSignal=bpskmod(encodedData);receivedSignal=awgnchan(modSignal);demodSignal=bpskdemod(receivedSignal);receivedBits=turbodec(-demodSignal);ERRSTATS=errrate(数据,receivedBits);结尾

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

fprintf中('位错误率=%5.2e\n错误数=%d\n总位=%d\n',errorStats)
误码率=2.34e-04错误数=6总比特数=25600

AWGNチャネルで 16-QAM信号とターボ符号を使用してエンド ツー エンド通信リンクをシミュレートします。フレーム処理ループ内で、パケット サイズは 500ビット、1000ビットまたは 1500ビットにランダムに選択されます。パケット サイズが変化するため、ターボ符号化器および復号化器に、関連付けられた 系统对象の入力引数としてインターリーバー インデックスが提供されます。

変调次数および E. B. / N 0. を设定します。変调次数および E. B. / N 0. に基づいて、シンボルあたりのビット数とシンボルあたりのエネルギー対ノイズ比 ( E. S. / N 0. )を计算します。缲り返し可能な结果を取得するには,乱数発生器を既定の状态に设定します。

modOrder=16;bps=log2(modOrder);每个符号位%的EbNo = 2.8;%每比特能量与噪声功率谱密度之比(dB)EsNo=EbNo+10*log10(bps);%每符号能量与噪声功率谱密度之比(dB)rng违约

ターボ符号化器および復号化器のペアを作成します。パケット長はフレームごとに異なるため、インターリーバー インデックスが、実行時に 系统对象の入力引数により提供されるように指定します。復号化器が反復を 4.回実行するように指定します。

turboEnc = comm.TurboEncoder(“InterleaverIndicesSource”“输入端口”); turboDec=通信turboDec解码器(“InterleaverIndicesSource”“输入端口”“NumIterations”,4);网格=poly2trellis(4,[13,15,17],13);n=log2(turboEnc.GrillisStructure.NumOutSymbols);numails=log2(turboEnc.GrillisStructure.numStates)*n;

误り率オブジェクトを作成します。

errRate = comm.ErrorRate;

フレーム処理ループは以下のステップを実行します。

  1. ランダムなパケット長を選択し、ランダムなバイナリ データを生成します。

  2. 出力符号語長と符号化率を計算します。

  3. 序列号比 (信噪比)とノイズ分散を計算します。

  4. インターリーバー インデックスを生成します。

  5. データをターボ符号化します。

  6. 16-QAM変调を适用して,平均信号强度を正规化します。

  7. AWGNチャネルを通して、変調された信号を渡します。

  8. LLR手法を使用してノイズを含む信号を復調し、軟ビットを出力して、平均信号強度を正規化します。

  9. データをターボ復号化します。復調器からのビット マッピング次数はターボ復号化器が想定するマッピング次数とは逆であるため、復号化器の入力は復調信号の逆数を使用しなければなりません。

  10. 误り统计を计算します。

numFrames = 100;为了pktIdx = 1:numFrames L = 500 *兰迪([1 3],1,1);%数据包长度(位)数据=兰迪([0 1],L,1);M = L *(2 * N  -  1)+ 2个* numTails;%输出的码字的分组长度率= L / M;%当前数据包的编码率snrdB=EsNo+10*log10(费率);%信噪比(dB)noiseVar = 1./(10.^(snrdB/10));%噪声方差intrlvrindexes=randperm(L);encodedData=turboEnc(数据,intrlvrindexes);modSignal=qammod(encodedData,modOrder,“输入类型”“比特”“单位平均功率”,对);接收信号=awgn(modSignal,snrdB);解调信号=qamdemod(接收信号、modOrder、,“输出类型”“llr”...“单位平均功率”符合事实的“噪音回避”,noiseVar);receivedBits=turboDec(-解调信号,INTRLVRINDEX);%解调信号被否定errorStats=错误率(数据,接收比特数);结尾

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

fprintf中('位错误率=%5.2e\n错误数=%d\n总位=%d\n',errorStats)
误码率=错误的8.51e-04数= 80个比特总数= 94000

详细

すべて展開する

参照

[1]Benedetto的,S.,G.蒙托尔西,D. Divsalar,和F. Pollara。“软输入软输出最大后验(MAP)模块以解码并行和串行级联码”。喷气推进实验室的TDA进度报告,42-127,(1996年11月)。

[2]卷积码MAP解码器的直观证明和简化实现IEEE通信选定领域杂志16,第2号(1998年2月):260-64。https://doi.org/10.1109/49.661114.

[3]Berrou,C.,A Glavieux和P. Thitimajshima。“近香农极限纠错编码和解码:Turbo码”IEEE通信国际会议,瑞士日内瓦,1993年1064至1070年五月, - ICC 93的诉讼。https://doi.org/10.1109/icc.1993.397441。

[4]施莱格尔,基督教和兰斯·佩雷斯。网格和Turbo编码。IEEE出版社系列数字和移动通信。Piscataway, NJ ; Hoboken, NJ: IEEE Press ; Wiley-Interscience, 2004.

[5]3GPP TS 36.212.“多路复用和信道编码”,《第三代合作伙伴计划》;技术规范组无线接入网络;演进通用地面无线接入(E-UTRA)。https://www.3gpp.org

拡張機能

R2012aで​​导入