主要内容

convenc

卷积编码二进制消息

描述

例子

codedout= convenc (味精,格子)通过卷积编码器编码输入二进制消息由一个格子结构。在MATLAB格子结构的详细信息®,请参阅格子卷积编码的描述。输入消息包含一个或多个符号,每一种都包括log2 (格子numInputSymbols)位。编码输出,codedout包含一个或多个符号,每一个都包括log2 (格子numOutputSymbols)位。

例子

codedout= convenc (味精,格子,puncpat)指定一个穿刺模式,puncpat,使编码速度高于不编码。

对于一些常用的穿刺模式特定的利率和多项式,看到最后三个引用。

例子

codedout= convenc (___,istate)使编码器开始在国家指定的寄存器istate。指定istate最后输入参数之前的任何输入参数组合在前面的语法。

例子

(codedout,fstate)= convenc (___)还返回编码器的最终状态。当调用convenc迭代,fstate通常用于设置istate为后续的调用convenc函数。

例子

全部折叠

创建卷积码采用框架结构。您可以定义使用的格子poly2trellis函数或通过手动指定格子结构。这个例子显示了这两种方法。

定义框架通过使用poly2trellis函数

定义框架结构用于配置编码器使用poly2trellis函数。

trellis_a = poly2trellis (4 [5]、[23 35 0;0 5 13])
trellis_a =结构体字段:numInputSymbols: 4 numOutputSymbols: 8 numStates: 128 nextStates: (x4 128双)输出:(x4 128双)

使用框架结构配置convenc函数。编码5二毛五分的符号K/N率2/3卷积码使用convenc函数。

K = log2 (trellis_a.numInputSymbols)%的数量输入比特流
K = 2
N = log2 (trellis_a.numOutputSymbols)%的输出比特流
N = 3
numReg = log2 (trellis_a.numStates)%的编码器寄存器
numReg = 7
numSymPerFrame = 5;%符号每帧的数量data =兰迪([0,1],K * numSymPerFrame, 1);[code_a, fstate_a] = convenc(数据,trellis_a);

验证编码输出是15位,3/2 (N/K)*输入序列的长度,数据

code_a”
ans =1×151 1 1 0 0 1 1 1 1 1 0 1 0 1 0
长度(数据)
ans = 10
长度(code_a)
ans = 15

手动定义框架

手动定义一个框架结构K/N1/2卷积码率。

trellis_b =结构(“numInputSymbols”2,“numOutputSymbols”4“numStates”4“nextStates”,(0 2;1 0 2;3,1 3],“输出”,(0 3;1 2 3 0;2 1])
trellis_b =结构体字段:numInputSymbols: 2 numOutputSymbols: 4 numStates: 4 nextStates: [4 x2双]输出:[4 x2双)

使用框架结构配置convenc当编码10比特符号函数。

K = log2 (trellis_b.numInputSymbols)%的数量输入比特流
K = 1
N = log2 (trellis_b.numOutputSymbols)%的输出比特流
N = 2
numReg = log2 (trellis_b.numStates)%的编码器寄存器
numReg = 2
numSymPerFrame = 10;%符号每帧的数量data =兰迪([0,1],K * numSymPerFrame, 1);code_b = convenc(数据、trellis_b);

验证编码输出是20位,也就是2/1 (N/K)*输入序列的长度,数据

code_b”
ans =1×200 0 1 1 0 0 1 0 1 0 1 1 0 1 1 1 0 0 0 1)
长度(数据)
ans = 10
长度(code_b)
ans = 20

用刺穿来调整K/N卷积编码器的编码速率从1/2到3/4。

初始化参数的编码操作。

(171 133)格子= poly2trellis(7日)
格子=结构体字段:numInputSymbols: 2 numOutputSymbols: 4 numStates: 64 nextStates: [64 x2双]输出:[64 x2双)
puncpat = (1; 1, 0);

利率计算不,戳破了代码。

K = log2 (trellis.numInputSymbols);%的输入流N = log2 (trellis.numOutputSymbols);%的输出流unpunc_coderate = K / N;%不编码速率punc_coderate = (K / N) *长度(puncpat) /笔(puncpat);%戳破了编码速率流(“K % d和N % d。不编码率% 3.2 f和穿刺代码率% 3.2 f。\ n”,K, N, unpunc_coderate punc_coderate)
K是1,N等于2。不编码率是0.50和爆代码率是0.75。

卷积编码没有刺穿的所有1 s三位消息应用于编码输出。然后,卷积编码和刺穿相同的消息。

