文档

convenc

卷积编码二进制数据

语法

代码= convc (msg,格子)
代码= convc (msg,trellis,puncpat)
代码= convc (msg,格子,…,init_state)
[code,final_state] = conc(…)

描述

代码= convc (msg,格子)编码二进制向量味精使用卷积编码器,其MATLAB网格结构为格子.有关MATLAB网格结构的详细信息,请参见卷积码的网格描述.中的每个符号味精log2 (trellis.numInputSymbols)位。向量味精包含一个或多个符号。输出向量代码包含一个或多个符号,每个符号由log2 (trellis.numOutputSymbols)位。

代码= convc (msg,trellis,puncpat)与上面的语法相同,只是它指定了一个穿刺模式,puncpat,以允许更高速率的编码。puncpat一定是向量1年代和0S,即0S表示被刺穿的部分。puncpat长度必须至少为log2 (trellis.numOutputSymbols)位。

代码= convc (msg,格子,…,init_state)允许编码器寄存器在指定的状态下启动init_stateinit_state之间的整数0而且trellis.numStates-1并且必须是最后一个输入参数。

[code,final_state] = conc(…)编码输入消息并返回编码器的状态final_statefinal_state格式与init_state

例子

全部折叠

使用2/3卷积码编码5个2位符号。

数据= randi([0 1],10,1);Trellis1 = poly2trellis([5 4],[23 35 0;0 5 13]);Code1 = convc (data,poly2trellis([5 4],[23 35 0;0 5 13]));

验证编码输出是15位,是输入序列长度的3/2倍,数据

长度(code1)
Ans = 15

显式定义编码器的网格结构,然后使用convenc编码10个1位符号。

Trellis2 = struct(“numInputSymbols”2,“numOutputSymbols”4...“numStates”4“nextStates”,[0 2;0 2;1 3;1 3],...“输出”,[0 3;1 2;3 0;2 1]);Code2 = conc (randi([0 1],10,1),trellis2);

调用时使用final和initial state参数convenc.编码部分数据,记录最终状态,供以后使用。

[code3,fstate] = conc (data(1:6),trellis1);

编码剩下的数据,使用fstate作为输入参数。

Code4 = convc (data(7:10),trellis1,fstate);

验证[code3;code4]匹配code1

isequal (code1 [code3;code4])
ans =逻辑1

为速率为1/2的前馈卷积码创建一个网格结构,并使用它来编码和解码随机比特流。

创建一个网格,其中约束长度为7,代码生成器指定为多项式字符向量的单元格数组。

格子= poly2trellis(7,{1 + x^3 + x^4 + x^5 + x^6'...1 + x + x^3 + x^4 + x^6'})
格子=带字段的结构:numInputSymbols: 2 numOutputSymbols: 4 numStates: 64 nextStates: [64x2 double] outputs: [64x2 double]

生成随机二进制数据,对数据进行卷积编码,并使用Viterbi算法解码数据。

数据= randi([0 1],70,1);codedData = convc(数据,格子);decodedData = vitdec(codedData,格子,34,“trunc”“硬”);

验证已解码的数据中没有误码。

decodedData biterr(数据)
Ans = 0

AWGN中硬决策和软决策维特比译码器误码率性能评估。将性能与未编码的64-QAM链路进行比较。

设置仿真参数。

清晰;关闭所有rng默认的M = 64;调制阶数k = log2(M);每个符号的比特数%EbNoVec = (4:10)';% Eb/No值(dB)numSymPerFrame = 1000;每帧QAM符号的百分比

初始化BER结果向量。

berEstSoft = 0(大小(EbNoVec));berEstHard = 0 (size(EbNoVec));

设置栅格结构和回溯长度为速率1/2,约束长度7,卷积码。

格子= poly2trellis(7,[171 133]);TBL = 32;速率= 1/2;

主处理循环执行以下步骤:

  • 生成二进制数据。

  • 卷积编码数据。

  • 对数据符号应用QAM调制。指定传输信号的单位平均功率。

  • 将调制信号通过AWGN信道传递。

  • 使用硬决策和近似LLR方法解调接收信号。指定接收信号的单位平均功率。

  • 维特比解码信号使用硬和非量化的方法。

  • 计算误码数。

循环继续处理数据,直到遇到100个错误或传输1e7位。

n = 1:长度(EbNoVec)将Eb/No转换为信噪比snrdB = EbNoVec(n) + 10*log10(k*rate);单位平均信号功率的噪声方差计算。noiseVar = 10.^(-snrdB/10);重置错误和位计数器[numErrsSoft,numErrsHard,numBits] = deal(0);numErrsSoft < 100 && numBits < 1e7生成二进制数据并转换为符号dataIn = randi([0 1],numSymPerFrame*k,1);%卷积编码数据dataEnc = convc (dataIn,格子);% QAM调制txSig = qammod(dataEnc,M,“InputType”“一点”“UnitAveragePower”,真正的);%通过AWGN通道rxSig = awgn(txSig,snrdB,“测量”);使用硬判定(位)和对噪声信号进行解调%软决策(近似LLR)接近。rxDataHard = qamdemod(rxSig,M,“OutputType”“一点”“UnitAveragePower”,真正的);rxDataSoft = qamdemod(rxSig,M,“OutputType”“approxllr”...“UnitAveragePower”,真的,“NoiseVariance”, noiseVar);维特比解码解调数据dataHard = vitdec(rxDataHard,trellis,tbl,“合同”“硬”);dataSoft = vitdec(rxDataSoft,trellis,tbl,“合同”“unquant”);计算帧中的误码数。调整%解码延迟,它等于回溯深度。numErrsInFrameHard = biterr(dataIn(1:end-tbl),dataHard(tbl+1:end));numErrsInFrameSoft = biterr(dataIn(1:end-tbl),dataSoft(tbl+1:end));增加错误计数器和比特计数器numErrsHard = numbershard + numErrsInFrameHard;numErrsSoft = numErrsSoft + numErrsInFrameSoft;numBits = numBits + numSymPerFrame*k;结束估计两种方法的误码率berEstSoft(n) = numErrsSoft/numBits;berEstHard(n) = numErrsHard/numBits;结束

绘制估计的软硬误码率数据。绘制一个未编码的64-QAM信道的理论性能。

semilogy (EbNoVec [berEstSoft berEstHard),“- *”)举行semilogy (EbNoVec berawgn (EbNoVec“qam”传说,M)) (“软”“硬”的未编码的“位置”“最佳”grid xlabel(“Eb /不(dB)”) ylabel (“误码率”

正如预期的那样,软决策解码产生了最好的结果。

例子

对于一些常用的穿刺模式的特定速率和多项式,请参阅最后三篇参考文献。

参考文献

G. C. Jr.克拉克和J.比布凯恩。,Error-Correction Coding for Digital Communications, New York, Plenum Press, 1981.

[2] Gitlin, Richard D., Jeremiah F. Hayes,和Stephen B. Weinstein,数据通信原则,纽约,全会,1992。

[3] Yasuda, Y.等人,“用于软决策Viterbi解码的高速率刺穿卷积码”,IEEE通讯汇刊,COM-32卷,第3期,315-319页,1984年3月。

[4] Haccoun, D.和G. Begin,“用于Viterbi和顺序解码的高速率刺穿卷积码”,IEEE通讯汇刊,第37卷,第11号,1113-1125页,1989年11月。

开始,G.,等等。,“Further results on high-rate punctured convolutional codes for Viterbi and sequential decoding,” IEEE Transactions on Communications, vol. 38, No. 11, pp 1922–1928, Nov. 1990.

扩展功能

C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。

R2006a之前介绍

这个话题有用吗?