POCSAG編碼和BCH 31,21 校驗詳解

2021-05-28 07:34:26 字數 3507 閱讀 5332

最近在做乙個專案,使用以前尋呼機使用的pocsag編碼,下面先介紹下pocsag編碼。

pocsag碼是我國公眾尋呼網廣泛使用的資訊編碼,它具有容量大、編碼效率高、適應能力強等優點委員會(ccir)推薦為「無線尋呼1號碼」。

pocsag碼常使用1200 bps和512 bps 2種傳輸速率。每次傳輸包括乙個前置碼(preamble),亦稱位同步碼,後跟完整碼字的若干個碼組(batch),每個碼組起始均有乙個字同步碼字(sc)。當無後續呼叫時,傳送可在一碼組終點停止。訊號格式如圖1所示。

,被國際無線電諮詢

圖1 pocsag碼格式

同步碼字的16進製表示為(7cd215d8 ),

空閒碼字的16進製表示為(7a89c197)。

在位址碼字中,第1位為0,第2~19位為位址,20和21位為狀態,22~31位為bch校驗,第32位為奇偶校驗。

在資訊碼字中,第1位為1,第2~21位為資訊,22~31位為bch校驗,第32位為奇偶校驗。

在實際資訊傳輸中,總是在遵守以上格式的情況下,乙個位址碼字後面跟隨著多個資訊碼字。在每個碼組中,對同步碼字後的8個幀分別給予0~7的編號。在實際尋呼網中,全部尋呼機被分成8組,每個尋呼機只接收特定幀的位址碼,因此,尋呼機接收的特定幀號成為其21位位址的低3位。在任何碼組中,若沒有位址碼字或資訊碼字時,則用空閒碼字填滿。

假設我們來傳輸的資訊是「waitsha.」,則可以得到下面的編碼資訊。

w(0x57):0101 0111

a(0x41):0100 0001

i(0x49):0100 1001

t(0x54):0101 0100

s(0x53):0101 0011

h(0x48):0100 1000

a(0x41):0100 0001

則最後得到需要傳輸的內容為:01010011  01000001  01001001  01010100  01010011  01001000  01000001,共56=7*8位。

而每乙個資訊碼字裡面可以傳輸20位,則需要3個資訊碼字方能將資料傳輸完整。詳細資訊碼字如下:

表 資訊「waitsha」的碼字分配情況位0

1 - 20

21 - 30

31碼字1

10101 0011 0100 0001 0100

bch(31,21)值

奇偶校驗位

碼字21

1001 0101 0100 0101 0011

bch(31,21)值

奇偶校驗位

碼字31

0100 1000 0100 0001 0000

bch(31,21)值

奇偶校驗位

g(x)= x

10+ x

9+ x

8 + x

6 + x

5+ x

3+ 1,即1110 1101 001

將21位資訊位對生成多項式進行模2除法運算(方法與按位進行的crc運算完全相同),運算過程如下圖2所示:

圖2 資訊位與生成多項式進行模2除法運算過程

至此,我們可以得到,碼字1的實際內容為:

表 資訊「waitsha」前20位編碼後得到的實際碼字1

位   

0  1 - 20                    

21 - 30        

31     

碼字1  

1  0101 0011 0100 0001 0100       

10 0111 1100     

1     

在資料傳輸過程中,如果沒有發生錯誤的話,我們應該接收到的內容應該是:

1010  1001  1010  0000  1010  0100  1111  1001   資料 (1)

將接收到的資料(1)與矩陣h進行乘法運算可以得到新矩陣r,稱r為伴隨式。

r = d*h   

(其中 d為資料(1)前31位的1行31列矩陣——奇偶校驗位不參加運算 , h為bch(31,21)一致校驗矩陣(參見圖3)的轉置矩陣)

圖3 bch(31,21)的一致校驗矩陣。ab

cadg

jdef

前後互為

轉置矩陣be

hkgh

icfi

