简介:
这是本专栏信道编码/Channel Coding的最后一站,想对信道编码有一个系统性的认识可以看本专栏的 信道编码的整体框架 一文。而在本篇文章中,将介绍卷积码的基本原理和Viterbi译码的过程,以及其MATLAB实现。为什么是最后一站呢,明明还有Turbo码,LDPC码和Polar码,这是因为这是我本科的总结,那些码由于实现起来需要很多细节,有很多研究价值,我希望在我的研究生生涯能够完善。
目录
3.1 译码过程(以上述(2,1,2)卷积码为例)(假设用硬判决)
一、卷积码的原理
1.1 卷积码的符号表示
和分组码稍有不同,卷积码的符号表示有三个维度,(n,k,L)中,n和k和分组码不同,n是每次输出的码字长度,k是每次输入的信息比特长度,而L就是记忆深度,卷积编码器的图表示如下:
1.2 运作原理
- 每过一个时间单位,比如从 t=0 到 t=1, k个比特从输入端输入k位的移位寄存器,而每一个移位寄存器里的k个比特输入到这个寄存器之后的一个寄存器。总共有L个k位移位寄存器。
- 紧接着上面的,有L个k位寄存器意味着有k*L个比特。根据设计的不同,每一个比特对n个模二加运算器有独特的影响。
- 模二加运算器的输出结果作为输出,所以一次输出n个比特。
- 移位寄存器初始状态都是0
二、 举例:(2,1,2)卷积编码器
可以看到,(2,1,2)卷积编码器是一个,每一时刻只有一个输入,但是会输出两位(两个模二加运算器)的卷积编码器,里面的寄存器都是1位的,共有两个寄存器(两个记忆深度)。而模二加运算器的数学表达如下:
假如输入序列为 x=10101,则其规律会是这样:
2.1 状态转移表
我们会发现,寄存器的状态就只有00,01,10,11四种可能,而输入只有0/1两种可能,所以输出一定也是伪随机的,也就是说输入输出的关系只有2x4=8种可能,我们将其列表:
输入 | 当前状态 | 下个状态 | 输出1 |