viterbi译码算法简介

viterbi译码算法简介

 viterbi译码算法是一种卷积码的解码算法。优点不说了。缺点就是随着约束长度的增加算法的复杂度增加很快。约束长度N为7时要比较的路径就有64条,为8时路径变为128条。  (2<<(N-1))。所以viterbi译码一般应用在约束长度小于10的场合中。
   先说编码(举例约束长度为7):编码器7个延迟器的状态(0,1)组成了整个编码器的64个状态。每个状态在编码器输入0或1时,会跳转到另一个之中。比如110100输入1时,变成101001(其实就是移位寄存器)。并且输出也是随之而改变的。
   这样解码的过程就是逆过程。算法规定t时刻收到的数据都要进行64次比较,就是64个状态每条路有两条分支(因为输入0或1),同时,跳传到不同的两个状态中去,将两条相应的输出和实际接收到的输出比较,量度值大的抛弃(也就是比较结果相差大的),留下来的就叫做幸存路径,将幸存路径加上上一时刻幸存路径的量度然后保存,这样64条幸存路径就增加了一步。在译码结束的时候,从64条幸存路径中选出一条量度最小的,反推出这条幸存路径(叫做回溯),得出相应的译码输出。
   说的不是很清楚。要画图才可能比较清楚。我做过相应的dsp程序,发现这样的算法再54x的dsp上用100M跑,都不能达到我们数传速度的要求,主要的时间消耗在每条路经需要比较两次,两次比较的时候一共需要从内存中取3个数(上一时刻幸存路径的量度,两个状态跳转相应的输出值),比较结束以后,还需要对内存写入2个数(幸存路径新的总量度,下一个跳转的状态),这样,每个时钟节拍需要比较的次数就是64*2次,每次存取数就要5次。一个数据包是256byte,这样可以知道解码一包所大概需要的时间。加上一下其他的开销,最后实验出来的结果是大概0.06m,但是我们用64k速率传输的时候只要0.03m就可以传完。 

你可能感兴趣的:(算法,byte,硬件开发)