味精= 1(长度(puncpat), 1);unpuncturedcode = convenc(味精,格子);puncturedcode = convenc(味精、格子、puncpat);

显示消息,不代码,戳破了代码,穿刺的模式。

味精的
ans =1×31 1 1
unpuncturedcode”
ans =1×61 1 0 1 1 0
puncpat”
ans =1×31 1 0
puncturedcode”
ans =1×41 1 1 1

没有刺穿,配置的卷积编码输入三个信息比特和输出六个编码比特。确认最终的编码速率匹配预期的编码速率的1/2。

长度(味精)/ (unpuncturedcode)
ans = 0.5000

刺穿,位在位置1和2的输入消息传输,而在位置3。每三位的输入,刺穿了代码生成的四位输出。确认最终的编码速率匹配预期的编码速率的3/4。

长度(味精)/ (puncturedcode)
ans = 0.7500

使用框架结构配置1/2前馈卷积码率在这个图。

图的速度前馈1/2卷积编码器与codegenerators 7[6]和约束长度3

创建一个框架结构,设置约束长度3和指定代码生成器的向量八进制值。图表示的二进制值和多项式形式,表明最左边的位是最高有效位(MSB)。二进制向量[1 1 0]表示八进制6和对应于二进制数字的上一行图。(1 1 1)二进制向量表示八进制7和对应于低排的二进制数字图。这些二进制数字显示连接的输出寄存器的两条图。

格子= poly2trellis (3、7 [6])
格子=结构体字段:numInputSymbols: 2 numOutputSymbols: 4 numStates: 4 nextStates: [4 x2双]输出:[4 x2双)

生成随机二进制数据。卷积编码的数据,通过使用指定的框架结构。解码编码数据通过使用指定的维特比算法框架结构,34岁的回溯深度,截断操作模式,艰难的决定。

data =兰迪([0,1],70,1);codedData = convenc(数据、格子);tbdepth = 34;tbdepth decodedData = vitdec (codedData,格子,“trunc”,“硬”);

验证解码数据零错误。

decodedData biterr(数据)
ans = 0

创建一个格子结构代表1/2率系统的卷积编码器反馈这个图所示。

这个编码器5约束长度,33[37]作为发电机多项式矩阵,多项式和37的反馈联系。

第一个发电机多项式是八进制37。第二个发电机多项式是八进制33。反馈多项式八进制37。第一个发电机多项式与反馈连接多项式因为第一个输出对应于系统的比特。

(1 1 1 1 1)二进制向量表示八进制37,对应于二进制数字的上一行图。(1 1 0 1 1)二进制向量表示八进制33和对应于低排的二进制数字图。这些二进制数字显示连接的输出寄存器的两条图。最初的1对应的输入。

将多项式转换为使用的框架结构poly2trellis函数。当使用一个反馈多项式,poly2trellis使一个反馈连接到输入的格子。

格子= poly2trellis (5 [37 33] 37)
格子=结构体字段:numInputSymbols: 2 numOutputSymbols: 4 numStates: 16 nextStates: [16 x2双]输出:[16 x2双)

生成随机二进制数据。卷积编码数据通过使用指定的框架结构。解码编码数据通过使用指定的维特比算法框架结构,34岁的回溯深度,截断操作模式,艰难的决定。

data =兰迪([0,1],70,1);codedData = convenc(数据、格子);tbdepth = 34;%回溯深度维特比译码器tbdepth decodedData = vitdec (codedData,格子,“trunc”,“硬”);

验证解码数据零错误。

decodedData biterr(数据)
ans = 0

比较完整的卷积编码消息卷积编码的消息在两段。

这个图显示了一个2/3编码器与两个输入流速率,三个输出流,七个移位寄存器。

定义框架结构在图中使用poly2trellis函数。设置约束长度的路径5和4约束长度的路径。代码生成器的八进制表示矩阵对应的水龙头上下移位寄存器。

格子= poly2trellis (4 [5]、[23 35 0;0 5 13]);

检查编码器配置。

K = log2 (trellis.numInputSymbols)%的数量输入比特流
K = 2
N = log2 (trellis.numOutputSymbols)%的输出比特流
N = 3
coderate = K / N
coderate = 0.6667
numReg = log2 (trellis.numStates)%的编码器寄存器
numReg = 7

定义一个消息和五个微不足道的输入符号。

numSymPerFrame = 5;%符号每帧的数量味精=兰迪([0,1],K * numSymPerFrame, 1);

编码的全部消息通过格子配置convenc函数。

[code_a, fstate_a] = convenc(味精、格子);

