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

matlab 实现卷积编码

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

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

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

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

matlab实现卷积编码'适合小白理解学习'_第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)卷积编辑器的例子

matlab实现卷积编码'适合小白理解学习'_第2张图片

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实现卷积码还是蛮简单的,只需要这两个函数,一个制定规则,一个实现信道编码。我会后续给大家写一下卷积编码的解码过程!

你可能感兴趣的:(matlab,卷积编码)