(25,20)线性分组编译码器设计及其FPGA实现

2019-06-19 02:33李淑婧王蕾任宝祥李哲尚耀波
现代电子技术 2019年11期
关键词:译码器码元译码

李淑婧 王蕾 任宝祥 李哲 尚耀波

摘  要: 随着通信速率的提高,有噪信道的可靠通信通过信道编码来实现。文中设计的(25,20)线性分组编译码器结合汉明码能纠正一位错误且具有编码效率较高、译码电路简单、译码延时小等优点。分析伴随式与错误图样的对应关系,采用并行处理的方式,使用硬件描述语言VHDL在Xilinx公司的Vivado 2016.1环境下编程实现。通过ModelSim仿真平台验证,降低了实现的复杂度。在工程实践中将编译码器加入某实测通信系统,实现了在Artix?7系列xc7z030fbg676?1的芯片上占用较少的硬件资源实现(25,20)線性分组编译码,提高系统传输的可靠性,验证了该设计的优良性能。

关键词: 信道编码; (25,20)线性分组码; 汉明码; 伴随式; 错误图样; 并行处理

中图分类号: TN911.22?34                         文献标识码: A                      文章编号: 1004?373X(2019)11?0007?04

Abstract: With the increase of signal transmission speed, the reliable communication of noisy channel is realized by means of channel coding. The (25,20) linear block codec is designed, and combined with the advantages of Hamming code which can correct the error of one bit and has high encoding efficiency, simple decoding circuit and short decoding delay. The corresponding relationship between syndrome and error pattern is analyzed. The parallel processing mode and hardware description language VHDL are used for programming implementation in Vivado 2016.1 environment. The codec is verified with Modelsim simulation platform, and the simulation results show that the complexity is reduced. The (25,20) linear block codec is applied to a certain actual measurement communication system, which can realize the (25,20) linear block coding and decoding with little hardware resources on the chip xc7z030fbg676?1 of Artix?7 series, improve the system transmission reliability, and verify the excellent performance of the design.

Keywords: channel coding; (25,20) linear block code; Hamming code; syndrome; error pattern; parallel processing

0  引  言

无线传输信道中由于噪声、时延、多径衰落等各种因素的影响,造成传输信号到达接收端失真,接收序列存在误码的情况不可避免。信道编码是以提高传输可靠性为主要目的,通过增加冗余码元来提高不同码字间的差异程度,从而获得编码增益[1?2]。对于分组码的情况,信源数据被分割成大小为[k]个数据比特的分组,编码器将每[k]比特的数据分组转换成一个更大的包含[n]比特的数据分组,每个分组附加的[n-k]比特称为冗余比特[3?4]。

线性分组码是把信息序列以[k]个码元划分为一段,通过一定的线性运算得出[r]个监督码元,输出码长为[n=k+r]的一个码组[5]。(7,4)汉明码属于线性分组编码,用于纠正单个错误,在工程上较易实现,因此在软件无线电中得到广泛应用[6]。对线性分组进行译码时,由接收信息码元计算监督码元,伴随式由计算的监督码元和接收的监督码元相加共同确定,译码只检测信息码元的错误,此方法极大地降低了计算量,而且同样适用于其他信道编码[7]。文献[8]运用C++Builder和CCS实现了(7,4)汉明码编译码系统,但由于CCS内部信号采取串行处理的方式,导致译码延时增大。文献[9]将汉明码与交织相结合,设计了一种交织汉明码,提高了汉明码的纠错能力。本文通过对信道纠错编码汉明码的研究,分析伴随式与错误图样之间的关系,结合FPGA内部信号运算速度快的优点,采用并行处理的方式实现(25,20)线性分组编解码,提高了(25,20)线性分组编解码的自动纠错和检错功能。

1  (25,20)线性分组编译码器原理

1.1  (25,20)线性分组编码器原理

1.2  (25,20)线性分组译码器原理

因此,在接收码元中发生在不同位置上的单个错误,可以得到不同的非零伴随式,由这些不同的非零伴随式可求得不同的错误图样[E],由错误图样可确定错误位置并进行纠正,若发生两个错误,则伴随式[ST]也不为0,但是不能纠正。伴随式完全由[E]决定,充分反映了信道的干扰情况,译码器的主要工作就是从[S]中得到错误图样[E],从而得出[[10]][C=Y-E]。伴随式[S]与错误图样的对应关系如表1所示。

表1  伴随式[S]与错误图样[E]的对应关系表

2  (25,20)线性分组码仿真及实现

