matlab实现卷积编码'适合小白理解学习'


我是一个小白,需要使用到matlab实现卷积编码所以学了一下,看了一些帖子,写的不是特别直白,不是很适合小白学习,所以尝试着写一下。

卷积编码属于信道编码的一种,信道编码的作用是通过增加冗余来提高传输的准确性,当然这样会导致信息传输速率的下降。卷积码是一种前向纠错码,比一般的分组码可以拥有更好的性能,因为卷积编码输出的每个码即和当前输入数据有关,也和之前输入的数据有关。

一般我们用(n,k,L)来描述卷积码,即我们输入k个信息比特经过卷积码编成n个比特(n一定是大于k的,就是加进去了冗余来进行纠错),L是编码的约束长度。这个编码器由n个模2加法器和L*k-1级移位寄存器组成。这个时候小白多半是迷糊啦,这都是什么东西啊,我一开始也是这样似懂非懂。现在我给大家画个图,大家就懂了。

其中S是寄存器,带圈的加号是模二加法器,C是输出,如图是一个(2,1,3)卷积编码器,其中k = 1,n = 2,表示输入一个比特,输出两个比特。L = 3,表示输出不止与当前输入有关还和前L-1(3-1=2)个输入有关。 当然为什么C1 = S1+S3,C2 = S1+S2+S3呢? 这是一种规则,对于不同的卷积编码器有不同的规则。

在maltab中有现成的函数来实现卷积编码。即:
trellis = poly2trellis(ConstraintLength,CodeGenerator);
code_data = convenc(P_data,trellis);

%-----------------------------------------------------------------------------%
一、trellis = poly2trellis(ConstraintLength,CodeGenerator);
首先我们来说一下这个函数:trellis = poly2trellis(ConstraintLength,CodeGenerator);
其中trellis是一个网格表,用来规定我们使用的卷积编码的规则(比如几输入、几输出、几个寄存器之类的东西,也就是我们前面说的为什么C1 = S1+S3,C2 = S1+S2+S3这类的。)

ConstraintLength是描述每一路输入的长度,CodeGenerator描述输入和模2加法器的连接关系(8进制计数)

这是我用的一个(2,1,7)卷积编辑器的例子

trellis = poly2trellis(7,[133 171])

可以看出这个7就是S1-S7,二进制1011011可以用八进制的133表示,二进制1111001可以用八进制171表示。1和0分别表示是否连接,连接用1表示,不连接用0表示。

%-----------------------------------------------------------------------------%
二、code_data=convenc(P_data,trellis);
这个函数比较简单,其中P_data表示输入的二进制比特,trellis是上一个函数设置的网格规则,code_data表示输出的二进制比特,大家可以试验一下,输入1比特会输出2比特。

%-----------------------------------------------------------------------------%

所以用matlab实现卷积码还是蛮简单的,只需要这两个函数,一个制定规则,一个实现信道编码。我会后续给大家写一下卷积编码的解码过程!

  • 58
    点赞
  • 220
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
码是在信息序列通过有限状态移位寄存器的过程中产生的。通常,移存器包含N级(每级A比特),并对应有基于生成多项式的m个线性代数方程,输入数据每次以A位(比特)移入移位寄存器,在此同时有n位(比特)数据作为己编码序列输出,编码效率为A/n。参数N被称作约束长度,它指明了当前的输出数据与多少输入数据有关。它决定了编码的复杂度。 译码器的功能就是,运用一种可以将错误的发生减小到最低程度的规则或方法,从已编码的码字中解出原始信息。在信息序列和码序列之间有一对一的关系。此外,任何信息序列和码序列将与网格图中的唯一一条路径相联系。因而,卷译码器的工作就是找到网格图中的这一条路径。 Viterbi算法可被描述如下; 把在时刻i,状态 所对应的网格图节点记作 ,每个网相节点被分配一个值 。节点值按如下方式计算: (1)设 , 。 (2)在时刻i,对于进入每个节点的所有路径计算其不完全路径的长度。 (3)令 为在i时刻,到达与状态 。相对应的节点 的最小不完全路径长度。通过在前一节点随机选择一条路径就可产生新的结果。非存留支胳将从网格图中删除。以这种方式,可以从 。处生成一组最小路径。 (4)当L表示输入编码段的数目,其中每段为k比特,m为编码器中的最大穆存器的长度,如果 ,那么令 ,返回第二步。 一旦计算出所有节点值,则从 时刻,状态 。开始,沿网格图中的存留支路反向追寻即可。这样被定义的支路与解码输出将是一一对应的。关于不完全路径长度,硬判决解码将采用Hamming距离,而软判决解码将采用Euclidean距离。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值