POCSAG编码和BCH(31,21)校验详解

 

最近在做一个项目,使用以前寻呼机使用的POCSAG编码,下面先介绍下POCSAG编码。

1.1 POCSAG简介

POCSAG码是我国公众寻呼网广泛使用的信息编码,它具有容量大、编码效率高、适应能力强等优点委员会(CCIR)推荐为“无线寻呼1号码”。

1.2 POCSAG码的格式

POCSAG码常使用1200 bps和512 bps 2种传输速率。每次传输包括一个前置码(Preamble),亦称位同步码,后跟完整码字的若干个码组(Batch),每个码组起始均有一个字同步码字(SC)。当无后续呼叫时,发送可在一码组终点停止。信号格式如图1所示。

,被国际无线电咨询

图1 POCSAG码格式

  • A为前置码,它是一种101010……形式的翻转方波,其持续时间至少为576位;
  • B为POCSAG第一码组,它以同步码字(SC)开始,其后跟随着8个帧(Frame),每帧又包含2个码字(Codeword) ,每个码字为32位。显然,每帧的长度是17个码字,共544位。
  • C为第二及随后的各码组,码组结构与第一码组相同。码字可分为同步码字、地址码字、信息码字和空闲码字4种。
    1. 同步码字的16进制表示为(7CD215D8 ),
    2. 空闲码字的16进制表示为(7A89C197)。
    3. 在地址码字中,第1位为0,第2~19位为地址,20和21位为状态,22~31位为BCH校验,第32位为奇偶校验。
    4. 在信息码字中,第1位为1,第2~21位为信息,22~31位为BCH校验,第32位为奇偶校验。

在实际信息传输中,总是在遵守以上格式的情况下,一个地址码字后面跟随着多个信息码字。在每个码组中,对同步码字后的8个帧分别给予0~7的编号。在实际寻呼网中,全部寻呼机被分成8组,每个寻呼机只接收特定帧的地址码,因此,寻呼机接收的特定帧号成为其21位地址的低3位。在任何码组中,若没有地址码字或信息码字时,则用空闲码字填满。

 

2.1 BCH(31,21)编码解码

假设我们来传输的信息是“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

1

0101 0011 0100 0001 0100

BCH(31,21)值

奇偶校验位

码字2

1

1001 0101 0100 0101 0011

BCH(31,21)值

奇偶校验位

码字3

1

0100 1000 0100 0001 0000

BCH(31,21)值

奇偶校验位

2.2 BCH(31,21)编码

查阅相关资料(《信息论与编码》)可得: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     

 

2.3.1 BCH(31,21)纠正一位错误

在数据传输过程中,如果没有发生错误的话,我们应该接收到的内容应该是:

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)的一致校验矩阵。

 

提示:矩阵的转置矩阵等于原矩阵的行列元素相互交换,如果交换前矩阵元素为M*N,则转置后矩阵为N*M,示例如下。

A

B

C

 

A

D

G

J

D

E

F

前后

互为

转置

矩阵

B

E

H

K

G

H

I

C

F

I

L

J

K

L

 

 

 

 

 

BCH(31,21)一致校验矩阵为10行31列,则它的转置矩阵H为31行10列,D为1行31列。R=D*H,则R为1行10列的矩阵。

矩阵乘法示例:

 

a

b

c

d

e

f

矩阵A

 

1

2

3

4

5

6

矩阵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)的第二位发生了错误,将其反转纠错。

2.3.1 BCH(31,21)纠正二位错误

这只是一位数据发生错误的情况,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所示:

列5

0

1

1

1

1

0

0

0

0

1

列7

0

1

1

0

1

0

0

0

1

0

结果

0

0

0

1

0

0

0

0

1

1

图4 列5与列7的异或结果。

其结果行与上面对数据(3)进行的纠错计算是一样的,所以可以得知接收到的数据第5和第7位发生了错误,进行反转即可。

 

作者没有上过《信息论与编码》的课程,内容难免有错误,欢迎提出,作者定在第一时间修改。

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

作者也不清楚文件中提到的g(x) 和一致校验矩阵是怎么来的,都是由相关资料中找到的。

参考文献:

《信息论与编码导论》Robert J.McEliece

《信息论与编码》姜丹

 

作者将在最近时间提出编码与解码程序,如有兴趣请关注。

希望文章能够帮助你,最后一句“支持原创”,经常找到一模一样的内容,很郁闷 :(  ……

源码链接:http://download.csdn.net/detail/woijal520/3618990 添加日期:2011-09-20 13:07:00

你可能感兴趣的:(编码与校验,咨询,c)