最近在做乙個專案,使用以前尋呼機使用的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...