Matlab的卷积编码实现

时间:2024-03-23 16:10:08

最近在做一个SCFDE波形的C和矢量实现,指导老师给了几份Matlab仿真代码,要我把对应的C语言和矢量写出来(并行运算指令操作),简单的代码一下就写完了,有些写的还是有点烦躁,特别是卷积编码的解码,今天我们先不谈解码,先谈下编码,这个还是写的比较流畅的。
卷积编码器,听着就不好理解,没事,我来分析一波,首先我们来分析下(3,1,2)编码器,这三个数啥意思啊,3代表有三个输出,1代表一个输入,而约束度为N=2+1=3;这是啥意思呢,简单的来说就是一个输入进去,有三个输出,而约束度是为了在纠错时用的,也就是其能够监督3个信息段(每次一个比特输入的话,也就是能监督9个比特);下面我们来分析其实际应用:
在matlab我们适用卷积编码函数时,是不是得调用一个网格函数?就是这个trel = poly2trellis(ConstraintLength,CodeGenerator);
简单的来说,ConstraintLength是有几个移位寄存,CodeGenerator是代表有几路输出以及输出与移位寄存器的关系,
设trel = poly2trellis(7,[171,133]);这里代表有7个寄存器,两路输出,171和133是啥啊,在这里171和133是八进制,要转换为二进制才能知道他们的关系:[1111001,1011011];这是不是很清楚了(如图1),它们是异或运算,也就是,第一个输出是1、2、3、4、7寄存器的值的异或。
Matlab的卷积编码实现
第一个输出与1、2、3、4、7这几个寄存器有关系,那么trel = poly2trellis(7,[171,133]),convenc_out = convenc(x(n),trel)是不是就代表(2,1,6)编码器呢?那么(3,1,2)编码器同理,这不过这样说明,没有指定输出与寄存器的关系,下面看一段我实现的代码(如图2、图3):
Matlab的卷积编码实现
Matlab的卷积编码实现
下面验证一下结果(如图4):
Matlab的卷积编码实现
如果有什么问题我们还可以再讨论一下。