convenc
卷积编码二进制消息
语法
描述
通过卷积编码器编码输入二进制消息由一个格子结构。在MATLAB格子结构的详细信息®,请参阅格子卷积编码的描述。输入消息包含一个或多个符号,每一种都包括log2 (codedout
= convenc (味精
,格子
)格子
。numInputSymbols
)位。编码输出,codedout
包含一个或多个符号,每一个都包括log2 (格子
。numOutputSymbols
)位。
例子
创建卷积码
创建卷积码采用框架结构。您可以定义使用的格子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
/N
1/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前馈卷积码率在这个图。
创建一个框架结构,设置约束长度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卷积编码器的反馈
创建一个格子结构代表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
函数。
numInputSymbols
——数量的符号编码器的输入
2K
符号编码器的输入数量,指定为一个整数等于2K,在那里K是输入比特流的数量。
numOutputSymbols
——数量的符号编码器的输出
2N
符号编码器的输出数量,指定为一个整数等于2N,在那里N数量的输出流。
numStates
——在编码器的状态数
2的幂
许多州在编码器中,指定为2的幂。
nextStates
——下一个状态
矩阵的整数
下一个状态的所有组合的当前状态和当前输入,指定为一个整数矩阵。矩阵大小必须numStates
2K。
输出
——输出
矩阵的八进制数字
输出所有组合的当前状态和当前输入,指定为一个矩阵的八进制数字。矩阵大小必须numStates
2K。
数据类型:结构体
puncpat
- - - - - -穿刺模式
向量的二进制值
穿刺模式,指定为一个向量二进制值。表明刺破位与0
年代和不位1
年代的长度puncpat
向量必须输入消息向量长度的整数因子,长度(味精)
。
数据类型:双
输出参数
codedout
——卷积编码信息
向量的二进制值
卷积编码的信息,作为一个向量返回二进制值。这个输出向量具有相同的数据类型和方向作为输入味精
。每个符号在codedout
由log2 (格子
。numOutputSymbols
)位。
数据类型:双
|逻辑
fstate
——最终状态
整数标量
编码器的最终状态寄存器,作为一个整数返回标量。当调用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。
扩展功能
C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。
输入参数格子
,puncpat
必须在编译时常量。有关更多信息,请参见coder.Constant
(MATLAB编码器)。
版本历史
之前介绍过的R2006a
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。金宝app
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。