基于FPGA的Viterbi译码器.docx
- 文档编号:7026429
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:69
- 大小:665.15KB
基于FPGA的Viterbi译码器.docx
《基于FPGA的Viterbi译码器.docx》由会员分享,可在线阅读,更多相关《基于FPGA的Viterbi译码器.docx(69页珍藏版)》请在冰豆网上搜索。
基于FPGA的Viterbi译码器
毕业设计(论文)
基于FPGA的Viterbi译码器
姓名:
学院:
专业:
班级:
指导教师:
摘要
卷积编码是深度空间通信系统和无线通信系统中常采用的一种编码方式,广泛应用于卫星通信、无线通信等多种通信系统。
在1967年,Viterbi提出了卷积码的Viterbi译码算法,它是一种卷积码的最大似然译码算法,通过寻找译码器接收序列和卷积编码器的输出序列的最大似然函数来得出译码结果。
该算法译码性能好、速度快,并且硬件实现结构比较简单,是最佳的卷积码译码算法。
随着可编程逻辑技术的不断发展,使用FPGA实现viterbi译码器的设计方法逐渐称为主流。
因此设计viterbi译码器,使其能够满足多种通信系统的应用要求,具有重要的现实意义。
本文的主要内容是基于FPGA的Viterbi译码器设计。
在对viterbi译码算深入研究过程中,重点研究了Viterbi译码器各个模块的主要功能。
在本设计中,采用了硬判决计算输入信息码元与各状态的期望码元之间的分支度量值,用串行加比选碟型算法来寻找编码器网格图上的幸存路径,用回溯法(trace-back)算法来对幸存路径做处理得到译码输出,用乒乓方式对幸存路径进行存储。
本论文设计输入是采用硬件描述语言VHDL来完成的,通过在各种EDA工具下的仿真和综合,验证了本文所设计的Viterbi译码器的正确性和实用性。
关键词:
卷积码;维特比;译码器;现场可编程门阵列
ABSTRACT
Convolutionalcodinghasbeenusedincommunicationsystemsincludingdeepspacecommunicationsandwirelesscommunications,whicharewidelyusedinsatellitecommunicationsandwirelesscommunication.TheViterbialgorithm,proposedin1967byViterbi,isamaximum-likelihoodalgorithmforconvolutionalcodes.TheViterbidecoderattemptstofindthemaximum-likelihoodfunctionofthedecodedcodewordagainstreceivedcodeword.Thismethodisbetterdecodingperformance,fast,andrelativelysimplehardwarearchitecture,isthebestconvolutionalcodedecodingalgorithm.Withthecontinuousdevelopmentofprogrammablelogictechnology,theuseofFPGAimplementationviterbidecoderdesignmethodcalledmainstreamgradually.Therefore,thedesignviterbidecodersothatitcanmeettheapplicationrequirementsofavarietyofcommunicationsystems,hasimportantpracticalsignificance.
ThemaincontentofthispaperistodesignaViterbidecoderwithFPGAtechnology.In-depthstudyoftheviterbidecodingcalculationprocess,focusingonthemainfunctionsofeachmoduleViterbidecoder.Inthispaper,theparallelACS(add-compare-select)Butterflyalgorithmisusedtofindthesurvivorpathinencodertrellis.Wealsousetrace-backalgorithmtodisposethesurvivorpathandreceivethedecodedresults.Inaddition,thebehaviorofadesignisdescribedinVHDL.TheemulatedandsynthesizedresultsofthisdesignarereceivedbyallkindsofEDAtools.ThroughtheseresultstheViterbidecoder’scorrectnessandpracticabilitycanbevalidated.
Keywords:
ConvolutionalCode;Viterbi;Viterbi;FPGA
绪论
随着现代通讯的发展,我们对通信的技术的质量跟速度提出了更高的要求。
但是,由于信道的不理想以及加性噪声和人为干扰的影响,使得信号在信道传输过程中会因为各种干扰而产生失真现象,使得通信质量下降。
不同的系统在信号传输过程中会受到不同的干扰,产生不同的差错率,进而使传输的可靠性也不同。
随着传输速率的提高,可靠性问题更加突出。
为了提高传输的可靠性,降低误码率,有两种方法:
一是降低信道本身引起的误码,可采用的方法有选择高质量的传输线路、改善信道的传输特性、增加信号的发送能量、选择有较强抗干扰能力的调制解调方案等;另外一种方法就是采用差错控制编码,即信道编码。
这种方法主要是对输入信息序列进行各种变换,使得原来相互独立的信息码元产生相关性,在接收端利用这些信息码元的相关性检测出错码就纠正过来。
在许多情况下,信道的改善需要大量的能量与功率,实现起来比较困难与不经济,这时采用差错控制编码方法比较合理。
而在GSM、IS-95、WCDMA系统中有广泛应用的卷积码译码算法是A.J.Viterbi在1967年提出的Viterbi算法(VB算法),该算法是针对卷积码的一种最佳的最大似然译码方法。
本设计实现了在IS-95中的前项链路所使用的(2,1,9)卷积码,具有一定的实际意义。
FPGA以运行速度快、编程方便、可以实现系统集成、功耗低、价格低、可以反复地编程与擦除使用的优点,在通信领域越发显示出强大的优势,受到广大电子技术人员的青睐。
本设计具有以下特点:
在本设计中采用了串行的加比选单元结构,这样可以节省大量的资源,降低对硬件的要求。
在对幸存路径的处理上,一般来说有寄存器交换法和回溯法两种处理手段,在本设计中采用了回溯法。
本设计中Viterbi译码器的设计输入是用硬件描述语言VHDL写的,设计平台使用的是Altera公司的QuartusII软件,本设计中的输入、功能仿真、综合、适配及时序仿真都是在这个平台上来完成的。
本论文的具体安排如下:
第一章对纠错码进行了简单的介绍。
第二章主要介绍了卷积码的基础知识以及Viterbi译码的基本原理,并通过举例来具体说明。
第三章主要介绍了viterbi译码器的FPGA的实现设计思路,viterbi译码器总体框体,然后还介绍了各个模块的主要功能和实现方法。
第四章简要的介绍了FPGA的发展历程及特点,同时给出了FPGA的一般设计方法。
给出了本设计的仿真验证,从而证明了本设计的正确性。
第一章纠错码的基本原理
1.1差错控制的基本方式
数字信号在传输过程中,由于加性噪声和人为干扰的影响,使得数字信号产生失真现象。
由于剩性干扰引起的失真现象可以采用均衡方法来消除。
而因为加性干扰引起的误码现象则需要采用其他方法来消除,可以首先考虑增加数字信号发送端的发送功率或采取合理的调制解调方案,使加性干扰不足以影响达到误码率要求。
在仍不能满足要求时,就要考虑采用差错控制措施了。
一些通用的系统,其误码率要求因用途而异,也可以把差错控制作为附加手段,在需要时加用。
根据加性干扰引起错码分布规律的不同,可以把信道分成三类:
突发信道、随机信道和混合信道,在不同的信道中,应采用不同的差错控制方式。
差错控制方式基本上分为两类,一类称为“反馈纠错”,另一类称为“前向纠错”。
在这两类基础上又派生出一种称为“混合纠错”,如图1-3所示。
图1-3差错控制的基本方式
(1)检错重发ARQ
检错重发方式的发送端发出有一定检错能力的码,接收端接受到这些码元后,利用码元本身的检错能力进行检测,当检测到有错码时,接收端通过反向信道向发送端发送信息,要求发送端重发,直到接受到正确码元为止。
ARQ只能检测到是否有错码,但检测到错码后,不知道如何纠正错码,要求发送端重新发送一遍。
在二进制系统中,这种情况发生在不知道一组接收码元中哪个码元错了。
该方法是通过发送有一定检错能力的码元进行检错的,因此它的优点是只需要少量的多余码就可以降低误码率。
另外,由于该方法的检错与纠错能力与信道干扰情况没有关系,因此可以应用于各种类型的信道,适应性比较强,特别适合于短波、有线等干扰情况复杂而又要求误码率较低的场合。
主要缺点是必须有反馈信道,不能进行同播。
当信道干扰较大时,造成错码概率较大,系统可能就处于重发循环中,信息传输的实时性和连贯性就比较差。
(2)前向纠错FEC
前向纠错方式是在发送端发送具有纠错能力的码元,接收端的纠错译码器接受这些码元后,检测到错码后能及时把这些错码纠正过来。
该方式的优点是译码实时性好,不需要反馈信道,能够进行一个用户对多个用户的广播式通信,而且控制电路简单,特别适用于移动通信。
缺点是译码设备比较复杂难以实现,而且所选用的纠错码必须与信道干扰情况相匹配,因而对信道变化的适应性差。
为了获得较低的误码率,必须以最坏的信道条件来设计纠错码。
(3)反馈校验
反馈校验方式不需要在发送序列中加入差错控制码元。
这种方式的基本思路是接收端将接受到的码字原封不动地发送到发送端,与发送端的码字逐一进行比较,如果检测到与发送端的码字不相同,就认为接收端收到的码字中有错码,发送端需要重新发送。
这种技术的优点是原理和设备都很简单,缺点是需要双向信道,传输效率也较低,因为每个码元都需要占用两次的传输时间。
(4)检错删除
检错删除和检错重发的区别在于,在接收端发现错码后,立即将其删除,不要求重发。
这种方法只适用在少数待定系统中,在那里发送码元中有大量多余度,删除部分接收码元不影响应用。
例如,在循环重复发送某些遥测数据时。
又如,用于多次重发仍然存在错码时,这时为了提高传输效率不再重发,而采取删除方法。
这样做在接收端当然会有少许损失,但却能够及时接受后续的消息。
以上几种技术可以结合使用。
例如,“混合纠错”就是“前向纠错”和“反馈纠错”两种方式的混合。
当接收端出现少量错码并有能力纠正错码时,采用前向纠错技术;当接收端出现较多错码没有能力纠正时,采用检错重发技术。
1.2纠错编码的基本原理
差错控制编码又称为纠错编码(error-correctingcoding)。
有的编码方法只能检错而不能纠错,不同的编码方法,其检错或纠错能力是不同的。
一般来说,增加的监督码元个数越多,检(纠)错的能力越强。
而通常有多余度来衡量增加的监督码个数。
例如,若编码序列中平均每三个信息码元就添加一个监督码元,则这种编码的多余度为1/4。
或者说,这种码的编码效率(简称码率)为3/4。
我们假设编码序列中总码元数为n,其中信息码元数量为k,则监督码元数量为n-k,则码率就是信息码元数量与总码元数量的比值k\n;而冗余度就是监督码元数(n-k)和信息码元数k之比(n-k)/k。
先用一个例子说明纠错编码的基本原理。
用一个由3位二进制数字构成的码组来表示各种天气,这些码组有8种可能的组合方式,表示天气情况如下表
表1-1各种天气的表示方法
码组
000
001
010
011
100
101
110
111
天气
晴
云
阴
雨
雪
霜
雾
雹
其中任一码组在传输过程中若发生一个或多个错码,则将变成另一个信息码组,这时,接收端接受到的码字是错码,表示的天气信息跟发送端的完全不一样,接收端将无法发现其错误。
但若上述8中码组只准使用其中4种来传送天气,例如:
000表示天气晴,011表示天气云,101表示天气阴,110表示雨。
这时,虽然只能传送4种不同的天气,但是在接收端有可能发现码组中的一个错码。
例如,若011(云)在传输过程中发生一个错码,则接受码组将变成111或001或010。
这3种码组是不能表示任何天气的,是禁止使用,称为禁用码组。
接收端收到禁用码组后,就认为有错码。
当传输过程中发生3个错码时,011变成100,100也是禁用码组,故接收端也能检测出3个错码。
但如果011(云)中发生2个错码,接受码组就有可能变成000或110或101,这些都是许用码组,接收端就不能检测到错码,因此这种编码不能检测出2个错码。
上面这种编码只有检错能力,没有纠错能力。
例如,如果接收端收到禁用码组111时,接收端能检测出发生错码,但不能纠正过来,因为011(云)、101(阴)、110(雨)发生一个错码都能变成111,天气晴000发生3个错码也能变成111,接收端无法判定是哪个码组发生错码得到的。
要想能够纠正错误,还要增加多余度。
例如,若规定许用码组只有两个:
000表示天气晴,111表示天气雨,其他的码组都为禁用码组。
这种编码方式不仅能检测出两个以下错码,还能纠正一个错码。
例如,当接收端收到禁用码组001时,倘若该码组是在传输过程中发生一位错码,则接收端能够判断该码组是由000(晴)产生一位错码得来的,因为111(雨)产生一位错码无论如何都得不到001,接收端就可以纠正为000(晴)。
但倘若发生错码的个数为1个或2个时,则接收端无法纠正过来,因为111(雨)发生2个错码码组可以变成001,000(晴)发生一个错码也可以变成001,这时接收端只能检测到错码而无法纠正过来,因此这种编码方式只能纠正一个错码。
从上面的例子中,我们可以了解到关于“分组码”的一般概念。
如果不要求有检(纠)错能力,为了传输4种不同的消息,用两位的码组就够了,即可以用:
00、01、10、11。
这些两位码称为信息位。
而在上面中使用了3位码,增加的那位称为监督位。
把这种将信息码分组,为每组新码附加若干监督码的编码称为分组码。
分组码一般用符号(n,k)表示,其中n是码组的总位数,又称为码组的长度(码长),k是码组中信息码元的数目,n-k=r为码组中的监督码元数目。
在分组码中,把码组中“1”的个数目称为码组的重量,简称码重。
把两个码组中对应位上数字不同的位数称为码组的距离,简称码距。
码距又称为汉明距离。
1.3纠错编码的分类
随着数字通信技术的发展,各种差错控制编码方案越来越多,其检错与纠错能力也是不一样的,数学模型也不一样,可以从不同的角度对差错控制编码进行分类。
根据对信息元处理方式的不同,可以将纠错码分为分组码与卷积码。
分组码是将信息序列以k个码元为一组分成几组,每组又根据一定的编码规则生成若干个r个监督码元,输出一个码长为n=k+r的码组。
分组码中的监督码元只与当前码组的信息元有关,与其他码组的信息元没有关系。
卷积码则不一样,卷积码不对信息序列进行分组编码,而且卷积码中的监督码不仅与当前时刻的信息码元有关,还与之前时刻输入的信息码元有关。
卷积码的缺点是目前还没有找到有效的数学工具和系统理论对卷积码进行分析,但它的实用性远远超过分组码,因此卷积码在数字通讯领域得到广泛的应用。
根据信息码元与监督码元之间的关系的不同,可以将纠错码分为线性码与非线性码。
顾名思义,线性码就是指信息码元与监督码元之间呈一定的线性关系,即满足线性叠加原理;如果信息码元与监督码元不满足这种关系,则为非线性码。
由于非线性码的分析比较困难,实现较为复杂,所以我们讨论多为线性码。
根据差错控制编码的功能不同,可分为检错码、纠错码和纠删码等。
检错码只能检测出错码而无法纠正错码;纠错码不仅具备识别错码功能,同时具备纠正错码功能;纠删码则不仅具备纠错码的所有功能,即检测出错码并纠正错码,而且当错码超过纠正范围无法纠正时,可以把无法纠正的信息删除。
根据每个码元取值不同,可以将纠错码分为二进制码和q进制码。
根据信息码元在编码以后形式是否发生改变,可以分为系统码和非系统码。
系统码是指信息码元在编码之后保持原来的形式不变,而在非系统码中,信息码元会改变其原有的信号序列。
由于原有的码位发生了变化,使译码电路更为复杂,故较少选用。
第二章卷积码和Viterbi算法
卷积码是1955年由伊莱亚斯(Elias)提出一种非分组码。
分组码编码是将输入的信息序列分成长度为k的分组,然后按照一定的编码规则,将长度为k的信息员附加上长度为r的监督元,生成长为n=k+r的码组。
在一个码组中,r个监督元仅与本组的k个信息元有关,而与其他各码组均无关。
分组译码时,也仅从本码组的码元内提取有关译码信息,而与其他码组无关。
卷积码则不同,他先将信息序列分成长度为k的子组,然后编成长为n的子码,其中长为n-k的监督元不仅与本子码的k个信息码元有关,而且还与前面m子码的信息元密切相关。
换句话说,各子码内的监督元不仅对本子码有监督作用,而且对前面m个子码内的信息元也有监督作用。
因此常用(n,k,m)表示卷积码,其中m为编码记忆,它反映了输入信息元在编码器中需要存储的时间长短;N=m+1称为卷积码的约束度,单位是组,它是相互约束的子码的个数;N*n被称为约束长度,单位是位,它是相互约束的二进制码元的个数。
在线性分组码中,单位时间内进入编码器的信息序列一般都比较长,k可达8~100。
因此,编出的码字n也较长。
对于卷积码,考虑到编、译码器设备的可实现性,单位时间内进入编码器的信息码元的个数k通常比较小,一般不超过4,往往取k=1。
2.1卷积码基础
2.1.1卷积码编码原理
我们可以通过一个例子来说明卷积码的编码原理,如图2-1是(3,1,2)卷积码编码器的原理框图。
如图所示,(3,1,2)卷积码编码器主要是由两个移位寄存器(mj-1,mj-2)和两个模2加法器组成。
编码前,各级移位寄存器清零,输入端依次输入信息序列m1,m2,。
。
。
。
。
mj,。
。
。
。
每输入一个信息码元mj时,输出端开关依次接到X1,j,X2,j和X3,j各端点一次。
其中X1,j,X2,j和X3,j由下式决定
X1,j=mj
X2,j=mj+mj-2(2.1.1)
X3,j=mj+mj-1+mj-2
由式(2.1.1)中可以看出,编码器输出的信息码元X1,j,X2,j和X3,j不仅与当前时刻的信息码元mj相关,还跟之前时刻的两个信息码元mj-1、mj-2相关,因此编码记忆m=2,约束度N=m+1=3(组),约束长度N*n=9(位)。
X1,j
输入X2,j输出
m1,m2,...mj...
X3,j
图2-1(3,1,2)卷积码编码器
表2-1(3,1,2)编码器状态表
mj
1
1
0
1
0
0
0
0
mj-1。
mj-2
00
01
11
10
01
10
00
00
X1,j,X2,j.X3,j
111
110
010
100
001
011
000
000
状态
a
b
d
c
b
c
a
a
表2-1列举了图2-1所示编码器的状态。
其中a,b,c,d表示mj-1mj-2的四种可能的状态:
00,01,10,11。
当第一位信息比特为1时,即m1=1,因移位寄存器的状态mj-1。
mj-2=00,故输出比特X1,j,X2,j.X3,j=111;第二位信息比特为1时,因mj-1。
mj-2=01,故输出比特X1,j,X2,j.X3,j=110;其余类推。
为了保证输入的全部信息位为11010都能通过寄存器,还必须在信息位后加3个零。
卷积码编码时,信息码流按顺序依次输入进行编码。
分组码却不一样,它需要先对信息码流进行分组,分组完后才能进行编码,因此卷积码编码只需要少量的缓冲和存储空间。
2.1.2卷积码的描述
卷积编码有集中描述方法,其中使用比较多的是树状图、网络图和状态图,现在我们以(2,1,2)卷积码为例来说明各种卷积码的描述方法。
1、树状图
卷积码的树状图能形象的描述卷积码编译码的工程,图2-2画出(2,1,2)卷积码的树状图。
树状图从节点so开始,此时移位寄存器状态为00。
现在规定:
输入信息位为“0”时,则状态往上支路移动;输入信息位为“1”时,则状态往支路移动。
如图2-1所示,当第一个输入信息位m1=0时,输出码元为00,移位寄存器的状态仍为so=00;若第一个输入信息位m1=1时,输出码元为11,状态并转换到s1=01。
因此从so出发有两条支路可供选择,m1=0时取上面一条支路,m1=1时则取下面一条支路。
输入第二个信息位时,移位寄存器右移一位后,上支路情况下移位寄存器状态仍为so,下支路的状态为s1。
新的一位输入信息位到来时,随着移位寄存器状态和输入信息位的不同,树状图继续分叉成4条支路,2条向上,两条向下。
当输入第二个信息位时,若此时移位寄存器的状态仍为so,则由m2=“0”或“1”和寄存器的状态可得,输出码元为00或11,状态也传换到so或s1状态;若此时移位寄存器的状态为s1,则由m2=“0”或“1”和寄存器的状态可得,输出码元为10或01,状态也传换到s2=10或s3=11状态。
如此继续,即可得到图2-2所示的二叉树图形。
树状图中,每个树杈上所标注的码元为输出信息位,每个节点上标注的so,s1,s2,s3为移位寄存器的状态。
显然,对于第j个输入信息位,有2j条支路,但在j=N≥3时,树状图的节点自上而下开始重复出现4中状态。
图2-2(2,1,2)卷积码的树状图
设现在输入码元序列为1000时,根据上面所述,可得到输出码元为11,10,11,00,相对应的寄存器的状态为s1,s2,so,so,在2-2图中用一条粗黑线描绘出来。
2、状态图
由(2,1,2)编码器结构可知,输出码元不仅决定于当前输入信息位,还决定于前两位信息位。
移位寄存器中就有四种可能的状态so=00,s1=01,s2=10,s3=11,编码器相应的也有4种状态。
当输入端依次输入信息序列时,编码器就不断地从当前时刻的状态转移到下一时刻的状态,并输出信息码元。
卷积码的状态图就是用来描述这种状态转移的过程。
图2-3所描述就是卷积码(2,1,2)的状态图,虚线表示输入信息位为“1”时状态转变的路线,实线表示输入信息位为“0”时状态转变的路线,线条旁的数字如0/11表示输入信息位为0,输出码元为11,各状态之
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA Viterbi 译码器