摘要:本文介绍了利用System Generator在Simulink/Matlab环境下快速进行卷积编码和维特比译码的设计、仿真和实现的方法。并利用System Generator的自动代码生成功能,得到了高效的产品级代码,并快速进行了实时仿真。从资源使用报告可以看出该方法设计效率和便捷程度远高于传统手段。
关键词:卷积编码;Viterbi译码;System Generator;FPGA实现;寄存器交换;回溯深度;分支量度;幸存路径
Abstract: This article introduces a the fast design and implementation method of convolution coder and Viterbi decoder using System Generator in Simulink/Matlab. Taking the advantage of automatic code generation features of System Generator, we can immediately get the efficient HDL code and do the real-time verification. From the resource report, we can see this method is father more efficient and fast .
Keywords: Convolutional coding; Viterbi decoding; System Generator; FPGA Implementation; Traceback depth; Branch metric; Survivor path
0.引言
自从1955年Elais提出卷积编码以来,该编码因其良好的纠错能力在深度空间通信系统和无线通信系统中得到了广泛的应用。利用FPGA实现卷积编码和译码更能发挥卷积编码的优势,而常用的手写VHDL/Verilog代码的方法来实现卷积编码效率低下,仿真和实现过程冗长,本文以(2,1,7)码为例,介绍了一种使用System Generator进行快速卷积编码译码器设计的方法。
1.卷积编码简介

图1 (2,1,7)卷积编码原理
卷积码的编码规则是把k个信息比特编成n个比特,编码后的n个码元不但与当前段的k个信息有关,而且还与前面 N − 1段的信息有关。卷积编码充分利用了相邻信息组之间的相关性,具有良好的差错控制性能,并且实现卷积码的最佳和准最佳译码也相对容易。
2. (2,1,7)卷积编码器设计
本文以(2,1,7)卷积编码为例,按照上述原理该编码的实现原理框图1所示,可见(2,1,7)卷积编码器需要两个模二的加法器和6个寄存器组成。在System Generator工具里面以Simulink的模块形式提供了寄存器和异或门等器件,并提供了丰富的控制接口,直接利用这项模块可以用非常类似原理图的方式来进行(2,1,7)卷积编码器设计,利用Simulink的封装功能,还可以将该编码器封装成更直观的视觉效果,其内部设计和外围接口如图2所示:

3. 卷积译码原理
卷积编码的译码方法包括代数译码和概率译码,最常用的是Viterbi译码。其译码方法为根据接收码字序列首先对进入每个状态的所有分支路径进行量度,找到最大量度的幸存路径;再根据当前幸存路径找到进入下一个状态的分支量度并延长幸存路径;最后达到一定的深度后,反向根据幸存路径译出码字。

4. (2,1,7)卷积译码器设计
根据Viterbi 译码原理,本设计采用了寄存器交换的方法进行设计,包含分支量度计算、64状态幸存路径“加、比、选”,寄存器交换和选择输出4个部分。
4.1 分支量度计算模块
(2,1,7)编码只有2bit的输出,所以在分支量度的计算上只有与(0,0)、(0、1)、(1、0)和(1、1)的距离4种情况,可以利用System Generator的constant的模块产生可能的码字,利用XOR模块进行汉明距离的计算,再利用Slice模块和Concat模块进行拼接,得到分支量度。其外围接口和内部逻辑为:

4.2幸存路径“加、比、选”模块
(2,1,7)编码存在64个状态,这些状态之间存在一定的转移关系,可以根据这一特点将状态转移分解为32个蝶形运算模块,每个蝶形运算中的状态是确定的,同时每个状态中对应一个幸存路径量度值,可以用一个寄存器模块来存储。以状态0,1到状态0,32的蝶形运算为例,其理论框架和实现模型为:

4.3寄存器交换模块
寄存器交换法采用寄存器来存储判决比特,并且不断地交换这些判决比特实现译码。我们为每一状态准备一个选择器和一个长度为译码深度的寄存器,将前面路径路径选择输出信号作为输入推断其前一个状态,当到达一定的寄存器深度的时候,则输出译码结果,寄存器交换模块的原理和实现模型如下图:

考虑到卷积编码数据可能是按帧传输所以引入的done端口,表示一个数据帧的结束,将所有的幸存路径交换到第一状态的幸存路径,以避免不同帧间隔过小而相互影响的情况。
4.3选择输出模块化简
为了简便,可以约定在发送数据末尾加上6个0,以将状态寄存器清空,这样可以保持以0状态即第一支路输出的码字作为最后输出,将输出选择部分简化。
5.代码生成和实时验证
通过上述的建模我们快速得到卷积译码和编码的模型,并通过仿真保证了其正确性,利用System Generator还能快速的得到针对特定FPGA优化后的代码,例如以Xilinx V6 240T为对象快速得到生成的代码:

得到代码的同时还可以生成bit流文件,System Generator还提供了协同仿真的方式,可在在Simulink环境下产生信号源送到FPGA内部实时运行比特流再通过协同仿真接口将运算结果送回Simulink观察。其模型和仿真效果如图7所示,同时也可以得到该设计的资源消耗情况。

可见使用System Generator可以非常快速的构建算法模型,并快速的仿真实现,最终得到高效可用的产品级代码,大大加快开发进度。此方法同样适用于各种信号处理和通信系统建模。
参考文献
【1】林舒,科斯特诺. 差错控制编码基础和应用[M]. 王育民译. 北京:人民邮电出版社,1986.
【2】曹志刚,钱亚生. 现代通信原理. 北京:清华大学出版社,2002.
【3】A.J.Viterbi. Error Bounds for Convolutional Codes and an Asymptotically Optimum Decoding Algorithm. IEEE Trans. Inf. Theory, IT-13, April 1967: 260-269
【4】 张健,刘小林等. 高速 Viterbi 译码器的 FPGA 实现. 电子技术,2006
2026-07-20
2026-07-17
2026-07-17
2026-07-16
2026-07-20
2026-07-22
2026-07-17
10月31日,以 “解锁・下一步” 为主题的2025红帽论坛暨媒体沟通会在北京JW万豪酒店盛大召开。红帽通过核心主旨演讲、重磅新品发布、权威报告解读及高层对话,全方位展现了其以开源技术破解行业痛点、引领企业数字化转型的实力与愿景,为 AI 时代的企业创新注入强劲动力。
作者:何发
评论
加载更多