APP下载

基于VHDL的汉明码编解码器实现*

2014-07-25孙志雄谢海霞

网络安全与数据管理 2014年24期
关键词:编解码解码器解码

孙志雄,谢海霞

(琼州学院 电子信息工程学院,海南 三亚 572022)

0 引言

由于数字信号在传输过程中受到干扰,码元波形将变坏,接收端收到后可能发生错误判决,因此在设计数字通信系统时,就要考虑差错控制编码。在差错控制编码中,每种编码所依据的原理是不同的,其中常用的是线性分组码,线性分组码中的信息位和监督位是由一些线性代数方程联系着的。而汉明码(Hamming Code)就是一种能够纠正一位错码且编码效率较高的线性分组码。由于汉明码的编解码在工程上较易实现,因此应用广泛。本文通过对信道纠错编码汉明码的研究,提出了利用FPGA实现汉明码编解码的方法,并实现了(7,4)汉明码的自动纠错和检错的功能[1]。

1 汉明码的编解码原理

汉明码是由Richard Hamming于1950年提出的,它属于线性分组编码方式,用以纠正单个错误的线性分组码,在软件无线电中应用广泛。在线性码分组码(n,k)中,若码长为n,信息位数为k,则监督位数r=n-k。

如果用r个监督位构造出r个监督关系式来指示1位错码的n种可能位置,则要求:

这种能够纠正1位错码的线性分组码就称为汉明码。其基本原理是,将信息码元与监督码元通过线性方程式联系起来,每一个监督位被编在传输码字的特定比特位置上。系统对于错误的数位无论是原有信息位中的,还是附加监督位中的,都能把它分离出来。由汉明码的性质可知,(7,4)汉明码能纠正1位错码,检测2个错码[2]。

2 汉明码的编解码方法

设汉明码(n,k)中k=4,为了纠正1位错码,由式(1)可知,要求监督位数r≥3。若取r=3,则n=k+r=7,即(7,4)汉明码。若用a6a5…a0表示这7个码元,其中a6、a5、a4和a3为信息位,a2、a1和a0为监督位; 用S2、S1和S0表示3个监督关系式中的校正子,则S2、S1和S0的值与错码位置的对应关系可以规定如表1所示,其对应监督关系式如式(2)所示[3]。

表1 (7,4)汉明码校正子和错码位置的关系

在信息传输中,在发送端编码时,信息位a6、a5、a4和a3的值由输入信号决定,是随机的。监督位a2、a1和a0根据信息位的取值按监督关系来确定,即监督位应使S2、S1和S0的值为0,如式(3)所示,即表示发送端编成的码组中应无错码。

式(3)经过移项运算,解出监督位a2、a1和a0,如式(4)所示。

因此,(7,4)汉明码给定信息位后,可以直接按式(4)算出监督位,结果如表2所示。

表2 (7,4)汉明码监督位的计算结果

接收端收到每个码组后,先计算出S2、S1和S0,若为000,则表示无错码;若不全为0,则表示有错码,这时可查表1判断错码情况。例如,若接收码组为0000011,按式(2)计算可得:S2=0,S1=1,S0=1。 由于S2S1S0=011,查表1可知在a3位有一错码,因此便可以在接收端纠正1位错码。表2中所列的(7,4)汉明码的最小码距d0=3,因此,这种码能够纠正1位错码或检测2位错码。由于码率k/n=(n-r)/n=1-r/n,故当n很大或r很小时,码率接近1。 可见,汉明码是一种高效码[4]。

3 基于VHDL的汉明码编解码仿真及实现

3.1 基于VHDL的汉明码编码仿真

根据汉明码的编码方法,利用VHDL语言编程实现一种(7,4)汉明码的编码及仿真,其码长为7位,信息位为高4位,监督位为低3位。对应上述编码方法实现的汉明码编码器的VHDL程序如下:

用VHDL语言完成的汉明码编码器设计电路符号如图1所示,其中datain[3..0]为输入的4位信息码;en为编码输入使能端,高电平有效;hamout[6..0]为汉明码编码输出,其高4位hamout[6..3]为信息位,其低3位hamout[2..0]为监督位。

图1 (7,4)汉明码编码器电路符号

实现的 (7,4)汉明码编码器仿真波形图如图2所示。从图2可以看出,当输入信息位datain[3..0]为0000时,输出hamout[6..0]汉明码编码为0000000;输入信息位datain[3..0]为0001时,输出hamout[6..0]汉明码编码为0001011,其余类推,其(7,4)汉明码编码结果与表2一致。

3.2 基于VHDL的汉明码解码仿真

用VHDL语言完成的汉明码解码器设计电路符号如图3所示。其中hamin[6..0]为输入的汉明码。en1为译码器使能端,高电平有效。dataout[3..0]为汉明码解码输出,输出为4位信息位。ne为解码输出错误指示端,当ne为高电平1时表示接收的汉明码没有错误,相应的err为000;当ne为低电平0时表示接收的汉明码有一位错误,并用err指出错码的位置,当err为001时表示错码为a0,当err为010时表示错码为a1,其余类推。经过纠正后,解码输出dataout[3..0]正确。

图2 汉明码编码器仿真波形图

图3 汉明码解码器电路符号

与上述解码方法对应的汉明码解码器的VHDL程序如下:

(7,4)汉明码解码器仿真波形如图4所示。例如,当解码器输入hamin[6..0]为0001010,对应的ne为低电平0说明接收的汉明码有1位错误,相应的err为001时,表示错码为a0,经纠错后a0为1,所以正确接收码应为:0001011,对应的解码为0001。从图4可以看出,经解码器解码后,其正确解码结果与编码输入的信息位一致。

图4 汉明码解码器仿真波形图

在仿真的基础上,将汉明码编解码的配置程序下载到FPGA芯片EP1K30QC208-2,并在EDA实验开发板进行测试,实验结果表明汉明码编解码正确[5]。

4 结论

本文利用VHDL语言编程,并基于FPGA实现了(7,4)汉明码编解码器的设计,体现了软件无线电设计通信系统的思想,实现了硬件设计实验软件化,其加速了数字通信系统设计的效率,降低了设计成本,为通信系统的设计提供了很好的平台[6]。

[1]盛孟刚.汉明码编译码的FPGA设计与实现[J].山西电子技术,2007(6):43-47.

[2]章学静,薛琳,李金平,等.汉明(Hamming)码及其编译码算法的研究与实现[J].北京联合大学学报(自然科学版),2008,22(1):46-49.

[3]方国涛.基于FPGA的汉明码编译码系统[J].信息技术,2010(7):79-81.

[4]樊昌信,曹丽娜.通信原理(第6版)[M].北京:国防工业出版社,2006.

[5]江国强.EDA技术与应用(第3版)[M].北京:电子工业出版社,2010.

[6]孙志雄,谢海霞.基于FPGA的CRC编解码器实现[J].电子器件,2012,35(6):657-660.

猜你喜欢

编解码解码器解码
《解码万吨站》
科学解码器(一)
科学解码器(二)
科学解码器(三)
ASN.1 的PER 分层运行库系统的设计和实现
1553B总线控制器编解码设计
线圣AudioQuest 发布第三代Dragonfly Cobalt蓝蜻蜓解码器
解码eUCP2.0
为多重编解码世界做好准备
大型民机试飞遥测视频编解码方法研究