用汇编语言实现BCH解码校验算法

2007-03-09 23:15:35来源: 互联网

  数据传输通信中,常常因传输差错造成误码错码,尤其在无线通信中,空中的突发或随机干扰噪声会造成编码差错。为了提高传输的正确率,往往采用一些校验方法,以检验纠正传输差错。

  通信中校验的方法很多,其中的BCH编码有其独特的优点:不仅可以检纠突发差错,还能检纠随机差错,被广泛地采用在微机级的通信中。但对更低层的单片机级的数据传输通信纠错,往往采用奇偶校验等简单的校验方法。BCH校验因其算法复杂,尤其是动态实时的无线通信中,单片机的通信往往无法采用BCH解码检纠。

  笔者近几年在工业测控和无线通信系统开发,摸索了BCH解码检纠在实时的、动态的、单片机级的通信中的算法,并取得十分突出的效果。以下以BCH(31:21)码为例进行探讨。   

  1 BCH码结构

  BCH码是一种检纠能力较强的循环码。它由信息多项式M(X)和校验多项式J(X)组成,如以T(X)表示整个BCH(31:21)码字的31位码组多项式,则: T(X)=M(X)+J(X) (1) 在31位BCH码的后面再加上1位,以保证整个码字32位中“1”的个数为偶数。该位称偶校验位。这样就形成BCH(31:21)加1位偶校验位的标准码字,其结构为: 其中校验多项式J(X)由公式(2)计算: X0X1……X20 X21……X30 X31 T(X) J(X)偶校验位 J(X)=M(X)/S(X) (2) 式中S(X)是BCH(31:21)码的生成多项式,见式(3): 生成多项式S(X)的值在BCH(31:21)码的值是固定的。 BCH码是一种循环码,循环码是利用除法来纠错的。由于任一码组多项式T(X)都能被生成多项式S(X)整除,所以在接收端可以将接收码组R(X)用S(X)去除。若在传输中未发生错误,接收码与发送码相同,即R(X)=T(X),故接收码组R(X)必定能被生成多项式S(X)整除;若码组在传输中发生错误,即R(X)≠T(X),R(X)被S(X)除时,可能除不尽而有余项Y(X),因此,可根据余项是否为零来判断码中有无错误(检错),如有余项,通过一定的运算就可以确定错误位置,从而加以纠正(纠错)。 这里R(X)被S(X)除,是32位被11除,这在非实时静态的微机级实现非常简单;但在实时的、动态的、单片机级的通信中实现要快速巧妙的算法才能实现,否则,现有的码未检错及纠错完毕,下一个码已经到了。因为动态中位和位的时距t往往只有几十μs,以9.6b/s的短信为例,t=104μs。在这104μs中要完成检错、定位和纠错三个算法程序,才是一个完整的解码检纠过程。

  2 检错

  根据上述原理,检错过程也就是求算R(X)被S(X)除的余项Y(X)的过程,如余项Y(X)=0,则R(X)=T(X),传输无差错;如余项Y(X)≠0,则R(X)≠T(X),检出传输差错。 在算法语言中,所有的运算总归于二种运算:加和减。这是电子计算机的二进制基本电路特性所决定的,也是汇编语言唯一的算术运算方法。为此,这里把除法用模二加法再加右移位实现。 已知:S(X)=11101101001 R(X)=r3r4r5r6 (ri为8位寄存器) 调用下面的模二加法右移子程序,得到R(X)/S(X)的余项Y(X)=r3r4。 ;32位/16位模二加法右移子程序 m2add:mov r7,#00 m2ddgx:mov a,r3 xrl a,#0edh ;S(x)的高位=oed(h) mov r3a mov a,r4 cpl acc.5 ;S(x)的低3位=001(b) mov r4,a mov a,r3 acc7e10:jb acc.7m2addgx ;R(x)的最高位为“0”,则R(x)右移 mov a,r6 rlc a mov r6,a mov a,r5 rlc a mov r5,a mov a,r4 rlc a mov r4,a mov a,r3 rlc a mov r3,a mov r7 cjne r7,#10h,acc7e10 ;右移总次数为16次 ret 余项Y(X)的高8位在r3寄存器中,低3位在r4的高3位。

  3 定位

  如果Y(X)=r3r4≠0,表示接收到的码组R(X)有差错,下一步则由Y(X)的值推算差错在R(X)中的位置。 理论上要找出R(X)中差错的位置,必须计算出差错校验子C(X)。在实践中,校验子C(X)的计算不仅费时间,而且多位检纠还需多个校验子C(X)。为此,经过几年的实践,把Y(X)(即r3r4)直接作为综合校验子,通过快速查表找到差错位置。查找程序的大小和检纠差错位数有关,这里以检纠4位差错为例,说明定位纠错的方法。 ;4位差错位址查找子程序 bitposi:mov b,0 ;对R(X)高位至低位的移动计数 mov r2,#1fh ;设表格长度 bto a: mov a,b inc b acall tabsub ;调用表格子程序,读入表格值 clr c subb a,r3 ;Y(X)中的r3 和表格值比较 jnz binc1 :不相等,转出 mov a,b ;相等,继续 acall tabsub clr subb a,r4 ;Y(X)中的r4和表格值比较 jnz r2decl:不相等,转出 setb f0 ;相等,置标志位返回 ret bincl:inc b r2decl:djnz r2,btoa ret ;表格查毕,没有相等的值,不置标志位返回 从查找子程序返回的B寄存器的值,即为差错在R(X)中从高位到低位的位数值。 ;4位差错表格子程序 tabsub:inc a movc a,@a+pc;将相对位置的表格送入a寄存器 ret db 0ebh ;表格开始,长度为查找子程序中 db 00 ;r2寄存器的预置值 db 76h . . .

  4 纠错

  找到了差错在R(X)位置,就可以纠错了。 纠错的原理比较简单,因为单片机处理的是二进制数,而二进制数只有二个状态,即不是“0”就是“1”。也就是说,R(X)中差错位是“0”,则改为“1”;差错位是“1”,则改为“0”。所以纠错要对所在位求反就行了,程序见本刊网络补充版(http://www.dpj.com.cn)。 至此,整个检错、定位、纠错的BCH码校验检纠过程结束。BCH码校验算法,经过实践的检验,不失为单片机级的数据传输校验好算法。这种方法可以对多位随机差错和多位突发差错进行检验和纠错,具体位数的多少仅受单片机工作频率的限制,而不受方法的限制。

关键字:解码

编辑:汤宏琳 引用地址:http://www.eeworld.com.cn/szds/decoder/200703/69.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
解码

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 电视相关 白色家电 数字家庭 PC互联网 数码影像 维修拆解 综合资讯 其他技术 技术产品 应用设计 论坛

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved