0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过采用FPGA器件设计一个Viterbi译码器

电子设计 来源:郭婷 作者:电子设计 2019-04-24 08:29 次阅读

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

一、译码器功能分析

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

通过采用FPGA器件设计一个Viterbi译码器

图1 译码器结构框图

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

1 分支度量单元

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

通过采用FPGA器件设计一个Viterbi译码器

(式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结构,同时兼顾了面积和速度。

通过采用FPGA器件设计一个Viterbi译码器

图 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)。

通过采用FPGA器件设计一个Viterbi译码器

图3 基二蝶形单元

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

通过采用FPGA器件设计一个Viterbi译码器

(式2)

通过采用FPGA器件设计一个Viterbi译码器

(式3)

从以上的分析中我们可以得出一个很重要的结论:从T(i)时刻的状态Sj(2(n-1)≥j≥0)生成的两条支路,唯一不同的信息就是该时刻状态Sj的输入数据,Sj的上支路输入的是0,下支路输入的是1。因此,一个状态可以只生成一条支路(上支路),另一条支路(下支路)的信息已经包括在这条支路中,要恢复出下支路只需要将上支路的输入数据取反即可。图4.2所示的ACS单元结构中的累加器可以减少一半的工作量,对于本文中的(2,1,7)卷积码的译码器,即由每产生一位译码工作16个时钟周期减少为8个时钟周期(可将时钟频率降为原来的1/2),减少了复用次数,降低了ACS单元的复杂度和功耗。同时,由于ACS单元结构的优化,每个状态只需要生成一条路径,存储的幸存路径数也由原来的128条减少为64条,也同样使结构变得简单,功耗有所降低。

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

由式(2)和式(3)可知,输入数据(datain)不同,卷积码的输出C0和C1也不同,因此,同一状态上支路的输出与下支路不同,上下支路状态输出及译码器的输入数据之间的关系如表1所示:

通过采用FPGA器件设计一个Viterbi译码器

利用上下支路分支度量值的关系就可以从上支路路径度量累加值中计算出下支路路径度量累加值,用Verilog HDL语言描述为:

case(up_branch_metric)

2‘b00: down_path_add_metric 《= up_path_add_metric + 2’b10;

2‘b01: down_path_add_metric 《= up_path_add_metric;

2’b10: down_path_add_metric 《= up_path_add_metric-2‘b10;

default: down_path_add_metric 《= 7’bxxx_xxxx;

endcase

另外,ACS单元中的累加器可以用超前进位加法器实现,这将使累加器不会成为速度的瓶颈。由于累加器使用固定长度的寄存器(本文中采用7bit的寄存器),因此在不断累加过程中可能会发生溢出,影响译码结果。解决溢出常用的方法是到达译码深度时从所有状态的路径度量值中减去最小度量值。

3 幸存路径管理单元

幸存路径管理单元用来完成对幸存路径的记录,处理ACSU输出的信息,为输出判决作准备。SMU的实现主要有Register Exchange (寄存器交换)和Trace Back(回溯)两种算法。由于寄存器交换算法比回溯有更小的译码延时,RE法中幸存路径寄存器记录了幸存路径所对应的解码信息,也就是译码输出。采用这种方法消除了根据当前状态往前追踪的必要,因此寄存器交换提供了一种速度很高的译码操作。

4 判决输出单元

判决输出单元(DOU)由两部分组成:最小值选择单元(MNSU:Minimum Number Select Unit)和译码输出单元(DOU:Decode Output Unit)。最小值选择单元是用来选出本文中前面4个ACS单元输的路径度量值中具有最小度量值的节点, 读取该结点保存的幸存路径,供译码输出单元输出译码值。判决输出单元的结构如图4所示:

通过采用FPGA器件设计一个Viterbi译码器

图4 判决输出单元结构图

5 控制单元

控制单元(CU)产生控制各模块的时钟信号,是所有模块的有序运行的基础。各时钟信号功能如下:clk_load用于读取前一时刻各状态寄存器的内容,并产生各状态上支路的状态输出值;clk_BM用于计算各状态上支路的分支度量值并读取前一时刻各状态的路径度量值;clk_Add用于计算各状态上支路的路径度量值;clk_restore用于暂存各状态上支路度量值并恢复相应状态下支路的路径度量值;clk_C_S用于比较并选择达到同一状态的两支路的路径度量值的较小者,并存储各状态选择的幸存路径;clk_MNS用于选择各状态存储的路径度量值中的最小值,并保存该最小值对应的状态;min_sel_1和min_sel_2分两步选择4个MNSU选择结果的最小值,并选出最终的最小值对应的状态;Decode_Output用于读取该最小值对应状态存储的幸存路径,并输出译码结果。

二、项目实施方案

Viterbi译码器大致可以分为四个部分:支路度量模块(BMU)、加比选模块(ACS)、幸存路径管理模块(SMU)和输出产生模块。其 中支路度量模块用于完成译码器输入信号与网格图上的可能路径信号的分支度量计算;加比选模块主要把前一个状态的路径度量与当前输入信号的分支度量相加,以得到该分支的路径度量,然后比较不同分支路径度量的大小,同时找出最小的度量值,并更新该状态的度量值,最后输出状态转移信息;路径管理模块可对加比选单 元输出的状态转移信息进行处理,以便为输出判决做准备。输出模块可根据幸存路径管理单元的输出进行输出判决,最后输出译码信息。Viterbi译码器基本原理框图如下所示。

