主要内容

高速率卷积编码了Turbo编码

级联卷积编码提供高可靠性和获得了声望和使用涡轮码。的comm.TurboEncodercomm.TurboDecoder系统对象支持率仅1 / n卷积金宝app码。这个例子展示了两个速度的并行连接2/3卷积码实现一个有效的利率1/3涡轮代码通过使用comm.ConvolutionalEncodercomm.APPDecoder系统对象。

系统参数

blkLength = 1024;%块长度EbNo = 0:5;% Eb /不值遍历numIter = 3;%的译码迭代次数maxNumBlks = 1 e2;%最大数量的块/ Eb /没有价值

卷积编码器/解码器参数

格子= poly2trellis (4 [5]、[23 35 0;0 5 13]);k = log2 (trellis.numInputSymbols);%的数量输入比特n = log2 (trellis.numOutputSymbols);%输出位的数量intrIndices = randperm (blkLength / k)”;%随机交叉decAlg =“真正的应用程序”;%解码算法modOrder = 2;% PSK-modulation秩序

初始化系统对象

初始化系统对象™卷积编码,软件解码,BPSK调制和解调,摘要频道,出错率计算。解调输出软位方法使用对数似然比。

cEnc1 = comm.ConvolutionalEncoder (“TrellisStructure”格子,“TerminationMethod”,“截断”);cEnc2 = comm.ConvolutionalEncoder (“TrellisStructure”格子,“TerminationMethod”,“截断”);cAPPDec1 = comm.APPDecoder (“TrellisStructure”格子,“TerminationMethod”,“截断”,“算法”,decAlg);cAPPDec2 = comm.APPDecoder (“TrellisStructure”格子,“TerminationMethod”,“截断”,“算法”,decAlg);bpskMod = comm.BPSKModulator;bpskDemod = comm.BPSKDemodulator (“DecisionMethod”,的“对数似然比,“VarianceSource”,输入端口的);awgnChan = comm.AWGNChannel (“NoiseMethod”,“方差”,“VarianceSource”,输入端口的);bitError = comm.ErrorRate;%的误码率测量

框架处理循环

通过一系列的循环 E b / N 0 值来生成结果的误码率性能。的helperTurboEnchelperTurboDec辅助函数执行turbo编码和解码。

数量= 0(长度(EbNo), 1);bitsPerSymbol = log2 (modOrder);turboEncRate = k / n (2 *);ebNoIdx = 1:长度(EbNo)从EbNo %计算噪声方差EsNo = EbNo (ebNoIdx) + 10 * log10 (bitsPerSymbol);SNRdB = EsNo + 10 * log10 (turboEncRate);%占编码速率noiseVar = 10 ^ (-SNRdB / 10);numBlks = 1: maxNumBlks%生成二进制数据data =兰迪([0 1]blkLength 1);% Turbo编码数据[encodedData, outIndices] = helperTurboEnc (数据、cEnc1 cEnc2,格子、blkLength intrIndices);%调制编码数据modSignal = bpskMod (encodedData);%通过通过AWGN信道调制信号receivedSignal = awgnChan (modSignal noiseVar);%解调的信号用LLR输出软比特demodSignal = bpskDemod (receivedSignal noiseVar);%涡轮解调解码数据receivedBits = helperTurboDec (-demodSignal、cAPPDec1 cAPPDec2,格子、blkLength intrIndices、outIndices numIter);%计算误差的统计数据errorStats = bitError(数据、receivedBits);结束数量(ebNoIdx) = errorStats (1);重置(bitError);结束

显示结果

而实际的无线系统,如LTE和冲洗液,指定基地1 / n为涡轮码卷积码,结果显示使用更高的卷积码作为涡轮码率是可行的。

图;semilogy (EbNo误码率,“* - - - - - -”);网格;包含(“E_b / N_0 (dB)”);ylabel (“方方面面”);标题(为涡轮的高速率卷积码编码的);传奇([“N =”num2str (blkLength)”、“num2str (numIter)“迭代”]);

图包含一个坐标轴对象。坐标轴对象与标题高速率卷积编码Turbo编码包含一个类型的对象。这个对象表示N = 1024, 3迭代。

辅助函数

函数[yEnc, outIndices] = helperTurboEnc (数据、hCEnc1 hCEnc2,格子,blkLength intrIndices)% Turbo编码使用两个并行卷积编码器。%没有尾巴部分处理和不承担任何输出流刺穿。%格子参数k = log2 (trellis.numInputSymbols);n = log2 (trellis.numOutputSymbols);cLen = blkLength * n / k;punctrVec = [0, 0, 0, 0, 0, 0);%假定所有流输出N =长度(找到(punctrVec = = 0));%编码随机数据位日元= hCEnc1(数据);y2 = hCEnc2 (重塑(intrlv(重塑(数据、k []), intrIndices), [], 1));y1D =重塑(y1 (1: cLen), n, []);y2D =重塑(y2 (1: cLen), n, []);yDTemp = [y1D;y2D];y = yDTemp (:);%生成输出指标向量使用刺穿向量idx = 0: 2 * n: (blkLength - 1) * 2 * (n / k);punctrVecIdx =找到(punctrVec = = 0);dIdx = repmat (idx N 1) + punctrVecIdx;outIndices = dIdx (:);yEnc = y (outIndices);结束函数yDec = helperTurboDec (yEnc、cAPPDec1 cAPPDec2,格子,blkLength、intrIndices inIndices numIter)%涡轮使用两个无网格概率(APP)解码器解码%格子参数k = log2 (trellis.numInputSymbols);n = log2 (trellis.numOutputSymbols);rCodLen = 2 * (n / k) * blkLength;typeyEnc =类(yEnc);根据outIndices %重新订货编码比特x = 0 (rCodLen, 1);x (inIndices) = yEnc;%生成第一编码器的输出码=重塑(x (1: rCodLen), 2 * n, []);lc1D =码(1:n:);Lc1_in = lc1D (:);%生成第二编码器的输出lc2D =码(n + 1:2 * n,:);Lc2_in = lc2D (:);%初始化未编码数据输入Lu1_in = 0 (blkLength 1 typeyEnc);%涡轮解码着干活= 0 (blkLength / k, k, typeyEnc);iterIdx = 1: numIter [Lu1_out ~] = cAPPDec1 (Lu1_in Lc1_in);tmp = Lu1_out (1: blkLength);Lu2_in =重塑(tmp k []) ';[Lu2_out, ~] = cAPPDec2 (:重塑(Lu2_in (intrIndices)”, [], 1), Lc2_in);着干活(intrIndices:) =重塑(Lu2_out (1: blkLength), k, []) ';Lu1_in =重塑(着干活”,[],1);结束%为最终的迭代计算llr和解码比特llr =重塑(着干活”,[],1)+ Lu1_out (1: blkLength);yDec =投((llr > = 0), typeyEnc);结束