rs编码中c(x)有什么特点

Python09

rs编码中c(x)有什么特点,第1张

rs编码中c(x)有什么特点?

RS码是一类纠错能力很强的多进制BCH码[1],其纠错能力和编码效率在线性分组码中是最高的。RS码特别适合用于多进制调制的场合[2],同样适用于在衰落信道中纠正突发性错码[3]。与此同时,RS码能用来构造其他码类,如级联码。由于其具有以上优良性能,目前已被广泛应用在各种通信系统和计算机存储系统中。

1 RS码的编译码原理及数学模型构建

RS码是一种特殊的多进制BCH码。设p为素数,q=pm,那么由伽罗华域GF(q)产生的码就称作q进制码。二进制BCH码的码长为n=2m-1,若要纠正t个错码,则需要2t个监督码元。同理在q进制码中,码长为n=qs-1,若要纠正t个错码,则需要2st个监督码元,当s=1时的q元BCH码称为RS码,属于非二元BCH码。

1.1 RS码的编码

RS码是循环码的一种,因此其编码方式与一般循环码的编码方式一致。

一个(n,k)RS码的生成多项式g(x)为:

g(x)=(x-α)(x-α2)…(x-a2t)=(x-αi)

其中αi是伽罗华域GF(2m)={0,α0,α1,…,α2m-2}中的一个元素,t为RS码能够纠正的错码个数。

信息多项式m(x)为:

m(x)=mk-1xk-1+mk-2xk-2+…+m1x1+m0

用m(x)除以g(x),所得余式为校验多项式h(x),将h(x)置于m(x)之后,即生成了RS码。

编码后的码字多项式c(x)为:

c(x)=xn-km(x)+h(x)=xn-km(x)+[xn-km(x)]modg(x)

1.2 RS码的译码

RS码是一种非二元循环码,它不再具备特征为2的域运算等性质[4],本文RS码译码算法基于PGZ译码算法,主要分为以下4步:

1.2.1 计算伴随式sk

RS码的伴随式是接收码字r(x)除以生成式g(x)所得的余式。对于RS码共有2t个伴随式。

假设r(x)=r0+r1x+…+rnxn-1

通过RS232总线与PC进行通信的测试程序(c语言)

/*这是一个使用单片机串行通信口通过RS232总线与PC进行通信的测试程序,无需扩展.可将DB9的第2和第3脚短路,进行自收自发测试.采用串行中断接收,速率:9600,通信方式2,晶振使用:osc=11.0592MHz。使用SW1-SW6键盘发送文本数字1-6,数码管显示接收的ASCII数据*/

void main(void)

{

SCON=0x50

TMOD=0x21

TH1=0xfd

TL1=0xfd

TH0=0xf4

TL0=0x48

ES=1ET0=1EA=1

TR1=1

TR0=1

while(1)

{

if(!key){ Delay(30000)

a=Key_down()

SBUF=table[a]

while(TI==0)

TI=0

}

}

}

uchar Key_down(void)

{ uchar x

if(!sw1)x=1

else if(!sw2)x=2

else if(!sw3)x=3

else if(!sw4)x=4

else if(!sw5)x=5

else if(!sw6)x=6

return(x)

}

void Int_T0(void) interrupt 1

{

TH0=0xf4

TL0=0x48

if(count==5)count=0

else count++

switch(count)

{

case 0:DIG_NUM=0x7f

LED_DISPLAY=buff_led1

break

case 1:DIG_NUM=0xbf

LED_DISPLAY=buff_led2

break

case 2:DIG_NUM=0xdf

LED_DISPLAY=buff_led3

break

case 3:DIG_NUM=0xef

LED_DISPLAY=buff_led4

break

case 4:DIG_NUM=0xf7

LED_DISPLAY=buff_led5

break

case 5:DIG_NUM=0xfb

LED_DISPLAY=buff_led6

break

default:break

}

}

void Int_Serial(void) interrupt 4

{

while(RI==0)

a=SBUFRI=0

buff_led1=buff_led2

buff_led2=buff_led3

buff_led3=buff_led4

buff_led4=buff_led5

buff_led5=buff_led6

buff_led6=a

}

void Delay(int t)

{while(--t)}

#define SENDLEN 14

unsigned char sendbuf[SENDLEN ]

//初始化串口

SCON = 0x50//串口方式1,允许接收

TMOD = 0x20//定时器1定时方式2

TCON = 0x40//设定时器1开始计数

TH1 = 250//波特率9600

TL1 = 250

PCON = 0x80//波特率加倍控制,SMOD位

RI = 0//清收发标志

TI = 0

TR1 1 = 1//启动定时器

//在这里要给sendbuf装入要发送的数据

for(i=0 i <S ENDLEN i++)

{

while(!TI)

SBUF = sendbuf[i]

}