版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机网络课程实验报告实验2 :抗干扰编码蓝鑫院系自动化学院学号U201514280实验地点科技楼十二楼机房实验时间2018年5月3日实验目的:1. 了解抗干扰编码原理。2、掌握海明编码和 CRC编码的原理,能熟练计算实验容:容1 :海明编码1.1海明编码原理将有效信息按某种规律分成若干组,每组安排一个校验位通过异或运算进行校验,得出具体的校验码;在接收端同样通过异或运算看各组校验结果是否正确,并观察出错的校校组,或者个出错的校验组的共同校验位,得出具体的出错比特位;对错误位取反来将其纠正;假设用N表示添加了校验码位后整个传输信息的二进制位数,用K代表其中有效信息位数,r表示添加的校验码位数,
2、它们之间的关系应满足:N=K + r<2Ar 1 (是为了确保r位校验码能校验全部的数据位,因为r位校验码所能表示的最大十进制数为2Ar-1 ,同时也确保各位码本身不被其他校验码校验)。海明码的校验码的位置必须是在2n次方位置(n从0开始,分别代表从左边数起分别是第1、2、4、8、16),信息码也就是在非2n次方位置第i位校验码从当前校验码位开始,每次连续校验i位后再跳过i位,然后再连续校验i位,再跳过i位,以此类推。确定每个校验码所校验的比特位:巨宇中龍145-141J12*1517哋如pip-blb2ft!Mb5blts沖l>10bllbL2pl技追般JJJJ丿JJJJLp:鮭
3、日竝JJJJJJJJJJJ丿y戸再論艸咗JJJJVJyp 僦JJ1.2海明编码程序流程图焉入编玛库乳L二遥制敎辞T:"1L" H0T,:rr开皓kJ在京玛*列S应立賈咽人“<T枚驻码託每位狡验诃校塗的住相加V否昱对应校验伍苣播入对应校验隹直播入P'得到编玛序列1.3交互界面设计F其译妈序夕q中稅验码恆熨利15息姑任更導剎咬检冯库列库0一全光口否疫強霑富幷报缗序和刘总薛期序列任輩麻血樓正是r1kJI r编码:原码序列从“输入序列”编辑框输入,点击“编码”按钮在“编码序列”编辑框输出编码序列,对输入编码要求为二进制输入译码:编码序列从“输入序列”编辑框输入,点击“
4、译码”按钮在“译码序列”编辑框输出译码序列,若译码错误会有响应的报错和纠错,对输入序列有不小于三位和二进制序列的要求1.4核心代码与注释输入序列框callback%做输入检测,检测是否是“0”“1 ”输入,否则报错temp_str=get(ha ndles.i nput,'Stri ng');nu m_char=u nique(temp_str);%u nique函数获得输入字符串中不同字符的字符串if len gth( num_char)=2%如果字符串长度为 2if num_char(2)='1' %第二个字符不是“ 1 ”说明字符串中有其他字符elsese
5、t(ha ndles. in put,'Stri ng','0000');errordlg('只能输入1和0','输入错误');endelseif length(num_char)=1 %如果字符串长度为1,判断“ 1 ”还是"0",否则报错if nu m_char(1)='0'elseif nu m_char(1)='1'elseset(ha ndles.i nput,'Stri ng','0000');errordlg('只能输入1和0
6、','输入错误');endelse%如果字符串长度不为2,直接报错set(ha ndles.i nput,'Stri ng','0000');errordlg('只能输入1和0','输入错误');End编码按钮callback (编码核心)%获取输入字符串temp_str=get(ha ndles.i nput,'stri ng');%获取字符串长度len_ str=le ngth(temp_str);%转存原码字符串长度备用k=le n_str;%初始化需要插入的校验码的位数r=0;%根据
7、海明编码的2A(r)-1)<(k+r) 要求,计算校验码位数while(2A(r)-1)<(k+r)r=r+l;end%把字符串数组转成0和1的数组,便于处理for i=1:1:len_strif temp_str(i)='1'yuan(i)=1;%原码数组为yuanelseyua n(i)=0;endend%把求得相应位数的校验码,用0插入原码中得到新码j=0;m=1;for i=1:1:(k+r)if i=2A(j) %如果该位置为2的次方,则插入校验码xin (i)=0;j=j+1;elsexin (i)=yua n( m);m=m+1;endend%进行海明
8、编码odd=0;%用于计算每位校验码负责校验的位置的和for j=1:1:r%共有r位校验码,需要计算n=1;%初始化循环变量i=1;while( n*2F-1)+i-1)<=(k+r)%当没有超过数组长度时继续循环if i>(2A(j-1)%如果本段的编码已经加完i=1;%则调转到下一段,也就是隔一个2A(j-1)的段再进行累n=n+2;else%累加odd=odd+xi n(n *2A(j-1)+i-1);i=i+1;endendif mod(odd,2)=0%判断是否为偶数xi n( 2A(j-l)=0;%若为偶数,则在对应的校验位插入elsexi n( 2A(j-l)=l;
9、%若为奇数,则在对应的校验为插入endodd=0;end%编码完毕,把数组转换成字符串用于输出for i=1:1:(k+r)if xin (i)=1output_str(i)='1:elseoutput_str(i)='0:endendset(ha ndles.out,'Stri ng',output_str);译码按钮callback(原理与编码基本相同)%获得译码序列字符串temp_str=get(ha ndles.i nput,'stri ng');len_ str=le ngth(temp_str);%判断输入序列长度是否满足要求,不满足
10、报错返回if len_str<3errordlg('译码最低输入位数为3位','输入出错');elsek=len_str;% 编码息码的个数r=len_str;% 编码中校验码的个数while(2A(r)-1)>=len_str)r=r-1;endr=r+1;%找到校验码的个数k=le n_str-r;for i=1:1:len_str%得到所有编码数组if temp_str(i)='1'xi n( i)=1;elsexin (i)=0;endend%提取出信息编码数组m=1;j=0;for i=1:1:(k+r)if i=2A(j)
11、j=j+1;elseyua n(m )=xi n(i);m=m+1;endend%重新偶校验,原理同编码odd=0;for j=1:1:rn=1;i=1;while( n*2T-1)+i-1)<=(k+r)if i>(2A(j-1)i=1;n=n+2;elseodd=odd+xi n(n *2A(j-l)+i-l);i=i+1;endendif mod(odd,2)=0check(j)=0;%校验结果存在check数组中elsecheck(j)=1;endodd=0;end%把check数组也就是校验结果转成十进制数num_wron g=0;for j=1:1:rnum_wrong
12、=num_wron g*2;if check(r-j+1)=1num_wrong=num_wron g+1;endend%判断校验是否正确,为0则正确if num_wron g=0for m=1:1:kif yua n(m)=1output_str(m)='1:elseoutput_str(m)='0'endendset(ha ndles.ym_out,'Stri ng',output_str);else%否则校验错误,对应位置取反后再输出if xin(num_wron g)=0xin(num_wron g)=1;elsexin(num_wron g)=
13、0;endm=1;j=0;for i=1:1:(k+r)if i=2A(j)j=j+1;elseyua n(m )=xi n(i);m=m+1;endendfor m=1:1:kif yua n(m)=1output_str(m)='1'elseoutput_str(m)='0:endend位出错,对应位置取反后得set(ha ndles.ym_out,'Stri ng',output_str);errordlg('校验码第,nu m2str( num_wron g),'到正确解码为',output_str,'校验出错
14、39;);endend1.5程序执行测试编码测试 正常编码海明编码海明一编码饶:心?占1101Q1讦 叭:MONE译码测试输入报错 正常解码 解码错误与纠正HMHM海明一编码海明一编码海明一编码010C10C0-11010 tool0100101谭码序筍h0101An幄宵厅列0110101011110111容2 : CRC编码2.1 CRC编码原理在K位信息码后再拼接 R位的校验码,整个编码长度为 N位,因此,这种编码也叫(N , K)码。对于一个给定的(N , K)码,可以证明存在一个最高次幕为 N-K=R 的多项 式 G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC
15、码的生成多项式。 校验 码的具体生成过程为: 假设要发送的信息用多项式 C(X)表示,将C(x)左移R位(可表 示成C(x)*2R ),这样C(x)的右边就会空出 R位,这就是校验码的位置。用 C(x)*2R 除以生成多项式G(x)得到的余数就是校验码。若设码字长度为 N,信息字段为K位,校验字段为 R位(N=K+R),则对于CRC码集 中的任一码字,存在且仅存在一个R次多项式g(x),使得 V(x)=A(x)g(x)=xRm(x)+r(x);其中:m(x)为K次原始的信息多项式,r(x)为R-1次校验多项式(即 CRC校验和),g(x)称为生成多项式:g(x)=g0+g1x1+ g2x2+.
16、+g(R-1)x(R-1)+gRxR发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC码字。2.2 CRC编码程序流程图译码V琥入土辰弍1T列是皆为二迸制字符序列压是舌苴位#位车主1足杏为二遊制字符库駅風是否昔粒辛位下为1期fi入序列狗生曲丸冲列寄讓成二遴:ti珈坦啦入洋列和生虚点睜和都转辰二进制龛组體入序列加上生成式低住療T的匚转荐別幅时數咀从生我式荟遵贮开培熾笠降法也就皂呉或运算賦圭咸式去度更井當做抵除总也就是匸或运算低九isdi,構剰醮粮席列右tz为:商为1则裔1*错刘余SS序列2.3 交互界面设计编码:原码序列由“输入序列”编辑框输入,生成式由“生成式子”
17、编辑框输入,点击“编码”按钮,在“输出序列”编辑框输出编码序列,对输入序列有二进制输入的要求,对生成式的输入除二进制输入以外,还有首位与末位不能为0的要求译码:编码序列由“输入序列”编辑框输入,生成式由“生成式子”编辑框输入,点 击“译码”按钮,在“输出序列”编辑框输出译码序列,对输入序列有二进制输入 的要求,还有不能小于生成式的长度,否则将报错,对生成式的输入除二进制输入 以外,还有首位与末位不能为 0的要求2.4 核心代码与注释编码按钮callback(编码核心)temp_str=get(ha ndles.i nput,'stri ng');len _str1=le ngt
18、h(temp_str);for i=1:1:len_str1%把原码的字符串转成数组,便于后续处理if temp_str(i)='1'sz(i)=1;temp_sz(i)=1;elsetemp_sz(i)=O;sz(i)=O;endendtemp_crc=get(ha ndles.crc,'stri ng');len _scs=le ngth(temp_crc)-1;for i=1:1:(len_scs+1)%把生成式的字符串转成数组if temp_crc(i)='1'scs(i)=1;elsescs(i)=0;endend%把原码后面加上 CR
19、C冗余编码,位数为 CRC生成式长度-1for i=le n_str1+1:1:(le n_str1+le n_scs)temp_sz(i)=0;sz(i)=0;end%从生成式长度位开始往后循环做类似于长除法的运算,实际为异或,注意首位为0时商0for j=(le n_scs+1):1:(le n_str1+le n_scs)if temp_sz(j-le n_scs)=0for i=1:1:(le n_ scs+1)if temp_sz(j-le n_scs-1+i)=0temp_sz(j-le n_scs-1+i)=0;elsetemp_sz(j-le n_scs-1+i)=1;ende
20、ndelsefor i=1:1:(le n_scs+1)if scs(i)=temp_sz(j-le n_scs-1+i)temp_sz(j-le n_scs-1+i)=0;elsetemp_sz(j-le n_scs-1+i)=1;endendendend%把得到的冗余码余子式加上原码后面形成编码for i=(le n_str1+1):1:(le n_str1+len_scs) sz(i)=temp_sz(i);end%把数组转成字符串数组并输出for i=1:1:(le n_str1+le n_scs)if sz(i)=1output_str(i)='1:elseoutput_st
21、r(i)='0:endendset(ha ndles.output,'Stri ng',output_str);译码按钮callback(原理与编码基本相同)temp_str=get(ha ndles.i nput,'stri ng');len _str1=le ngth(temp_str);for i=1:1:len_str1if temp_str(i)='1'sz(i)=1;temp_sz(i)=1;elsetemp_sz(i)=0;sz(i)=0;endend temp_crc=get(ha ndles.crc,'stri
22、ng');len _scs=le ngth(temp_crc)-1;if len_ str1<=le n_scs','输入错误');errordlg('输入译码序列长度不能小于生成式序列长度elsefor i=1:1:(le n_ scs+1)if temp_crc(i)='1'scs(i)=1;elsescs(i)=0;endendfor j=(le n_scs+1):1:le n_str1if temp_sz(j-le n_scs)=0for i=1:1:(le n_scs+1)if temp_sz(j-le n_scs-1+i
23、)=0temp_sz(j-le n_scs-1+i)=0;elsetemp_sz(j-le n_scs-1+i)=1;endendelsefor i=1:1:(le n_scs+1)if scs(i)=temp_sz(j-le n_scs-1+i) temp_sz(j-le n_scs-1+i)=0;elsetemp_sz(j-le n_scs-1+i)=1;endendendendfor i=(le n_str1-le n_scs+1):1:le n_str1 sz(i)=temp_sz(i);endfor i=1:1:(le n_str1-le n_scs)if sz(i)=1output
24、_str(i)='1:elseoutput_str(i)='0:endendset(ha ndles.output,'Stri ng',output_str);er=0;for i=(le n_ str1-le n_scs+1):1:le n_ strl sz(i)=temp_sz(i);if temp_sz(i)=0er=er+0;elseer=er+1;endendif er>0set(ha ndles.output,'Stri ng','NONE'); errordlg(' 校验错误','校验错
25、误');endEnd2.5程序执行测试编码测试正常编码译码测试输入报错 I 氐 a '? /i ! m r 卜就 *iojfi入蜡误正常译码CRC -CRC-编码译码报错CRC-匸CRC编码CRC 一 亡CRC编碣A砂:1101000CRC -CRC编码*人"0M1M0他人芒兀:110111刊101主.張式子t1011jk 戈孑i1Q01容3 :思考问题3.1 CRC编码和海明编码的主要区别有哪些?3.1.1 CRC 和海明的校验码的位置不同,CRC冗余码加在原码序列后面,从而形成编码序列,而海明是插在 2的次方位3.1.2 CRC的冗余码位数和生成式有关,一旦生成式定下来,那么冗余码位数就确定
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵州省黔南州都匀市2023-2024学年八年级上学期期末考试数学试卷(答案不全)
- 养老院老人生活照顾人员激励制度
- 养老院老人健康监测人员社会保险制度
- 《开场白的艺术》课件
- 挽回婚姻协议书(2篇)
- 拆架子免责协议书(2篇)
- 《生化课件生物氧化》课件
- 2025年甘肃货运资格证考题
- 2025年黑龙江货运从业资格考试题目及答案大全解析
- 2025年拉萨货运从业资格证结业考试答案
- 2023年电力营销人员试题库
- 当代国际政治与经济 期末复习课件高中政治统编版选择性必修一
- 第三单元《天气》-2024-2025学年三年级上册科学单元测试卷(教科版)
- 静脉炎的预防与处理(读书报告)
- 潮湿相关性皮炎的护理
- 中国舞台机械行业市场现状、前景分析研究报告(智研咨询发布)
- 奠基仪式策划方案
- 颜色科学与技术智慧树知到答案2024年西安理工大学
- 《线性代数》全套教学课件
- 消防应急预案电子版
- 广西桂林市(2024年-2025年小学三年级语文)部编版期末考试(上学期)试卷(含答案)
评论
0/150
提交评论