(25,20)线性分组编译码器采用硬件描述语言VHDL在Xilinx公司的Vivado 2016.1环境下编程实现,采用的FPGA是Artix?7系列的xc7z030fbg676?1。下面首先详细说明线性分组编码器的实现方法,再给出线性分组译码框图,并对译码流程进行介绍,结合ModelSim仿真结果验证线性分组编译码器是否满足设计需求。(25,20)线性分组译码器在实现过程中要注意搜索值与搜索位置的对应关系,伴随式找到对应的搜索值后,计算此搜索值的单位向量中“1”的位置即为错误码元位置。

2.1  (25,20)线性分组编码器設计

由[C=U?G],其中[G=I20A]为生成矩阵,(25,20)线性分组码的输入码组为20个信息码元,即[1×20]的矩阵与[G]([20×25]的矩阵)做乘法。矩阵与矩阵之间的运算是模二加或模二乘运算,输入行向量分别与生成矩阵[G]的25个列向量相乘,即找出列向量非零位置所对应的输入行向量的信息码元,再将这些对应的信息码元进行异或,编码输出的前20个为信息码元,后5个为监督码元[11]。

图1为线性分组编码器的仿真波形。图中各个参数的含义如下:clk为系统时钟输入;reset为系统复位输入信号,高电平有效;Training_FEC_in[19:0]为并行输入的20个信息码元,由时隙号和发送数据长度这两个信号组成;Training_FEC_out_r[4:0]为5个监督码元的并行输出;Training_FEC_out_25为线性分组编码并行输出的25个码元。一个系统时钟后,并行输入的20个信息码元根据式(8)~式(12)可同时得出5个监督码元Training_FEC_out_r,将输入的20个信息码元与计算得出的监督码元拼接得到25个信息码元输出[12]。

图1  (25,20)线性分组编码器仿真波形

2.2  (25,20)线性分组码译码器设计

根据线性分组译码原理以及式(10),搜索接收码组中出现错误的信息码元,并进行纠正。图2为(25,20)线性分组译码框图,主要由五个模块组成,分别为求伴随式、求搜索值、搜索错误位置、纠正错误码元、译码串行输出。

译码流程如下:

1) 求伴随式[S]:监督矩阵[H=ATI5],根据式(12)将接收码组[1×25]的矩阵和[HT]相乘, 将[HT]每列中“1”位置相对应的接收码组中的信息码元进行模二加运算,一个时钟后并行输出[S],即[1×5]的行向量。

2) 求搜索值:单位矩阵[I25]与[HT]相乘,可将单位矩阵[I25]分解为25个行向量与[HT]相乘,每个单位行向量与[HT]相乘结果为[1×5]的行向量,一个时钟后同时得出25个[1×5]的行向量,统称为搜索值。

图2  (25,20)线性分组译码框图

3) 搜索错误位置:将25个搜索值与伴随式[S]作对比,若伴随式[S]与25个搜索值中的某一搜索值相同,则可确定计算搜索值对应的单位行向量,此单位行向量中“1”的位置即为接收码组中信息码元的错误位置,此时记录下错误位置index,并将错误计数器累加一次。

4) 纠正错误码元:若伴随式[S]的结果为零,则表明接收码组的信息比特没有错误;若伴随式[S]的结果不为零,则根据找出的错误位置index进行纠正,即对错误位置的信息码元取反。

5) 译码输出:纠正完信息码元后启动输出使能,高电平有效,持续时间为20个时钟,按计数器累加值串行将纠正后的前20个信息码元输出。

图3为线性分组码译码仿真波形([S=0]),图中各主要参数含义如下:Training_FEC_in[24:0]为接收码组包含25个信息码元;syndrome[4:0]为伴随式;search_0~ search_24为25个搜索值;err_cnt为码元错误指示信号;index为码元错误位置;correctedcode[24:0]为纠正后的信息码元;msg_deTraining_fec_en为信息码元输出使能;msg_deTraining_fec[19:0]为译码输出信息码元。

由图3可知,syndrome参数值为0,表明此接收码组中的码元没有错误,译码输出即为接收码组的前20个码元,输出使能启动以后,按计数器值串行输出。

图3  (25,20)线性分组译码器仿真波形([S=0])

如图4所示,syndrome参数值不为0,表明此接收码组中码元有错误,将伴随式的值与25个搜索值进行对比,与伴随式值相同的搜索值为search_13,对应的单位向量为“0000000000000100000000000”,此单位向量中“1”对应的位置即为错误码元位置index=11,接收码组为“0010001100001100000010000”,纠正后的接收码组correctedcode为“0010001100001000000010000”,下一步启动译码输出使能msg_deTraining_fec_en高电平有效,持续20个时钟周期,将纠正后接收码组的前20个信息码元串行输出。

图4  (25,20)线性分组译码器仿真波形([S]≠0)

