
接收的巧衫道理一此伍样, 只是检测的标志位不同和SBUF赋值方向不同而已
#include <reg51.h>
#define UINT8 unsigned char
void UARTSendByte(UINT8 Byte)
{//串口发送1个字节
while(TI==1)
SBUF=Byte//向串口发送数据
while(TI==0)//等待发送完成
TI=0//清楚标志位
}
void UARTSendStr(UINT8 *String)
{//串口发送一个字符串
int i
UINT8 len = strlen(String)
for (i = 0i <leni++)
UARTSendByte(String[i])
}
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
#define SENDLEN 14unsigned 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]
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)