機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
用匯編語言實現(xiàn)BCH解碼校驗算法,紫微單片機(jī)
用匯編語言實現(xiàn)BCH解碼校驗算法,紫微單片機(jī)
 更新時間:2009-7-23 15:59:23  點擊數(shù):0
【字體: 字體顏色

摘要:介紹數(shù)據(jù)傳輸中BCH解碼校驗用匯編語言實現(xiàn)的算法。算法包含BCH碼的差錯檢驗、差錯位查找和差錯糾正,同時列出相關(guān)主要子程序清單并予說明。

    數(shù)據(jù)傳輸通信中,經(jīng)常因傳輸差錯造成誤碼錯碼,尤其在無線通信中,空中的突發(fā)或隨機(jī)干擾噪聲會造成編碼差錯。為了提高傳輸?shù)恼_率,往往采用一些校驗方法,以檢驗糾正傳輸差錯。通信中校驗的方法很多,其中的BCH編碼有其獨特的優(yōu)點:不僅可以檢糾突發(fā)差錯,還能檢糾隨機(jī)差錯,被廣泛地采用在微機(jī)級的通信中。但對更低層的單片機(jī)級的數(shù)據(jù)傳輸通信糾錯,往往采用奇偶校驗等簡單的校驗方法。BCH校驗因其算法復(fù)雜,尤其是動態(tài)實時的無線通信中,單片機(jī)的通信往往無法采用BCH解碼檢糾。

    筆者近幾年在工業(yè)測控和無線通信系統(tǒng)開發(fā),摸索了BCH解碼檢糾在實時的、動態(tài)的、單片機(jī)級的通信中的算法,并取得十分突出的效果。以下以BCH(31:21)碼為例進(jìn)行探討。

1 BCH碼結(jié)構(gòu)

    BCH碼是一種檢糾能力較強(qiáng)的循環(huán)碼。它由信息多項式M和校驗多項式J組成,如以T表示整個BCH碼字的31位碼組多項式,則:

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

在31位BCH碼的后面再加上1位,以保證整個碼字32位中“1”的個數(shù)為偶數(shù)。該位稱偶校驗位。這樣就形成BCH加1位偶校驗位的標(biāo)準(zhǔn)碼字,其結(jié)構(gòu)為:

其中校驗多項式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 碼是一種循環(huán)碼,循環(huán)碼是利用除法來糾錯的。由于任一碼組多項式T都能被生成多項式S整除,所以在接收端可以將接收碼組R用S去除。若在傳輸中未發(fā)生錯誤,接收碼與發(fā)送碼相同,即R=T(X),故接收碼組R必定能被生成多項式S整除;若碼組在傳輸中發(fā)生錯誤,即R≠T,R被S除時,可能除不盡而有余項 Y,因此,可根據(jù)余項是否為零來判定碼中有無錯誤,如有余項,通過一定的運算就可以確定錯誤位置,從而加以糾正。

    這里R被S除,是32位被 11除,這在非實時靜態(tài)的微機(jī)級實現(xiàn)非常簡單;但在實時的、動態(tài)的、單片機(jī)級的通信中實現(xiàn)要快速巧妙的算法才能實現(xiàn),否則,現(xiàn)有的碼未檢錯及糾錯完畢,下一個碼已經(jīng)到了。因為動態(tài)中位和位的時距t往往只有幾十μs,以9。6b/s的短信為例,t=104μs。在這104μs中要完成檢錯、定位和糾錯三個算法程序,才是一個完整的解碼檢糾過程。

2檢錯

    根據(jù)上述原理,檢錯過程也就是求算R被S除的余項Y的過程,如余項Y=0,則R=T(X),傳輸無差錯;如余項Y≠0,則R≠T,檢出傳輸差錯。

    在算法語言中,所有的運算總歸于二種運算:加和減。這是電子計算機(jī)的二進(jìn)制基本電路特性所決定的,也是匯編語言唯一的算術(shù)運算方法。為此,這里把除法用模二加法再加右移位實現(xiàn)。

已知:S=11101101001

R(X)=r3r4r5r6

調(diào)用下面的模二加法右移子程序,得到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;右移總次數(shù)為16次

ret

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

3定位

    假如Y=r3r4≠0,表示接收到的碼組R有差錯,下一步則由Y的值推算差錯在R中的位置。

    理論上要找出R中差錯的位置,必須計算出差錯校驗子C。在實踐中,校驗子C的計算不僅費時間,而且多位檢糾還需多個校驗子C。為此,經(jīng)過幾年的實踐,把Y直接作為綜合校驗子,通過快速查表找到差錯位置。查找程序的大小和檢糾差錯位數(shù)有關(guān),這里以檢糾4位差錯為例,說明定位糾錯的方法。

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

bitposi:movb,0;對R高位至低位的移動計數(shù)

movr2,#1fh;設(shè)表格長度

btoa:mova,b

incb

acalltabsub;調(diào)用表格子程序,讀入表格值

clrc

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

jnzbinc1:不相等,轉(zhuǎn)出

mova,b;相等,繼續(xù)

acalltabsub

clr

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

jnzr2decl:不相等,轉(zhuǎn)出

setbf0;相等,置標(biāo)志位返回

ret

bincl:incb

r2decl:djnzr2,btoa

ret;表格查畢,沒有相等的值,不置標(biāo)志位返回

從查找子程序返回的B寄存器的值,即為差錯在R中從高位到低位的位數(shù)值。

;4位差錯表格子程序

tabsub:inca

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

ret

db0ebh;表格開始,長度為查找子程序中

db00;r2寄存器的預(yù)置值

db76h

。

。

。

4糾錯

    找到了差錯在R位置,就可以糾錯了。

    糾錯的原理比較簡單,因為單片機(jī)處理的是二進(jìn)制數(shù),而二進(jìn)制數(shù)只有二個狀態(tài),即不是“0”就是“1”。也就是說,R中差錯位是“0”,則改為“1”;差錯位是“1”,則改為“0”。所以糾錯要對所在位求反就行了,程序見本刊網(wǎng)絡(luò)補(bǔ)充版。

    至此,整個檢錯、定位、糾錯的BCH碼校驗檢糾過程結(jié)束。BCH碼校驗算法,經(jīng)過實踐的檢驗,不失為單片機(jī)級的數(shù)據(jù)傳輸校驗好算法。這種方法可以對多位隨機(jī)差錯和多位突發(fā)差錯進(jìn)行檢驗和糾錯,具體位數(shù)的多少僅受單片機(jī)工作頻率的限制,而不受方法的限制。

  • 上一篇: 單片機(jī)的狀態(tài)遷移與復(fù)位操作 ,紫微單片機(jī)
  • 下一篇: 基于單片機(jī)的具有通訊口的智能溫控表,紫微單片機(jī)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1