


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、二、创新实验设计创新实验一:(7,4)汉明码的编码与译码实现1、实验目的实现(7,4)汉明码的编码与译码,通过这次实验不但加深了对汉明码编码和译码原理了解,而且对线性分组码有所了解。2、实验原理线性分组码的构造方法比较简单、理论较为成熟,应用比较广泛。汉明码是一种能够纠正一个错码的效率比较高的线性分组码,下面以(7,4)码为例就汉明码的编码与译码分别进行介绍:(1)编码原理一般来说,若汉明码长为n,信息位数为k,则监督位数r=n-k。若希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求2r1n或2r1kr1(1)设汉明码(n,k)中k=4,为了纠正一位错码,由式(1)可知
2、,要求监督位数r>3。若取r=3,则n=k+r=7。这样就构成了(7,4)码。用a6a5a4a3a2a1a°«示这7个码元,用&的值表示3个监督关系式中的校正子,则S1S2S3的值与错误码元位置的对应关系可以规定如表1所歹0。表2.1校正子和错码位置的关系S1S2S3错码位置S1S2S3错码位置°°13°1°134°1°3111°351°°3211136°1133°°°无错码则由表1可得监督关系式:§36353432236
3、3533313S33634333°4在发送端编码时,信息位36353433的值决定丁输入信号,因此它们是随机的监督位32、31、a°应根据信息位的取值按监督关系来确定,为使所编的码中无错码,则,S2,S3等于0,即ikQikP'01001100010101363534320363533363433方程组(5)可等效成如下矩阵形式3130360(5)01110100353401101010330(6)10110013231300式(6)可简化为HAt0T1,H为监督矩阵11010,则由式(6)可得到监督矩阵0H1110100110100=PM(7)1因为生成矩阵G=I
4、kQ=IkMP,所以由(7)得生成矩阵G如下:然后利用信息位和生成矩阵G相乘产生整个码组,即有A=8635343332919036959493(8)其中A为整个码组矩阵,36353433是信息位根据上述原理可以得到(7,4)汉明码的整个码组。(2)译码与检错、纠错原理当数字信号编码成汉明码后,由于信道噪声的存在,使得经过信道后的汉明码会发生差错,使得接收端接收到错码,因此需要多错码进行纠正,以提高通信系统的抗十扰能力及可靠性。下面分析纠错译码原理。设B为接收码组,它是一行7列的矩阵,即B=b1b2b3b4b5b6b7,B中可能含ei有错码,错误图样EAB=e7e6ese4e3e2e,在E的表达
5、式中,有当biai时当biai时Tei1,(i0,1,2L,7)若e0,表示该码元没错;0。1表小该码兀为错码。(9)ABEe2a2e2AE2A4E2A5E2E3A2E3AE3A4E3AE3EjA2EjAEjA4EjA5EjE2nkA2E2nkAE2nkA4E2nkA5E2nAA3AA5kA(全0码字)(9)表示接收码组和错误图样之和等丁正确码组U,通过(9)式就可以实现纠错。可以用标准阵来表示所有可能的2n个n元码组的接收欠量,(n,k)码的标准阵形式如下:应该注意到,码组起两个作用:既是其中一个正确码组,也Ai是错误图样Ei,代表Ai所在行没有错误。标准阵中的Ai,E2,E3LE2nk是陪
6、集首,陪集首的选择是有规定的,第j行的陪集首是在前j-1行中没有出现的最小码组,即错误图样E,如果不选错误图样作为陪集首,译码将会产生错误。对丁(7,4)汉明码,其最小码重是3,设码的纠错能力为t,根据公式t如2得该码的纠错能力为1,即能纠错一位错码。由丁根据完备码的定义有2nkn(12)将(7,4)码代入(12)可以得知,(7,4)汉明码为完备码组,只能纠错和检错一位错码。对丁正确码组A而言,有AHT0(10)当接收到错码变成码组B时,有SBHt(AE)HtAHtEHtEHt(11)其中S为校正子所构成的校正矩阵,由丁S和E如(11)所示的一一对应的关系,对丁(7,4)码,错误图样与伴随式的
7、对应关系如下表2.2伴随式查询表错误图样伴随式000001010100011101110111通过伴随式查询表,可以由伴随式得到错误图样,从而实现检错,进而实现纠错。3、实验内容由丁编码涉及到矩阵的运算,而matlab在处理矩阵运算方面有独特优势,所以这次选择用matlab工具来实现(7,4)汉明码的编码和译码。(7,4)码的编码比较简单,已知监督矩阵H,可以通过函数求生成矩阵G,然后信息位和生成矩阵G相乘就可得到所有的码组,(7,4)汉明码的编码程序如下:%(7,4)汉明码编码2012.11.10clearall;clc;H=1110100;1101010;1011001;%(7,4)码的监
8、督矩阵G=gen2par(H)%(7,4)码的生成矩阵m=0000;0001;0010;0011;0100;0101;0110;0111;1000;1001;1010;1011;1100;1101;1110;1111;%姗有的信息位U=rem(m*G,2);disp('(7,4)汉明码的编码结果:');disp(U);由原理分析可知,要实现纠错和检错译码,关键在丁伴随式查询表,因此如何实现伴随式查询表是编程的关键,(7,4)汉明码的译码程序如下:%弥面是(7,4)码译码A=input('请输入接收码组:);r,l=size(A);E=0000000;0000001;00
9、00010;0000100;0001000;0010000;0100000;1000000;%校正子,然后将其转化成十进制数fori=1:rSx=S(i,1)*4+S(i,2)*2+S(i,3);end%无面是(7,4)码检错fori=1:rswitch(Sx)case0disp('此接收码字没错')case1disp('注意:此接收码字的第一位有错,请纠正)case2disp('注意:此接收码字的第二位有错,请纠正)case4disp('注意:此接收码字的第三位有错,请纠正)case3disp('注意:此接收码字的第四位有错,请纠正)case5
10、disp('注意:此接收码字的第五位有错,请纠正)case6disp('注意:此接收码字的第六位有错,请纠正)case7disp('注意:此接收码字的第七位有错,请纠正)endend%弥面为在知道哪位出错的情况下,进行纠正fori=1:rswitch(Sx)case0B(i,:)=A(i,:)+E(1,:);case1B(i,:)=A(i,:)+E(2,:);case2B(i,:)=A(i,:)+E(3,:);case4B(i,:)=A(i,:)+E(4,:);case3B(i,:)=A(i,:)+E(5,:);case5B(i,:)=A(i,:)+E(6,:);cas
11、e6B(i,:)=A(i,:)+E(7,:);case7B(i,:)=A(i,:)+E(8,:);endendB=rem(B,2);disp('纠错后的码字);disp(B);由于可能在纠错过程中会产生错误,在此,我们设计了检错纠错是否产生错误的程序,程序如下:%面为检查纠错是否产生错误k=1;fork=1:16if(U(k,:)=B)flag=1;breakendendifflag=1disp('纠错无误');elsedisp('注意:纠错有误,请检查)End由丁译码的目的就是找出信息位c,所以,需要从纠错后的码组中提取出信息位,提取信息位的程序如下:%面为提
12、取码的信息位forj=1:4c(:,j)=B(:,j);enddisp('信息位c如下:')disp(c)4、实验结果分析运行编码程序后,得到如下结果4)码的编内结泉0D000000I000101001110100101011011000111010001100111010010110110001101Q11101111110。11011C100111001100100101100C11通过理论计算,可以得出实验结果和理论编码结果吻合,可以发现,(7,4)码的最小码重是3当接收码组为1101100时,译码结果如下请输入楼收弱字,1101100注意=此接收码字的第六位有错,请割正
13、纠惜后的四字10011。朗卷无误信息位cinTs1001fii»V运行程序后,可以看到:当接收码组为1101100时,会出现“注意:此接收码字的第六位有错,请纠正”的提示,在程序中,为防止纠错错误,我设置了纠错后的码和编码结果的比较,如果纠错后的码和编码结果当中的某个码组相同,说明纠错无误,否则纠错有误。当接收码组为1101100时,经过纠错后出现纠错无误的结果,说明纠错后的码是正确码组。然后提取纠错后的码组的信息位c,从运行结果可以看出,c=1001。当接收码组为0101101时,运行结果如下:请输入接收谒字:CQ1011311此接收码字没槽甜槽后的码字C101101维无误信息位珈
14、下,0101fii»此接收码组本来就是一个正确码组,所以通过运行程序后,会出现“此接收码字没错”的提示,纠错后的码字和接收的码组是相同的,检查到纠错无误,然后提取信息位c,信息位c=0101,整个译码完成。5、改进建议(7,4)汉明码的编码与译码相对比较简单,可以通过matlab编程实现对信道编码性能的分析,可以编程实现比较编码后的误码率和没编码的误码率,也可以编程实现在有噪声的情况下来进行译码。创新实验二:(7,4)循环码的编码与译码实验编码原理:根据循环码的代数性质建立系统编码的过程,可以把消息欠量用如下多项式表小:,、k1k2m(x)mk1Xmk2X.mxm0要编码成系统循环码
15、形式,把消息比特移入码字寄存器的最右边k位,而把监督nk一m(x)=n1mk1xmkn22xnk1nkmxmoxm(x)=q(x)g(x)+p(x),其中p(x)可以表示为nk1P(x)=pnk1xn1=mk1x另U(x)=p(x)+mk1)。n2mk2xnkxPxPon.mxnmoxm(x),则U=(Po,P1,则p(x)+k+PnP2n1xPnkm(x)k1.PxPok1mom1.?比特加在最左边的n-k个中,贝瑚用x乘以m(x)得到本实验根据以上原理,用matlab实现书上例6.8系统形式的循环码,生成多,在(%,k)循环码中,1xx1可分解成g(x)和其他因式的乘积,记为3项式为g(x
16、)=1xx1. 实验译码原理:译码的实验原理g(x)=由丁g(x)能除尽,因此nxg(x)h(x)即可写成h(x)x*即h(x)=、一*4则h(x)=x其中h(x)式h(x)的逆多项式。监督矩阵多项式可表示为x2h(x)H(x)(x)*xh(x)(7,4)循环码的编码(4位)的程序:clear;clc;a=input('请输入消息矢量:);%高次项系数在前的生成多项式Gx=1o11;%将数组a的高位依次放在数组Data的低位Data=zeros(1,7);Data(1)=a(4);Data(2)=a(3);Data(3)=a(2);Data(4)=a(1);%Data除以Gx得到余数R
17、xQx,Rx=deconv(Data,Gx);b=Rx+Data;%将数组b的高位放在后面c=b(1);b(1)=b(7);b(7)=c;c=b(2);b(2)=b(6);b(6)=c;c=b(3);b(3)=b(5);b(5)=c;%将数组b校正fori=1:7ifrem(abs(b(i),2)=0b(i)=0;endendfori=1:7ifrem(abs(b(i),2)=1b(i)=1;endenddisp('输入序列:');adisp('编码输出序列:');b程序运行结果为:请输入消息矢量,11001输入序列wLL0编四输七序列;b=I0111改变输入序
18、列诺辐1入字肖且关皇:r111辅亍歹U5a=111至扁看马输出序歹I±b=1O1O1运行结果的编码如下:输入序列输出序列输入序列输出序列10000000000091000110100020001101000110100101110013001011100101110100011010400110100011121011100101150100011010013110010111006010111001011411010001101701101000110151110010111080111001011116111111111112. 相对应的译码和纠错(7位)程序:clear;clc
19、;r=1001111;h=1,0,0;1,1,0;1,1,1;0,1,1;1,0,1;0,1,0;0,0,1;b=flipud(h);s=r*b;fori=1:3ifrem(abs(s(i),2)=0s(i)=0;endendfori=1:3ifrem(abs(s(i),2)=1s(i)=1;endendifs=000e=0000000;elseifs=100e=0000001;elseifs=110e=0000010;elseifs=111e=0000100;elseifs=011e=0001000;elseifs=101e=0010000;elseifs=010e=0100000;else
20、s=001e=1000000;endu=r+e;fori=1:7ifrem(abs(u(i),2)=0u(i)=0;endendfori=1:7ifrem(abs(u(i),2)=1u(i)=1;endendData=zeros(1,4);Data(1)=u(4);Data(2)=u(5);Data(3)=u(6);Data(4)=u(7);ife=0000000disp('没有错误:')k=0,elsedisp('第几位错误:')k=find(e);enddisp('接收码字')disp('译码输出序列:')Data第几位错误:
21、k=5接收码字r=1001111译码输出序列:Data=1011以上编码有个缺点,就是它只能对一个消息矢量(4位)进行编码,我乂在这个基础上编写了一个可以同时对位数是4的倍数的消息矢量进行编码。5.多位循环码(4的倍数)的编码程序如下:clear;clc;a=11001011;X,N=size(a);%将信息码分为M帧,1帧4个信息码M=ceil(N/4);d=zeros(1,4);b=zeros(1,7*M);Data=zeros(1,7);fork=1:Mforj=1:4d(j)=a(j+(k-1)*4);end%生成多项式Gx=1011;Data(1)=d(4);Data(2)=d(3)
22、;Data(3)=d(2);Data(4)=d(1);%Data除以Gx得到余数RxQx,Rx=deconv(Data,Gx);e=Rx+Data;b(7*k-6:7*k)=e(1:7);c=b(1+(k-1)*7);b(1+(k-1)*7)=b(7+(k-1)*7);b(7+(k-1)*7)=c;c=b(2+(k-1)*7);b(2+(k-1)*7)=b(6+(k-1)*7);b(6+(k-1)*7)=c;c=b(3+(k-1)*7);b(3+(k-1)*7)=b(5+(k-1)*7);b(5+(k-1)*7)=c;endfori=1:M*7ifrem(abs(b(i),2)=0b(i)=0
23、;endendfori=1:M*7ifrem(abs(b(i),2)=1b(i)=1;endenddisp('输入序列:');adisp('编码输出序列:');b程序运行结果如下:输入序列:a=11001011编码输出序歹0:b=Columns1through131011100100101Column1416.多位译码(7的倍数)纠错程序:clear;clc;r=10011001001001;X,N=size(r);%将接收到的码分为M帧,1帧7个信息位M=ceil(N/7);h=1,0,0;1,1,0;1,1,1;0,1,1;1,0,1;0,1,0;0,0,1;b=flipud(h);d=zeros(1,7);U=zeros(1,4*M);Data1=zeros(1,7*M);Data=zeros(1,7*M);fori=1:Mforj=1:7d(j)=r(j+(i-1)*7);ends=d*b;fork=1:3ifrem(abs(s(k),2)=0s(k)=0;endendfork=1:3ifrem(abs(s(k),2)=1s(k)=1;endendifs=000e=0000000;elseifs=100e=0000001;elseifs=110e=0000
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030工业级3D打印材料性能突破与小批量定制生产趋势分析报告
- 2025-2030工业物联网边缘计算芯片能效比优化与技术选型指南
- 2023年校本课程开发实施计划
- 初中物理计算题高效解题技巧汇编
- 酒店租赁合同中价格调整条款
- 渠道营销合同条款及案例分析
- 物业管理安全隐患排查工作计划
- 肉牛养殖标准化管理操作手册
- 电气工程施工安全标准及规范
- 高中物理月考试卷分析报告
- 家电清洗培训
- 油画棒技法培训课件
- 2025年陕西、山西、青海、宁夏高考化学试卷真题(含答案解析)
- 光伏发电建设工程质量监督检查大纲(2023版)
- 老人外出免责协议书
- 青春期生殖健康教育
- 2025年BM²T电池管理技术白皮书-阳光电源
- 中医诊所招学徒合同标准文本
- 汉语言文学毕业论文-鲁迅小说中的知识分子形象
- 长期供应商供货合同书
- 人教版初中九年级全册英语单词表(完整版)
评论
0/150
提交评论