新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于FPGA的Viterbi译码器设计及实现

基于FPGA的Viterbi译码器设计及实现

作者:时间:2014-11-10来源:网络收藏

  卷积码是广泛应用于卫星通信、无线通信等各种通信系统的信道编码方式。算法是一种最大似然译码算法。在码的约束度较小时,它比其它概率译码算法效率更高、速度更快,的硬件结构比较简单。随着可编程逻辑技术的不断发展,其高密度、低功耗、使用灵活、设计快速、成本低廉、现场可编程和反复可编程等特性,使逐步成为设计的最佳方法。项目目的是用实现一个

本文引用地址:http://www.eepw.com.cn/article/265114.htm

  一、译码器功能分析

  译码器是一种具有“翻译”功能的逻辑电路,这种电路能将输入二进制代码的各种状态,按照其原意翻译成对应的输出信号。Viterbi译码器是以Viterbi算法为基础设计的一种译码器,译码器主要由五部分组成:分支度量单元(Branch Metric Unit)、加比选单元(Add-Compare-Select Unit)、幸存路径管理单元(Survivor Management Unit)、判输出单元(Decide-Output Unit)和控制单元(Control Unit)。其整体结构如图1。

  

 

  图1 译码器结构框图

  各单元之间的相互关系如下:接收到的输入数据首先被送入各分支度量单元中计算出相应的分支路径距离;加比选单元将旧的状态路径度量与相应的新产生的分支路径距离相加,通过比较后选择到达同一状态的两个路径度量值中较小的分支来更新路径度量;溢出处理防止加比选单元中的路径度量累加值发生溢出;幸存路径管理单元将加比选单元生成的路径信息进行存储管理;判决输出单元根据加比选单元选择的路径度量,从中选择一个最小值,并输出该最小值对应的幸存路径。所有这些单元都在控制单元的协调下工作。

  1 分支度量单元

  分支度量表征该分支接收到的码元与期望码元之间的差别。对于硬判决,这种差别指不同码元的个数。硬判决分支度量值可以表示为:

  

 

  (式1)

  其中,y为接收码字,c为本地卷积码输出码字。对于码率为1/2硬判决译码方式,编码器输出信号可能为00、01、10、11,其路径度量取值(汉明距离)只有0、1、2三种可能,因此需要用一个2bit的寄存器来存储分支度量值。

  在本文中,采用了4个ACS单元(每个ACS单元有两个累加器)并行计算,因此需要8个分支度量单元并行计算8个条支路的度量值,并将度量值送至ACS中的累加器。

  2 加比选单元

  ACS单元用来累加路径度量值并比较和选择进入某一状态的两条分支。本文中采用4个ACS单元并行计算,每16个状态复用一个ACS结构,同时兼顾了面积和速度。

  

 

  图 2 (2,1,7)卷积码的状态图

  译码器的核心部分是ACS单元,传统的译码器结构每产生一位译码需要进行2(n-1)次加比选运算,即2×2(n-1)=2n次加法运算和2(n-1)次比较选择运算。对于(2,1,7)卷积码来说,需要进行128加法运算和64次比较选择运算,这将占用很多的资源并产生很大的功耗,因此,如果能够通过改进ACS单元的结构来降低其规模和功耗,将会使整个译码器的硬件规模和功耗大大降低。

  从图2所示的(2,1,7)卷积码的状态图中可以看出:在T(i+1)时刻到达状态S0和S1的是T(i)时刻的状态S0和S32,……,在T(i+1)时刻到达状态S62和S63的是T(i)时刻的状态S31和S63。也就是说,T(i)时刻的状态Sj和Sj+32会达到T(i+1)时刻的相邻的两个状态,并且这两个状态是S2j和S2j+1(31≥j≥0)。这也就是图形单(ButterfllyUnit)。

  

 

  图3 基二蝶形单元

  在图3中,T(i)时刻的状态Sj和Sj+32都是在输入0的时候转移到T(i+1)时刻的状态S2j,在输入1的时候转移到T(i+1)时刻的状态S2j+1。这也就意味着ACS单元中的比较器所比较的两个路径度量值(BM)来自数值上相差32的两个状态。路径度量的计算就是分支度量加上与这条分支相连的前一时刻的状态选择的路径度量,所以,新状态的路径度量为:

  

 

  (式2)

  

 

  (式3)

fpga相关文章:fpga是什么



上一页 1 2 下一页

关键词: FPGA Viterbi 译码器

评论


相关推荐

技术专区

关闭