应用分段信息编码通过使用相同的框架结构。使用最后的和初始状态参数时使用convenc函数。分段的信息编码,消息段必须是一个多输入的比特数的符号。

编码信息的一部分,记录的最终状态以备后用。

[code_a1, fstate_a1] = convenc(味精(1:6),格子);

编码的信息,使用最终状态,fstate_a1初始状态输入参数。

[code_a2, fstate_a2] = convenc(味精(7:结束),格子,fstate_a1);

确认完整的编码信息,code_a匹配连接分段编码信息,[code_a1;code_a2]

isequal (code_a [code_a1;code_a2])
ans =逻辑1

确认最终的状态,fstate_a完整的消息后的编码器编码匹配的最终状态,fstate_a2后的编码器,分段信息编码。

isequal (fstate_a fstate_a2)
ans =逻辑1

输入参数

全部折叠

二进制信息,指定为一个向量二进制值。味精必须包含一个或多个符号。每个符号必须包含log2 (格子numInputSymbols)位。

例子:(1 1 0 1 0 0 1 1)指定消息作为二进制行向量与八个元素。

数据类型:|逻辑

框架描述,指定为MATLAB包含框架结构描述率K/N代码。K代表输入比特流的数量,N代表输出比特流的数量。

格子结构包含这些字段。您可以使用poly2trellis函数创建框架结构或手动创建它。更多关于这个结构,请参阅格子卷积编码的描述istrellis函数。

符号编码器的输入数量,指定为一个整数等于2K,在那里K是输入比特流的数量。

符号编码器的输出数量,指定为一个整数等于2N,在那里N数量的输出流。

许多州在编码器中,指定为2的幂。

下一个状态的所有组合的当前状态和当前输入,指定为一个整数矩阵。矩阵大小必须numStates2K

输出所有组合的当前状态和当前输入,指定为一个矩阵的八进制数字。矩阵大小必须numStates2K

数据类型:结构体

穿刺模式,指定为一个向量二进制值。表明刺破位与0年代和不位1年代的长度puncpat向量必须输入消息向量长度的整数因子,长度(味精)

数据类型:

用于编码器初始状态寄存器,指定为一个整数标量范围在[0,(格子numStates- 1)]。

数据类型:

输出参数

全部折叠

卷积编码的信息,作为一个向量返回二进制值。这个输出向量具有相同的数据类型和方向作为输入味精。每个符号在codedoutlog2 (格子numOutputSymbols)位。

数据类型:|逻辑

编码器的最终状态寄存器,作为一个整数返回标量。当调用convenc迭代,例如在一个循环中,fstate通常用于设置istate为后续的调用convenc函数。

数据类型:

更多关于

全部折叠

卷积编码

卷积编码的错误控制编码记忆。具体来说,计算和编码输出取决于当前的输入符号和一些以前的输入符号在格子配置而异。一个卷积编码器输出N位,每K输入部分。输入可以有不同的倍数K位在一个模拟世界中。

使用MATLAB格子结构,定义了一组生成器多项式,可以nonsystematic模型,系统的前馈、卷积编码系统的反馈。的更多信息和示例,演示各种卷积编码架构,看到卷积码的话题。

解码卷积编码的输出,您可以使用:

  • vitdec函数或comm.ViterbiDecoder系统对象™-使用维特比算法困难的决定和不痒的决定解码

  • comm.APPDecoder系统对象——使用一个后验软输出的概率译码器译码的卷积码

引用

[1]克拉克,乔治·C。,J. Bibb Cain.纠错编码为数字通信。通信理论的应用。纽约:充气出版社,1981年。

[2]Gitlin,理查德·D。,Jeremiah F. Hayes, and Stephen B. Weinstein.数据通信原理。通信理论的应用。纽约:充气出版社,1992年。

[3]Yasuda Y。,K。Kashiki, and Y. Hirata. “High-Rate Punctured Convolutional Codes for Soft Decision Viterbi Decoding.”IEEE通信32岁的没有。3(1984年3月):315 - 19所示。https://doi.org/10.1109/TCOM.1984.1096047。

[4]Haccoun D。,G. Begin. “High-Rate Punctured Convolutional Codes for Viterbi and Sequential Decoding.”IEEE通信37岁的没有。(1989年11月11日):1113 - 25所示。https://doi.org/10.1109/26.46505。

[5]开始,G。,D. Haccoun, and C. Paquin. “Further Results on High-Rate Punctured Convolutional Codes for Viterbi and Sequential Decoding.”IEEE通信38岁的没有。(1990年11月11日):1922 - 28。https://doi.org/10.1109/26.61470。

扩展功能

版本历史

之前介绍过的R2006a