机电之家资源网
单片机首页|单片机基础|单片机应用|单片机开发|单片机文案|软件资料下载|音响制作|电路图下载 |嵌入式开发
培训信息
赞助商
用汇编语言实现BCH解码校验算法,紫微单片机
用汇编语言实现BCH解码校验算法,紫微单片机
 更新时间:2009-7-23 15:59:23  点击数:0
【字体: 字体颜色

摘要:介绍数据传输中BCH解码校验用汇编语言实现的算法。算法包含BCH码的差错检验、差错位查找和差错纠正,同时列出相关主要子程序清单并予说明。

    数据传输通信中,经常因传输差错造成误码错码,尤其在无线通信中,空中的突发或随机干扰噪声会造成编码差错。为了提高传输的正确率,往往采用一些校验方法,以检验纠正传输差错。通信中校验的方法很多,其中的BCH编码有其独特的优点:不仅可以检纠突发差错,还能检纠随机差错,被广泛地采用在微机级的通信中。但对更低层的单片机级的数据传输通信纠错,往往采用奇偶校验等简单的校验方法。BCH校验因其算法复杂,尤其是动态实时的无线通信中,单片机的通信往往无法采用BCH解码检纠。

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

1 BCH码结构

    BCH码是一种检纠能力较强的循环码。它由信息多项式M和校验多项式J组成,如以T表示整个BCH码字的31位码组多项式,则:

T=M(X)+J(X)(1)

在31位BCH码的后面再加上1位,以保证整个码字32位中“1”的个数为偶数。该位称偶校验位。这样就形成BCH加1位偶校验位的标准码字,其结构为:

其中校验多项式J(X)由公式(2)计算:

X0X1……X20X21……X30X31
T(X)J(X)偶校验位

J(X)=M(X)/S(X)    (2)

式中S是BCH码的生成多项式,见式:
S(X)=X10+X9+X8+X6+X5+X3+X    (3)

生成多项式S的值在BCH码的值是固定的。

    BCH 码是一种循环码,循环码是利用除法来纠错的。由于任一码组多项式T都能被生成多项式S整除,所以在接收端可以将接收码组R用S去除。若在传输中未发生错误,接收码与发送码相同,即R=T(X),故接收码组R必定能被生成多项式S整除;若码组在传输中发生错误,即R≠T,R被S除时,可能除不尽而有余项 Y,因此,可根据余项是否为零来判定码中有无错误,如有余项,通过一定的运算就可以确定错误位置,从而加以纠正。

    这里R被S除,是32位被 11除,这在非实时静态的微机级实现非常简单;但在实时的、动态的、单片机级的通信中实现要快速巧妙的算法才能实现,否则,现有的码未检错及纠错完毕,下一个码已经到了。因为动态中位和位的时距t往往只有几十μs,以9。6b/s的短信为例,t=104μs。在这104μs中要完成检错、定位和纠错三个算法程序,才是一个完整的解码检纠过程。

2检错

    根据上述原理,检错过程也就是求算R被S除的余项Y的过程,如余项Y=0,则R=T(X),传输无差错;如余项Y≠0,则R≠T,检出传输差错。

    在算法语言中,所有的运算总归于二种运算:加和减。这是电子计算机的二进制基本电路特性所决定的,也是汇编语言唯一的算术运算方法。为此,这里把除法用模二加法再加右移位实现。

已知:S=11101101001

R(X)=r3r4r5r6

调用下面的模二加法右移子程序,得到R/S(X)的余项Y=r3r4。

;32位/16位模二加法右移子程序

m2add:movr7,#00

m2ddgx:mova,r3

xrla,#0edh;S(x)的高位=oed(h)

movr3a

mova,r4

cplacc。5;S(x)的低3位=001

movr4,a

mova,r3

acc7e10:jbacc。7m2addgx;R的最高位为“0”,则R右移

mova,r6

rlca

movr6,a

mova,r5

rlca

movr5,a

mova,r4

rlca

movr4,a

mova,r3

rlca

movr3,a

movr7

cjner7,#10h,acc7e10;右移总次数为16次

ret

余项Y的高8位在r3寄存器中,低3位在r4的高3位。

3定位

    假如Y=r3r4≠0,表示接收到的码组R有差错,下一步则由Y的值推算差错在R中的位置。

    理论上要找出R中差错的位置,必须计算出差错校验子C。在实践中,校验子C的计算不仅费时间,而且多位检纠还需多个校验子C。为此,经过几年的实践,把Y直接作为综合校验子,通过快速查表找到差错位置。查找程序的大小和检纠差错位数有关,这里以检纠4位差错为例,说明定位纠错的方法。

;4位差错位址查找子程序

bitposi:movb,0;对R高位至低位的移动计数

movr2,#1fh;设表格长度

btoa:mova,b

incb

acalltabsub;调用表格子程序,读入表格值

clrc

subba,r3;Y中的r3和表格值比较

jnzbinc1:不相等,转出

mova,b;相等,继续

acalltabsub

clr

subba,r4;Y(X)中的r4和表格值比较

jnzr2decl:不相等,转出

setbf0;相等,置标志位返回

ret

bincl:incb

r2decl:djnzr2,btoa

ret;表格查毕,没有相等的值,不置标志位返回

从查找子程序返回的B寄存器的值,即为差错在R中从高位到低位的位数值。

;4位差错表格子程序

tabsub:inca

movca,@a+pc;将相对位置的表格送入a寄存器

ret

db0ebh;表格开始,长度为查找子程序中

db00;r2寄存器的预置值

db76h

4纠错

    找到了差错在R位置,就可以纠错了。

    纠错的原理比较简单,因为单片机处理的是二进制数,而二进制数只有二个状态,即不是“0”就是“1”。也就是说,R中差错位是“0”,则改为“1”;差错位是“1”,则改为“0”。所以纠错要对所在位求反就行了,程序见本刊网络补充版。

    至此,整个检错、定位、纠错的BCH码校验检纠过程结束。BCH码校验算法,经过实践的检验,不失为单片机级的数据传输校验好算法。这种方法可以对多位随机差错和多位突发差错进行检验和纠错,具体位数的多少仅受单片机工作频率的限制,而不受方法的限制。

  • 上一篇: 单片机的状态迁移与复位操作 ,紫微单片机
  • 下一篇: 基于单片机的具有通讯口的智能温控表,紫微单片机
  • 发表评论   告诉好友   打印此文  收藏此页  关闭窗口  返回顶部
    热点文章
     
    推荐文章
     
    相关文章
    网友评论:(只显示最新5条。)
    关于我们 | 联系我们 | 广告合作 | 付款方式 | 使用帮助 | 机电之家 | 会员助手 | 免费链接

    点击这里给我发消息66821730(技术支持)点击这里给我发消息66821730(广告投放) 点击这里给我发消息41031197(编辑) 点击这里给我发消息58733127(审核)
    本站提供的机电设备,机电供求等信息由机电企业自行提供,该企业负责信息内容的真实性、准确性和合法性。
    机电之家对此不承担任何保证责任,有侵犯您利益的地方请联系机电之家,机电之家将及时作出处理。
    Copyright 2007 机电之家 Inc All Rights Reserved.机电之家-由机电一体化网更名-声明
    电话:0571-87774297 传真:0571-87774298
    杭州滨兴科技有限公司提供技术支持

    主办:杭州市高新区(滨江)机电一体化学会
    中国行业电子商务100强网站

    网站经营许可证:浙B2-20080178-1