资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
杭 州 电 子 科 技 大 学实 验 报 告学生姓名:金雨鑫 学 号:12081220 指导教师:吴端坡实验地点:第 1 教研楼 108 实验时间:第 1012 节一、实验室名称: 计算机通信与网络实验室二、实验项目名称: Coding on error dectecting algorithms(C+)三、实验学时:3 学时四、实验原理:1. CRC 即 循环冗余校验码(CyclicRedundancyCheck1 ):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC )是一种数据传输检错 功能, 对数据进行多项式计算,并将得到的结果附在帧的后面,接收 设备也执行类似的算法,以保证数据传输的正确性和完整性。2. 循环冗余校验码(CRC)的基本原理是:在 K 位信息 码后再拼接 R 位的校验码,整个编码长度为 N 位,因此,这种编码也叫(N,K )码。对于一个给定的(N, K)码 ,可以 证明存在一个 最高次幂为 N-K=R 的多项式 G(x)。根据 G(x)可以生成 K 位信息的校验码,而 G(x)叫做这个 CRC 码的生成多项式。 校验码的具体生成过程为:假设要发送的信息用多项式 C(X)表示,将 C(x)左移 R 位(可表示成 C(x)*xR),这样 C(x)的右边就会空出 R 位,这就是校验码的位置。用 C(x)*xR 除以生成多项式 G(x)得到的余数就是校验码。3. 任意一个由二进制位串组成的代码都可以和一个系数仅为0和1取值的多项式一一对应。例如:代码 1010111 对应的 多项式为 x6+x4+x2+x+1,而多项式为 x5+x3+x2+x+1 对应的代码 101111。4. 奇 偶校验(ParityCheck)是一种校验代码传输正确性的方法。根据被传输的一组 二进制代码的数位中“1” 的个数是奇数或偶数来 进行校验。采用奇数的称为 奇校验,反之,称为 偶校验。采用何种校 验是事先 规定好的。通常专门设置一个 奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用 奇校验,则当接收端收到这组代码时,校 验“1”的个数是否为奇数,从而确定传输代码的正确性。五、实验目的:1.认识学习 CRC 原理,并掌握 CRC16-IBM 的编写方法。2.学习奇偶校验的原理,并会用 C 代码编写。六、实验内容:1. Cyclic redundancy checkUsing the polynomials below to encode random generated data stream (40-100bits). Show the FEC, and encoded data frame.CRC-4 x4+x+1 ITU G.704CRC-16 x16+x15+x2+1 IBM SDLCCRC-32 x32+x26+x23+.+x2+x+1 ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCSFor the error patter listed below, what the conclusion does the receiver get? Can the receiver find the errors?Case Error patternNo error 00000000One error 1000.000Two errors 100.001Random errors Random error pattern2. Parity check Using even or odd parity check on random generated data stream (8-20bits).Show encoded data frame.For the error patter listed below, what the conclusion does the receiver get? Can the receiver find the errors?Case Error patternNo error 00000000One error 1000.000Two errors 100.001七、实验器材(设备、元器件):笔记本 1 台, 八、实验步骤:#include #include using namespace std;#define POLY 0xA001 /8005 的二进制倒过来写就是 A001 不同的计算机存储数据的时候可能会不一样 类似于大端和小端 typedef unsigned char uint8_t;typedef unsigned short uint16_t;typedef unsigned int uint32_t;uint16_t gen_crc16 (uint8_t const * buffer, uint16_t len)uint16_t i, j;uint8_t data;uint16_t crc=0;for (j = 0; j 1) POLY): (crc 1);data = 1;return crc;char* hex_byte(unsigned char c)static unsigned char buf9=0;char i;for(i=0;i(7-i)return (char*)buf;void hex_print(unsigned char* c,int len)int i;for(i=0;i8;printf(%s ,hex_byte(c);c=datprintf(%s ,hex_byte(c);unsigned char data512=a,b,c,d;unsigned char ALL_ZERO512=0;#define DATA_LEN 4#define DATA_TST dataint main()uint16_t crc16;printf(原始数据:t); hex_print(DATA_TST,DATA_LEN);printf(CRC-16: t);crc16=gen_crc16(DATA_TST,DATA_LEN);hex_print_ushort(crc16);printf(0x%x)n,crc16);DATA_TSTDATA_LEN+1=crc168;DATA_TSTDATA_LEN=crc16printf(n 要发送的数据:t);hex_print(DATA_TST,DATA_LEN+2);printf(n 如果没有错误:n);printf(核对结果: t);crc16=gen_crc16(DATA_TST,DATA_LEN+2);hex_print_ushort(crc16);printf(nn 如果第一位数据反转了 n);DATA_TST0=DATA_TST00x80;printf(错误数据: t);hex_print(DATA_TST,DATA_LEN+2);printf(校验后 t);crc16=gen_crc16(DATA_TST,DATA_LEN+2);hex_print_ushort(crc16);return 0;奇偶校验:#include#include#include#include#include #include #define NO_ERROR 1#define ONE_ERROR 2#define TWO_ERROR 3#define Parity 0#define check 1int flag_parity;/判断奇偶校验void ByteToBit(char* out,const char* in,int bits);char Parity_check(char *message_output,int length,int mode);int main() int channel_way =0;int len_d=5,k,f,message_number;/被除数长度设置int length; /messages lengthchar message_input1000=;char message8=NULL;/ data that produced by chance char message_output1000 = NULL;fflush(stdin);/任意输入数据printf(please input the message!n);gets(message);printf(A need to send this message:%sn,message);length = strlen(message);ByteToBit(message_output,message,length*8);for(k = 0;k3(i/ printf(%d:%dn,i,outi);/*/function: 完成奇偶校验/输入:message_output 为需要传输的数据以及数据的长度 lengh 奇偶校验的模式/输出:返回奇偶校验的结果*/char Parity_check(char *message_output,int length,int mode)fflush(stdin);int i,j = 0;/偶校验if(flag_parity= 1) if(mode = Parity) for(i = 0;ilength;i+) if(message_outputi = 49)j+;elsecontinue;if(j%2 = 0)return 0;elsereturn 1;else for(i = 0;ilength;i+)if(message_outputi = 49)j+;elsecontinue;if(j%2 = 0)return 0;elsereturn 1;/奇校验else if(flag_parity = 0)if(mode = Parity)for(i = 0;ilength;i+)if(message_outputi = 49)j+;elsecontinue;if(j%2 = 1)return 0;elsereturn 1;elsefor(i = 0;ilength;i+)if(message_outputi = 49)j+;elsecontinue;if(j%2 = 1)return 0;elsereturn 1;九、实验数据及结果分析:与标准 CRC 校验计算器的对比CRC:除了没有错误之外,其余的均能检测到错误。奇偶校验:Even parity:No error: One error:Two error:Odd parity:No error: One error:Two error:结果如图中所示:奇偶校验能够检测出信息传输过程中的部分误码(奇
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号