2. 3.6 译码初始化
由于刚开始译码的第一步和第二步,译码路径并未完全展开,“加-比-选”与后面的步骤略有不同。因此设置一个译码步骤计数器step,对译码前两步的“加”进行单独处理,而不改变“比选”部分。
2.3.7 路径量度的溢出
由于路径量度是一直累加的,如果不进行处理则计数器将溢出。设计中发现,各条路径之间的路径量度相差不会太大。解决的办法是:如果有一个路径量度超过了某一门限,就将所有记录的路径量度减一个小量。在实际中,由于(2,1,3)卷积码每一步译码后路径量度最多增加2,因此为避免溢出,设置门限为8,当超过该门限时各路径量度都减小2。这样就可以用很少容量的寄存器保存任意长的路径量度。
3 仿真结果
仿真在MaxplusII10.2环境下进行,选择FLEX1OK系列中的EPF10K30RC240-3器件。以下是部分仿真结果。
3.1 卷积码编码器仿真
卷积码编码器的仿真波形如图5所示。在编码使能之后输入序列data_in为110111001000…(每个bit持续2个时钟周期),编码输出序列data_out为110101000110011111101100……(每个bit持续1个时钟周期),结果与文献中的例12-1完全一致。
3.2 维特比译码器仿真
维特比译码器的仿真波形如图6所示。其中图(a)为输入无误码时的情形,图中输入序列为1101010001100111…,译码输出序列为110111 00…;图(b)为输入有误码时的情形,图中假设输入序列为1001010101100101…(其中黑体的bit为误码),则译码输出序列仍为11011100…。
由仿真结果可以看出。用上述方法设计的卷积码编/译码器功能正确,并具有较好的纠错能力。
4 结论
本文用VHDL语言和FPGA芯片设计并实现了(2,1,3)卷积码编码器及维特比译码器。仿真结果表明,编/译码器的功能正确,达到设计要求。在设计中采用了模块化结构,维特比译码器设计采用了截尾译码算法,节省了存储空间。另外,设计中还较好的解决了译码过程中的支路度量计算、路径量度和译码路径的更新与存储以及译码判决与输出等关键技术问题。
由于卷积码具有相似的结构和特点,所以文中(2,1,3)卷积码编/译码器的设计思路,对其他形式的卷积码编/译码器也是适用的。