将此(25,20)线性分组编译码器加入到某通信实测系统中,在接收终端通过对接收信息比特与发送信息比特进行统计,结果表明通信解调信噪比下降2 dB。

3  结  语

本文基于Xilinx的Vivado2016.1平台,设计实现了(25,20)线性分组编译码器。通过ModelSim仿真平台验证,并将此编译码器应用于某实测通信系统中,经过反复多次测试验证表明,此(25,20)线性分组编译码器可实现良好的纠错性能,也进一步表明了此编译码器的有效性,但是其只能纠正一个信息码元的错误,对于接收信息中存在多个错误码元并進行纠正有待进一步研究。

参考文献

[1] 樊昌信,曹丽娜.通信原理 [M]. 第7版.北京:国防工业出版社,2017:331?332.

FAN Changxin, CAO Lina. Principles of communications [M]. 7th ed. Beijing: National Defense Industry Press, 2017: 331?332.

[2] 楼才义,徐建良,杨小牛.软件无线电原理与应用 [M]. 第2版.北京:电子工业出版社,2014:272?273.

LOU Caiyi, XU Jianliang, YANG Xiaoniu. Software?defined radio: principles and practice [M]. 2nd ed. Beijing: Publishing House of Electronics Industry, 2014: 272?273

[3] SKLAR B.数字通信:基础与应用[M].徐平平,译.2版.北京:电子工业出版社,2015:275?276.

SKLAR B. Digital communications fundamentals and applications [M]. XU Pingping, Translation. 2nd ed. Beijing: Electronic Industry Publishing, 2015: 275?276.

[4] MOLISCH A F.无线通信 [M].田斌,帖翊,任光亮,译.2版.北京:电子工业出版社,2015.

MOLISCH A F. Wireless communications [M]. TIAN Bin, ZHAN Yi, REN Guangliang, Translation. 2nd ed. Beijing: Electronic Industry Publishing, 2015.

[5] 刘爱莲.纠错编码原理及MATLAB实现[M].北京:清华大学出版社,2013.

LIU Ailian. Error correction coding principle and Matlab implementation [M]. Beijing: Tsinghua University Press, 2013.

[6] 孙志雄,谢海霞.基于VHDL的汉明码编解码实现[J].微型机与应用,2014,33(24):72?77.

SUN Zhixiong, XIE Haixia. Implementation of Hamming code encoder and decoder based on VHDL [J]. Microcomputer & its applications, 2014, 33(24): 72?77.

[7] 江宝安.一种新的线性分组码译码算法[J].空间电子技术,2017(2):89?93.

JIANG Baoan. A new decoding algorithm of linear error correc?ting coding [J]. Space electronic technology, 2017(2): 89?93.

[8] 夏志达,李丽华,张龙.基于CCS的(7,4)汉明码的编译码设计[J].舰船电子工程,2016,36(4):66?67.

XIA Zhida, LI Lihua, ZHANG Long. Design of encoding and decoding of (7,4) Hamming code based on CCS [J]. Ship electronic engineering, 2016, 36(4): 66?67.

[9] 庄灿,石和荣,齐永.一种交织汉明码编译码器设计及其FPGA实现[J].电子测量技术,2017,40(1):114?117.

ZHUANG Can, SHI Herong, QI Yong. Design of interleaved hamming code′s encoder and decoder and FPGA implementation [J]. Electronic measurement technology, 2017, 40(1): 114?117.

[10] 王新梅,肖国振.纠错码:原理和方法[M].西安:西安电子科技大学出版社,2011.

WANG Xinmei, XIAO Guozhen. Error correction coding: principles and methods [M]. Xian: Xidian University Press, 2011.

[11] 孙丽华,陈荣伶.信息论与编码[M].4版.北京:电子工业出版社,2016.

SUN Lihua, CHEN Rongling. Information theory and coding [M]. 4th ed. Beijing: Electronic Industry Publishing, 2016.

[12] 徐文波,田耘.Xilinx FPGA开发实用教程[M].2版.北京:清华大学出版社,2012.

XU Wenbo, TIAN Yun. Xilinx FPGA: development and application [M]. 2nd ed. Beijing: Tsinghua University Press, 2012.

猜你喜欢
译码器码元译码
基于校正搜索宽度的极化码译码算法研究
LFM-BPSK复合调制参数快速估计及码元恢复
纠错模式可配置的NAND Flash BCH译码器设计
跟踪导练(一)5
基于极大似然准则的短猝发信号盲解调
从霍尔的编码译码理论看弹幕的译码
LDPC 码改进高速译码算法
HINOC2.0系统中高速LDPC译码器结构设计
电力线通信中LDPC译码器的优化设计与实现
基于概率裁剪的球形译码算法