1、1.http:/ ,内部参数前者是卷积码的约束长度 N,后者是根据输入输出连线情况的一个 m*n 矩阵,m为输入信号的个数,n 为输出信号的个数。实例 1(3,1,3)卷积码编码原理图左图是一个 R=1/3 的卷积编码器(3,1,3),一个输入,三个输出。那么 ConstraintLength=4,CodeGenerator 为一个 1*3 的矩阵。C3=b1+b2+b3C2=b1+b3C1=b1可知,三个移存器皆参与 C3 的计算,可用向量 111 表示;一、三号移存器参与 C2计算,用 101 表示;只有一号移存器与 C1 连接,用 100 表示。转化为八进制,分别为7、5、4.故有 tr
2、ellis=poly2trellis(3 ,7 5 4)实例 2根据卷积编码是否有负反馈,poly 2trellis 的有两种调用形式。trellis = poly2trellis(ConstraintLength,CodeGenerator);trellis = poly2trellis(ConstraintLength,CodeGenerator,.FeedbackConnection);这里我只讨论无负反馈的形式。下图是一个 R=2/3 的卷积编码器,经过 S/P 转换变成两路数据,First input 和 Second input 两路在寄存器中进行卷积编码,输出并行的三路 Firs
3、t output,Second output 和 Third outout。那么 ConstraintLength 就是描述每一路输入的长度,本编码器有两路输入,对应着下图第一行寄存器,四个寄存器+一个 First input 一共 5 个输入;同样对与第二行一共就有4 个输入。那么 ConstraintLength 就应该是5,4。那么对于函数的第二个参数 CodeGenerator 的参数比较复杂。如果有 n 路输入,m 路输出话,那么 CodeGenerator 就是一个 nm 的一个矩阵,矩阵的元素是一个比较特殊。Octal number,8 进制的数。在 nm 的矩阵中的第(i,j)
4、个元素,其表示第 i 路的输入和第 j 路的连接情况。当第 i 路的数据和第 j 路的加法器连接是就将该寄存器的输出处标为 1,如(1,1) 连接情况是第一、第四和第五个相连所以用向量表示为“10011“用八进制表示为“23“(1,2)=“11,101“=“35“;(1,3)=“0000“=“0“;(2,1)=“0000“=“0“;(2,2)=“0,101“=“05“;(2,3)=“1,011“=“13“,最后得到 CodeGenerator=23,35,0;0,05,13。这里的到了产生卷积编码器的编码器的表示方法,那么生成相应的 trellis 就能在系统中使用了。在命令行中键入 trel
5、lis=poly2trellis(5,4,23,35,0;0,05,13)得到如下输出。trellis=poly2trellis(5,4,23,35,0;0,05,13)trellis =numInputSymbols: 4 【两个输入 22=4】numOutputSymbols: 8 【三个输出 23=8】 numStates: 128 【说明:128=23*24(3 是第一级寄存器的个数,4 第二级寄存器的个数】nextStates: 128x4 double 【输入乘以中间状态】outputs: 128x4 double上一篇,详细的介绍了 ploy2trellis 函数的使用方法,各个
6、参数的取值和意义。但对于结果 trellis 结构却更加的让人疑惑,这个结构到底是什么意思。其实这只是将多项式或者说是这个图表表示的信息用一种 matlab 能够理解的一种数据结构表示。这种做的目的是使变换的过程更加的快捷,节省时间复杂度(这种方法近似于查表发,下面将详细的介绍)。典型的用空间换取时间的方式。简单的说就是换了一种数据结构。举例来说根据上图,我们得到了 ConstraintLength,CodeGeneratoe。运行 Ploy2trellis 函数我们得到 trellis 结构。trellis=poly2trellis(5,4,23,35,0;0,5,13)trellis =
7、numInputSymbols: 4numOutputSymbols: 8numStates: 128nextStates: 128x4 doubleoutputs: 128x4 doublenumInputSymbols: 4 输入符号数是 4。是一个标量,表示两路输入共有 4(2k k 为输入的路数)种状态分别为00,01,10,11numOutputSymbols: 8 输出符号数是 8.同样是一个标量,表示输出共有 8(2n n 为输出的路数)种状态分别为000,001,010,011,100,101,110,111numStates: 128 状态数是 128(27,7 是寄存器的总
8、个数) 状态是 7 为二进制数,不多说了。下面是重点:nextStates: 128x4 double 下一个状态nextState 是 numStates-by-2k的矩阵。他表示所有当前状态和当前输入组合所产生的下一状态。相当于马尔科夫链的状态转移表。行表示各种不同的当前状态,依次表示从全 0 状态到全 1 状态。列表示各种不同的输入,依次表示从全 0 到全 1 的输入。outputs: 128x4 double 输出outputs 也是 numStates-by-2k的矩阵。他表示所有当前状态和当前输入组合所产生的输出(8 进制表示)。行和列的意义的 nextState 相同。这样二者的
9、结合的矩阵表示出了所有的状态和输入的组合,计算时只需知道这两个状态即可以快速的查这两个表得到下一个状态和输出。 trellis.nextStates(1:5,:) ans = 0 64 8 720 64 8 72 1 65 9 732 66 10 74上面我们列出了 nextStates 的 1-5 行,(1,1)个元素表示在全 0 状态时,输入全 0 时的下一个状态还是全 0,即所有的寄存器的结果还都是 0.64 表示所有寄存器的状态分别是 1,000,000(十进制的 64)。其他依次类推可以得到。实例 3poly2trellis(4,13,15,13 ) ,最后的 13,有反馈机制trellis = poly2trellis(ConstraintLength,CodeGenerator,FeedbackConnection)