Viterbi译码的FPGA免回溯实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Viterbi 译码的FPGA 免回溯实现
王栋良,秦建存
(中国电子科技集团公司第54研究所,河北石家庄050081)
摘 要 卷积码在多种通信领域中广泛应用,Viterbi 译码是对卷积码的一种最大似然译码算法。随着卷积码约束度的增加,并行维特比译码所需的硬件资源呈指数增长,限制其硬件实现。介绍了一种串行译码结构的FPG A 实现方案,在保证性能译码的前提下有效地节省资源。同时提出了充分利用FPG A 的RAM 存储单元的免回溯Viterbi 解码实现算法,减少了译码时延,这种算法在串行和并行译码中都可以应用。
关键词 卷积码;Viterbi 译码;免回溯;FPG A
中图分类号 T N911.22 文献标识码 A 文章编号 1003-3106(2007)04-0027-02
A Implementation of a N on 2backtracking Viterbi
Decoding Algorithm in FPGA
W ANG D ong 2liang ,QI N Jian 2cun
(The 54th Research Institude o f CETC ,Shijiazhuang Hebei 050081,China )
Abstract C onv olutional coding has been widely used in many communication fields ,and Viterbi decoding alg orithm is a maximum likelihood alg orithm for the conv olutional code.The hardware res ource required for parallel Viterbi decoding shows an exponential increase with the increase of constraint length of conv olutional code ,which limits its hardware im plementation.In this paper ,a FPG A im plementation of a serial Viterbi decoding architecture is presented ,which saves hardware res ource without per formance deterioration.Meanwhile ,a non 2backtracking s olution of Viterbi decoding alg orithm using the RAM units of FPG A is provided in the paper.The s olution can reduce the delay of decoding ,and can be im plemented in both serial decoding and parallel decoding.
K ey w ords converlutional code ;viterbi decoding ;non 2backtracking ;FPG A
收稿日期:2006212225
0 引言
卷积码因其良好的纠错能力在多种通信领域中得到了广泛的应用。目前,对卷积码的解码一般使用Viterbi 译码算法。Viterbi 译码算法是一种最大似然译码算法,其解决方案是:对各编码状态只保留一个距离最小的幸存路径供下一次比较运算使用,其核心运算即对不同路径度量之间的加比选操作。
当译码进行一段时间之后,即到达一定译码深度后,通过回溯算法可以读出幸存路径即解码输出。这种方案的译码时延随着回溯深度的增大而增大。免回溯实现充分利用了FPG A 中的存储单元,将幸存路径和距离即时存储,待需要译码输出时读出即可,这种方案的译码时延较小。以(2,1,7)卷积码为例介绍了串行结构的Vterbi 译码方案以及免回溯方案的实现,该卷积码的生成多项式为(171,133),这种码型的应用非常广泛。
1 卷积码编码简介
通常称一个卷积码为(n ,k ,m )型卷积码,其中
n 是指编码输出的比特数;k 是指输入的信息比特数;m 为卷积编码的深度。通常(n ,k ,m )就是由m -1位移位寄存器和一些组合逻辑构成。所谓寄存器的状态是由这m -1个寄存器所确定的。但是在FPG A 的实现中,为了保持整个编码模块的输入输出同步性,在输入位增加了一个寄存器。图1是(2,1,7)卷积编码器的一种结构
。
图1 (2,1,6)卷积编码器结构图1中的(2,1,7)卷积编码器由1个7位移位寄存器和2个异或运算单元组成。每次当1个新的信息比特
到来,就把移位寄
信号与信息处理
2007年无线电工程第37卷第4期27
存器右移1位,将新比特位移入,这时2个异或运算单元重新计算新的编码比特作为编码输出。2个编码比特和寄存器状态之间的关系是:
Y0=D6 D3 D2 D1 D0
Y1=D6 D5 D3 D2 D0
。(1)可以看出编码比特是由移位寄存器中某些位异或得来的,如果把参加异或的位设为1,把不参与异或的位设为0,那么对于每个编码输出就能得到一个二进制码字,对应Y0的码字是1011011,对应Y1的码字是1111001,如果用八进制来表示那就分别是133、171,即卷积码的生成码字。
2 Viterbi译码算法及实现
Viterbi译码在FPG A中应用时,可以串行实现,也可以并行实现。并行处理是指多个ACS单元同时工作,处理速度较快,电路设计相对简单,但资源耗费较大。串行处理是多个地址在不同时刻利用同一ACS单元进行加比选运算。这种算法处理速度较慢,但在某些场合已经适用,其电路的时序设计相比并行处理要复杂许多,本文将着重实现Viterbi译码的串行处理。
211 路径度量的计算
在加比选运算之前,首先需要计算路径度量,译码的软硬判决方式就在这个单元体现。在硬判决译码中,若最佳判决门限为0,当匹配滤波器输出的电压为负,则输出为-1(相当于0或1码元);若为正,则输出为+1(相当于1或0码元)。硬判决译码器利用解调器送来的已经过硬判决后的0,1信息来进行译码,这种判决方式结果会损失接收信号中所包含的有用的信息。软判决译码是把解调器输出的抽样电压进行n位量化,因而由解调器输出的供给译码器的值就不止2种可能,而有Q(一般Q=2n)种可能;另一方式是译码器直接利用解调器的未量化的模拟电压进行译码,称为模拟译码。无论译码器利用Q进制量化值译码,还是利用模拟量的模拟译码,统称为软判决译码。
本FPG A实现方案中采用软判决译码,即路径度量:
BM=S i+Sq
S i+NOT(Sq)
NOT(S i)+Sq
NOT(S i)+NOT(Sq)
当状态输出为
0,0
0,1
1,0
1,1
。(2)
式中,NOT代表接收信号按位去非,这种方法不仅降低了路径度量本身的计算复杂度,同时由于BM 总为正值,使得ACS单元的设计也变得简单。在计算之前需要先将接收信号表示为偏移码,即将所有信号表示为正值。路径度量计算出之后,送入ACS 单元。
212 ACS单元和蝶形运算
ACS单元是Viterbi译码的核心运算单元,这个单元的基本任务为,将分支度量和存储的距离值相加送入比较器,比较器的输出信号作为选通信号选择幸存路径。对于(2,1,7)卷积码,其状态寄存器为D6D5D4D3D2D1D0,状态S由D
6
到D1决定,S2i 和S2i+1仅D1不同,状态转移和路径距离关系仅取决于输入和D1位,可得(2,1,7)卷积码存在如图2的状态转移特性。
图2 (2,1,7)卷积码状态转移特性
因此连续的2个状态的转移可以用1次加比选运算完成,这在计算量上是很大的节省,这就是蝶形运算。式(3)为1次ACS蝶形运算的运算过程: PM i(k+1)=MIN(PM2i(k)+BM1,PM2i+
1
(k)+BM2) PM i+32(k+1)=MIN(PM2i(k)+BM2,PM2i+1(k)+BM1)
。
(3)式中,PM i(k)为状态i第k次运算后的路径度量; BM1,BM2表示当前输入和标准输入之间的欧式距离,实现式(3)运算的FPG A结构如图3所示。
图3 蝶形运算的FPG A结构
213 存储单元的应用
串行处理时,由于R A M单元不能同时读取和写入
(下转第60页)
信号与信息处理