ljkl

bch(31,21)一致校驗矩陣為10行31列,則它的轉置矩陣h為31行10列,d為1行31列。r=d*h,則r為1行10列的矩陣。

矩陣乘法示例:ab

cdef

矩陣a123

456矩陣b

1*a+3*b+5*c

2*a+4*b+6*c

1*d+3*e+5*f

2*d+4*e+6*f

矩陣c = 矩陣a*矩陣b

上面單元格中的*表示「與」運算

上面單元格中的+表示「或」運算

1*0=0 , 1*1=1 , 0*1=0 , 0*0 = 0

1+0=1 , 1+1=1 , 0+1=1 , 0+0 = 0

得到r後,我們就可以根據r矩陣來判斷具體是哪一位或者哪二位出現的錯誤,錯誤的可能只是由1錯為0或者相反,發現錯誤位後直接反轉即可糾錯。

由前面內容可以知道資料(1)是沒有發生錯誤的,其伴隨式r中的所有元素均為0,現將資料(1)第2位反轉得到資料(2):

1110  1001  1010  0000  1010  0100  1111  1001   資料 (2)

r2 = d2 *h,對資料(2)進行解碼的結果為:0 1 1 1 0 1 1 0 1 0。可見結果與圖3中的第二列一模一樣,則可以資料(2)的第二位發生了錯誤,將其反轉糾錯。

這只是一位資料發生錯誤的情況,bch(31,21)是可以糾正兩位隨機錯誤的。我們將資料(1)的第5,7位進行反轉,得到資料(3):

1010  0011  1010  0000  1010  0100  1111  1001   資料 (3)

r3 = d3 *h,對資料(2)進行解碼的結果為:0 0 0 1 0 0 0 0 1 1。0 0 0 1 0 0 0 0 1 1在圖3中打不到,這時候需要一點異或運算,如下:

取圖3中任意不同的兩列(列i和列j),對兩列元素下標相同的進行異或運算。當ij分別等於5和7時,結果如圖4所示:列50

1111

0000

1列701

1010

0010

結果000

1000

011圖4 列5與列7的異或結果。

其結果行與上面對資料(3)進行的糾錯計算是一樣的,所以可以得知接收到的資料第5和第7位發生了錯誤,進行反轉即可。

作者沒有上過《資訊理論與編碼》的課程,內容難免有錯誤,歡迎提出,作者定在第一時間修改。

作者只初略知道bch(31,21),其它的bch(!=31,!=21)都不了解,;) 。

作者也不清楚檔案中提到的g(x)和一致校驗矩陣是怎麼來的,都是由相關資料中找到的。

《資訊理論與編碼導論》robert j.mceliece

《資訊理論與編碼》姜丹

希望文章能夠幫助你,最後一句「支援原創」,經常找到一模一樣的內容,很鬱悶 :(  ……

3cphp和 3c php PHP 編碼安全

這幾天由於乙個安全度較高的專案需要啟動 所以我也就把大部分精力放到了編碼安全上面。也了解了一些php編碼方面的安全漏洞。比如xss攻擊和sql注入等。由於本人資歷尚淺,不能嘗試編寫出攻擊類 本篇文章只記錄本人近幾天通過學習php安全編碼方面的一些知識來防止和降低被攻擊的危險。1.關於xss攻擊 首先...

Http協議 3 HTTP實體和編碼

http實體實現目標 可以被正確識別 通過content type和content launage 可以被正確解包 通過content lenght首部和content encoding首部 是最新的 通過實體驗證碼和快取過期控制 符合使用者需要 基於accept系列的內容協商首部 在網路上可以快速...

python3中的url編碼和解碼

在用python進行web開發的時候,當url中含有中文,那麼傳遞到後台伺服器的會是編碼過的url,我們可以用python3把編碼後的文字轉化成我們可以識別的內容。如下操作 import urllib test str 哈哈哈 print test str new urllib.parse.quot...