通过采用FPGA器件设计一个Viterbi译码器


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21320

    浏览量

    593158
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16016

    浏览量

    343580
  • 无线
    +关注

    关注

    31

    文章

    5304

    浏览量

    171458
收藏 人收藏

    评论

    相关推荐

    什么是硬判决和软判决Viterbi 译码算法 ?

    的可靠性,可以采用软判决Viterbi 译码算法。此时解调不进行判决而是直接输出模拟量,或是将解调输出波形进行多电平量化,而不是简单的
    发表于 05-30 16:11

    应用于LTE-OFDM系统的Viterbi译码FPGA中的实现

    种在FPGA中实现的基于软判决的Viterbi译码算法,并以(2,1,2)、回溯深度为10
    发表于 09-19 09:41

    基于IP核的Viterbi译码器实现

    【摘要】:Viterbi译码器在通信系统中应用非常普遍,针对采用DSP只能进行相对较低速率的Vit-erbi译码的问题,人们开始采用
    发表于 04-26 16:08

    求教ise 14.7中的viterbi译码器破解

    如题,求指点如何使用ise14.7中的viterbi译码器ip,只能仿真,怎么下载呢?license怎么破解?
    发表于 05-04 13:19

    如何利用FPGA设计Viterbi译码器

    增加些监督码元,这些监督码与信码之间有定的关系,接收端可以利用这种关系由信道译码器来发现或纠正错误的码元。
    发表于 08-15 06:12

    基于FPGAViterbi译码器算法该怎么优化?

    由于卷积码优良的性能,被广泛应用于深空通信、卫星通信和2G、3G移动通信中。卷积码有三种译码方法:门限译码、概率译码Viterbi算法,其中Vit
    发表于 11-01 08:05

    基于FPGAViterbi译码器该怎样去设计?

    译码器有哪些功能?Viterbi译码器是由哪几部分组成的?
    发表于 05-07 07:28

    基带芯片中Viterbi译码器的研究与实现

    基于对传统Viterbi 译码器的分析和对改进的Viterbi 算法理论的修正,提出了一种新的Viterbi 译码器的实现方法。
    发表于 08-13 10:43 23次下载

    FPGA实现的角度对大约束度Viterbi译码器中路径存储

    大约束度Viterbi译码器中路径存储单元的设计 1 引言 Viterbi译码算法是一种最大似然译码算法,目前广泛应用于各种数据传输系
    发表于 08-15 17:21 891次阅读
    从<b class='flag-5'>FPGA</b>实现的角度对大约束度<b class='flag-5'>Viterbi</b><b class='flag-5'>译码器</b>中路径存储

    Viterbi译码器的低功耗设计

    Viterbi译码是一种应用广泛的最大似然估计算法; 而功耗是通信系统设计中的一个重要制约因素,介绍了3种Viterbi译码的低功耗设计方法。对这3种设计方法的原理和实际使用效果作了详
    发表于 05-16 15:54 0次下载
    <b class='flag-5'>Viterbi</b><b class='flag-5'>译码器</b>的低功耗设计

    Viterbi译码器回溯算法实现

    该文介绍了两种Viterbi 译码器回溯译码算法,通过对这两种算法硬件实现结构上的优化,给出了这两种算法的FPGA 实现方法,比较了两种实现
    发表于 05-28 15:18 33次下载
    <b class='flag-5'>Viterbi</b><b class='flag-5'>译码器</b>回溯算法实现

    基于ASIC的高速Viterbi译码器设计

    针对无线通信系统中对于高频率、高吞吐量的要求,提出了一种基于ASIC的高速Viterbi译码器实现方案。该译码器在约束度小于等于9的情况下,采用全并行结构的加比选模块。性能分析结果表明
    发表于 11-11 17:56 6次下载
    基于ASIC的高速<b class='flag-5'>Viterbi</b><b class='flag-5'>译码器</b>设计

    基于FPGA的指针反馈式低功耗Viterbi译码器的性能分析和设计

    随着现代无线通信系统日益复杂化的发展,无线基带通信系统中各模块的实际性能、延时、功耗等参数成为基带设计的重要考虑因素。Viterbi译码器广泛应用于无线局域网和移动通信系统,并且作为基带系统的重要
    发表于 10-06 11:09 394次阅读
    基于<b class='flag-5'>FPGA</b>的指针反馈式低功耗<b class='flag-5'>Viterbi</b><b class='flag-5'>译码器</b>的性能分析和设计

    关于基于Xilinx FPGA 的高速Viterbi回溯译码器的性能分析和应用介绍

    新一代移动通信系统目前主要采用多载波传输技术, 基带传输速率较3G 有很大提高, 一般要求业务速率能达到30 Mb/ s 以上。约束长度卷积码以及Viterbi译码器由于其性能和实现的优点
    发表于 10-06 10:16 2122次阅读
    关于基于Xilinx <b class='flag-5'>FPGA</b> 的高速<b class='flag-5'>Viterbi</b>回溯<b class='flag-5'>译码器</b>的性能分析和应用介绍

    浅谈FPGA的指针反馈式低功耗Viterbi译码器设计

    为了满足复杂的无线通信系统功耗以及性能要求,提出并设计了一种指针反馈式Viterbi译码器。该译码器使相邻时刻的
    的头像 发表于 04-28 09:35 1596次阅读
    浅谈<b class='flag-5'>FPGA</b>的指针反馈式低功耗<b class='flag-5'>Viterbi</b><b class='flag-5'>译码器</b>设计