基于MATLAB的线性分组码编译码仿真实现设计说明书.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB 线性 分组码 译码 仿真 实现 设计 说明书
- 资源描述:
-
信息工程学院 通信工程系 设计题目:基于MATLAB的线性分组码 编译码仿真设计 班 级: 10通信 班 学 号: 姓 名: 指导老师: 2023 年 11 月 15 日 成绩: 摘 要 该系统是(6,3)线性分组码的编码和译码的实现,它可以对输入的三位的信息码进行线性分组码编码,对于接受到的六位码字可以进行译码,从而译出三位信息码。 当接受到的六位码字中有一位发生错误时,可以纠正这一位错码;当接受到的码字有两位发生错误时,只能纠正一位错误,但同时能检测出另一位错误不能纠正。只有特定位有两位错误时,才干纠正两位错误。这样就译出对的的信息码组,整个过程是用MATLAB语言实现的。 关键词:编码; 译码; 纠错 目 录 前言 2 第1章 设计目的 2 第2章 MATLAB简介 3 第3章 基本原理 3 3.1 线性分组码的编码 3 3.1.1 生成矩阵 3 3.1.2 校验矩阵 5 3.2 随着式与译码 6 3.2.1 码的距离及纠检错能力 6 3.2.2 随着式与译码 6 第4章 推导过程 7 4.1 编码过程 7 4.2 译码过程 9 第5章 仿真程序及结果分析 11 5.1 仿真程序 11 5.2 仿真结果图 13 5.3 结果分析 15 参考文献 16 总结 17 前言 近年来,随着计算机、卫星通信及高速数据网的飞速发展,数据的互换、解决和存储技术得到了广泛的应用,人们对数据传输和存储系统的可靠性提出了越来越高的规定。因此,如何控制差错、提高数据传输和存储的可靠性,成为现代数字通信系统设计的重要课题。 目前,绝大多数的数字计算机和数字通信系统中广泛采用二进制形式的码。而线性分组码具有编译码简朴,封闭性好等特点,采用差错控制编码技术是提高数字通信可靠性的有效方法,是目前较为流行的差错控制编码技术。 对线性分组码的讨论都在有限域GF(2)上进行,域中元素为{0,1},域中元素计算为模二加法和模二乘法。分组码是一组固定长度的码组,可表达为(n , k),通常它用于前向纠错。在分组码中,监督位被加到信息位之后,形成新的码。在编码时,k个信息位被编为n位码组长度,而n-k个监督位的作用就是实现检错与纠错。 对于长度为n的二进制线性分组码,它有种2n也许的码组,从2n种码组中,可以选择M=2k个码组(k<n)组成一种码。这样,一个k比特信息的线性分组码可以映射到一个长度为n码组上,该码组是从M=2k个码组构成的码集中选出来的,这样剩下的码组就可以对这个分组码进行检错或纠错。 第1章 设计目的 要设计一个(6,3)线性分组码的编译码程序,最基本的是要具有对输入的信息码进行编码,让它具有抗干扰的能力。同时,还要让它具有对接受到的整个码组中提取信息码组的功能。但是,在实际的通信系统中,由于信道传输特性不抱负以及加性噪声的影响,接受到的信息中不可避免地会发生错误,影响通信系统的传输可靠性,因而,本设计还要让该程序具有纠正错误的能力,当接受到的码组中有一位码,发生错误时可以检测到这一位错码,并且可以纠正这一位错码,并且让系统从纠正后的码组中提取对的的信息码组。 针对给定的矩阵 0 1 1 1 0 1 1 1 0 Q= 完毕如下的工作: 1 完毕对任意信息序列的编码 2 根据生成矩阵,形成监督矩阵; 3 根据得到的监督矩阵,得到随着式,并根据它进行译码; 4 验证工作的对的性。 第2章 MATLAB简介 MATLAB是很实用的数学软件它在数学类科技应用软件中在数值运算方面首屈一指。MATLAB可以进行运算、绘制函数和数据、实现算法、创建用户界面、连接接其他编程语言的程序等,重要应用于工程计算、控制设计、信号解决与通讯、金融建模设计与分析等领域。 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完毕相同的事情简捷得多,并且mathwork也吸取了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。 第3章 基本原理 3.1 线性分组码的编码 3.1.1 生成矩阵 线性分组码(n,k)中许用码字(组)为2k个。定义线性分组码的加法为模二加法,乘法为二进制乘法。即1+1=0、1+0=1、0+1=1、0+0=0;1×1=1、1×0=0、0×0=0、0×1=0。且码字与码字的运算在各个相应比特位上符合上述二进制加法运算规则。 线性分组码具有如下性质(n,k)的性质:1、封闭性。任意两个码组的和还是许用的码组。2、码的最小距离等于非零码的最小码重。 对于码组长度为n、信息码元为k位、监督码元为r=n-k位的分组码,常记作(n,k)码,假如满足2r-1≥n,则有也许构造出纠正一位或一位以上错误的线性码。 下面我们通过(7,3)分组码的例子来说明如何具体构造这种线性码。设分组码(n,k)中,k = 3,为能纠正一位误码,规定r≥3。现取r=4,则n=k+r=7。该例子中,信息组为(c6c5c4),码字为(c6c5c4c3c2c1c0).当已知信息组时,按以下规则得到四个校验元,即 c3=c6+c4 c2=c6+c5+c4 (3-1) c1=c6+c5 c0=c5+c4 这组方程称为校验方程。 (7,3)线性分组码有23(8)个许用码字或合法码字,另有27-23个禁用码字。发送方发送的是许用码字,若接受方收到的是禁用码字,则说明传输中发生了错误。 为了深化对线性分组码的理论分析,可将其与线性空间联系起来。由于每个码字都是一个二进制的n重,及二进制n维线性空间Vn中的一个矢量,因此码字又称为码矢。线性分组码的一个重要参数是码率r=k/n,它说明在一个码字中信息位所占的比重,r越大,说明信息位所占比重越大,码的传输信息的有效性越高。由于(n,k)线性分组,线性分组码的2k个码字组成了n维线性空间Vn的一个K维子空间。因此这2k个码字完全可由k个线性无关的矢量所组成。 设此k个矢量为c1,c2,…,ck,有生成矩阵形式为 c1 c2 · · · ck G= (3-2) (n,k)码字中的任一码字ci,均可由这组基底的线性组合生成,即 ci=mi ·G=[mn-1 mn-2 … mn-k]·G 式中,mi =[mn-1 mn-2 …mn-k ]是k个信息元组成的信息组。 表3-1 (7,3)线性分组码 信息组 码字 000 0000000 001 0011101 010 0100111 011 0111010 100 100110 101 1010011 110 1101001 111 1110100 对于表3-1给出的(7,3)线性分组码,可将写成矩阵形式 [c6 c5 c4 c3 c2 c1 c0]=[c6 c5 c4]· 故(7,3)码的生成矩阵为 G= 可以看到,从(7,3)码的8个码字中,挑选出k=3个线性无关的码字(1001110)(0100111),(00111101)作为码的一组基底,用c=m·G计算得码字。 一个系统码的生成矩阵G,其左边k行k列应是一个k阶单位方阵Ik,因此生成矩阵G表达为 G=[Ik P] (3-3) 式中,P是一个k×(n-k)阶矩阵。 3.1.2 校验矩阵 表3-1所示的(7,3)线性分组码的四个校验元由式(3-1)所示的线性方程组决定的。把(3-1)移相,有 c6+c4+c3=0 c6+c5+c4+c2=0 c6+c1+c5=0 (3-4) c5+c4+c0=0 上式的矩阵形式为 · = 这里的四行七列矩阵称为(7,3)码的一致校验矩阵,用H表达,即 H= (3-5) 由H矩阵得到(n,k)线性分组码的每一码字ci,(i=1,2,…,2k),都必须满足由H矩阵各行所拟定的线性方程组,即 ci·HT=0.(7,3)码的生成矩阵G中每一行及其线性组合都是(n,k)码的码字,所以有G·HT =0。由G和H构成的行生成的空间互为零空间,即G和H彼此正交。H=[PT Ir]其右边r行r列组成一个单位方阵。 3.2 随着式与译码 3.2.1 码的距离及纠检错能力 1.码的距离 两个码字之间,相应位取之不同的个数,称为汉明距离,用d表达。一个吗的最小距离dmin定义为dmin=min{d(ci,cj),i≠j,ci,cj∈(n,k)},两个码字之间的距离表达了它们之间差别的大小。距离越大,两个码字的差别越大,则传送时从一个码字错成另一码字的也许性越小。码的最小距离愈大,其抗干扰能力愈强。 2. 线性码的纠检错能力 对于任一个(n,k)线性分组码,若要在码字内(1) 检测出e个错误,则规定码的最小距离d≥e+1;(2) 纠正t个错误,则规定码的最小距离d≥2t+1;(3)纠正t个错误同时检测e(≥t)个错误,则规定 d≥t+e+1; 3.2.2 随着式与译码 假设接受端收到的码字为B,那么它和本来发送端发送的码字A之间就有也许存在着误差。即在码组A={a6 a5 a4 a3 a2 a1 a0 }中的任意一位就有也许犯错。这样我们在接受端接受到一个码组是就有也许判断错发送端本来应当要表达的意思。为了描述数据在传输信道中出现错误的情况,引入了错误图样E,在错误图样中,0代表相应位没有传错,1代表传输错误。事实上错误图样E就是收序列与发送序列的差。所以在译码中用接受到的码字B模尔加错误图样E就可以得到发送端的对的码字A。因此译码的过程就是要找到错误图样E。 定义:校正子S S = B * H= ( A + E ) * H = A * H+ E * H = E * H 由于A是编得的对的码字。根据前面所叙述,它和监督矩阵的转置相乘为0。显然,S仅与错误图样有关,它们之间是一一相应的关系。找到了校正子S,也就可以找到E。而与发送的码字无关。若E=0,则S=0;因此根据S是否为0可进行码字的检错。 假如接受码字B中只有一位码元发生错误,又设错误在第i位。即Ei-1=1,其他的Ei均为0。在后面的译码程序中,建立了一个校正子S与错误图样E相应的表。也就是收到一个B序列,就可以通过计算得到一个校正子,而每一个校正子都相应着一个错误图样E,再通过B模尔加上E,就可以得到对的的码字A。 由于在不同的错误序列B中,同一位码元错误时相应的E是同样的,所以可以运用0000000这个对的的码字让它每位依次错误,来求得它的八个校正子。而这时的矩阵B就是错误图样E。 这样就算得了8个校正子S。而这时的错误序列B,就是错误图样E,所以有: E与S都已经得到,这时就可以建立一个表来将它们一一相应起来,以便在编程过程中用SWITCH语句。 第4章 推导过程 4.1 编码过程 监督矩阵H与生成矩阵G的关系: 由H与G的分块表达的矩阵形式 H =[P In-k] (4-1) G=[Ik Q] (4-2) P=QT (4-3) 则有G·HT=0 (4-4)或 H·GT=0 (4-5) 已知给出的(6,3)码的Q矩阵 0 1 1 1 0 1 1 1 0 Q= (4-6) 则可以根据G=[Ik Q]求出生成矩阵 1 0 0 0 1 1 0 1 0 1 0 1 0 0 1 1 1 0 G= (4-7) 由 P=QT 和 H =[P In-k] 可求出监督矩阵H为 0 1 1 1 0 0 1 0 1 0 1 0 1 1 0 0 0 1 H= 有了生成矩阵后则可以根据输入的四位信息位和生成矩阵相乘得到编码矩阵,即 MATLAB函数为: C=rem(I*G,2); (4-8) 其中C为编码后的结果,I为信息矩阵,G为生成矩阵。 则编码的所有情况为: 编码序列: 信息位 || 监督位 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 1 0 1 0 1 1 0 1 1 1 0 0 0 1 1 1 0 1 1 0 1 1 1 0 1 1 0 1 1 1 0 0 0 C= (4-9) 4.2 译码过程 0 1 1 1 0 0 1 0 1 0 1 0 1 1 0 0 0 1 对于译码过程来说,同样由上知道监督矩阵: H= H矩阵与(n,k)码的任何一个许用码字进行相乘的结果必等于0,即若C=m·G是任一(n,k)码字,则必有C·HT=0。若不属于许用码字,或有传输差错,且差错 位数在(n,k)码纠错能力内,则运算结果将为非0值,此时,可以纠错或检错重发。 0 1 1 1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 S0 = B ·H= [000000]· =000 (4-10) 0 1 1 1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 S1 = B ·H=[000001] · =001 (4-11) 0 1 1 1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 S2 = B ·H=[000010]· =010 (4-12) 0 1 1 1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 S3 = B ·H=[000100]· =011 (4-13) 0 1 1 1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 S4 = B ·H=[001000]· =100 (4-14) 0 1 1 1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 S5 = B ·H=[010000]· =101 (4-15) 0 1 1 1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 S6 = B ·H=[100000]· =110 (4-16) 0 1 1 1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 S7 = B ·H=[100100]· =111 (4-17) 当编码矩阵与生成矩阵的转置矩阵相乘时,若当其中的一位编码或两位出现差错时会有八种情况,则这些情况列犯错码矩阵如下: 错码矩阵: 表4-1(6,3)线性分组码的译码表 校正子S 错误图样E 000 000000 001 000001 010 000010 011 000100 100 001000 101 010000 110 100000 111 100100 而这些情况正好是和校验子有某种相应关系的,根据这些相应关系可以进行相关编程。若编程检测到了那一位错误可以根据 A=B+E (4-18) 其中A 为纠错输出码序列,E为错码矩阵,R为信道输出码。 对接受到的信息进行改正求出对的的编码,从而再提去更正后的接受序列的前三位来提取信息位,以至获得信息矩阵I。 第5章 仿真程序及结果分析 5.1 仿真程序 % H 监督矩阵 % G 生成矩阵 % C 编码矩阵 % I 输入信息序列 % R 信道输出码 % A 纠错输出码序列 % E 错码矩阵 % S 校验子矩阵 % M 校验子的行的十进制序列 %信道编码程序 clear all close all H=[0 1 1 1 0 0; 1 0 1 0 1 0; 1 1 0 0 0 1]; %监督矩阵H G=gen2par(H); %求H阵的生成矩阵G I=[0 0 0;0 0 1;0 1 0;0 1 1;1 0 0;1 0 1;1 1 0;1 1 1]; C=rem(I*G,2); %求码字C disp('所得的编码结果为:C='); %显示输出码字C disp(C); %信道译码程序 clear all; close all; H=[0 1 1 1 0 0; 1 0 1 0 1 0; 1 1 0 0 0 1]; %监督矩阵H B=input('请输入接受码组B:'); [a,b]=size(B); %返回数组B的维数 E=[0 0 0 0 0 0;0 0 0 0 0 1;0 0 0 0 1 0;0 0 0 1 0 0; 0 0 1 0 0 0;0 1 0 0 0 0;1 0 0 0 0 0;1 0 0 1 0 0]; S=rem(B*H',2); %求校验子S i=1; for i=1:1:a M(i,1)=S(i,1).*4+S(i,2).*2+S(i,3); %求校验子所表达的十进制整数 end for i=1:1:a switch(M(i,1)) case 0 A(i,:)=B(i,:)+E(1,:); case 1 A(i,:)=B(i,:)+E(2,:); case 2 A(i,:)=B(i,:)+E(3,:); case 3 A(i,:)=B(i,:)+E(4,:); case 4 A(i,:)=B(i,:)+E(5,:); case 5 A(i,:)=B(i,:)+E(6,:); case 6 A(i,:)=B(i,:)+E(7,:); case 7 A(i,:)=B(i,:)+E(8,:); end end for i=1:1:a switch(M(i,1)) case 0 disp(‘没有出现错误!’); case 1 disp(‘注意:第1位出现一个错误!请纠正!’); case 2 disp(‘注意:第2位出现一个错误!请纠正!’); case 3 disp(‘注意:第3位出现一个错误!请纠正!’); case 4 disp(‘注意:第4位出现一个错误!请纠正!’); case 5 disp(‘注意:第5位出现一个错误!请纠正!’); case 6 disp(‘注意:第6位出现一个错误!请纠正!’); case 7 disp(‘注意:第6位和第3位出现两个错误!请纠正!’); end end A=rem(A,2); %求出对的的编码 disp('检纠错后的码组A='); disp(A); %显示对的的编码 j=1; while j<=3 %提取信息位 I(:,j)=A(:,j); j=j+1; end disp('译出的信息序列I='); disp(I); %显示原信息码 5.2 仿真结果图 1.输出编码结果及输入对的接受码的译码结果: 根据仿真程序得出仿真结果如下图所示: 图5-1 输出编码结果和对的输入时显示图 2.输入一位错误时的结果显示图 图5-2 有一位错误输入时的显示图 3.输入两位特定位错误时的结果显示 图5-3 有两位特定位错误输入时的显示图 5.3 结果分析 1.输出编码结果及输入对的接受码的译码结果分析 由图5-1 输出编码结果和对的输入时显示图所示的结果可以看出编码的结果的八种情况和在推导过程中运算的结果是一致的,可以见得程序的编码过程是对的的。对于译码过程而言,当界面显示“请输入接受码组B:” ,然后从提醒符后输入:[0 0 0 0 0 0],由于输入的接受码组与编码后的码字一致,它提取了每个码组的前四位,即信息位,由结果看出译码过程是对的的,并没有出现错译的情况,可见程序的译码片段是对的的。 2.输入一位错误时的结果分析 对于纠错过程而言,当界面显示“请输入接受码组B:” 。然后从提醒符后输入:[1 0 1 0 0 0],由图5-2 有一位错误输入时的显示图所知,接受码组的第五位发生了错误,经程序纠检错误后改正了接受序列的错误,并且对的译出了信息位。可见程序的纠错功能也是可以实现的,以上结果进一步证实了,系统译码程序的对的性。 3.输入两位特定位错误时的结果分析 由图5-3 有两位特定位错误输入时的显示图知,当输入B=[1 0 0 1 0 0]时,校正子是111,错误图样是100100,所以结果显示与理论相符。 参考文献 [1] 孙丽华编. 信息论与纠错编码. 电子工业出版社. 2023,3 [2] 郭文彬 桑林编. 通信原理-基于MATLAB的计算机仿真. 北京邮电大学出版社. 2023.2 [3] 苏金明 阮沈勇编. MATLAB实用教程(第二版). 电子工业出版社. 2023.2 [4] 徐东艳 孟晓刚编. MATLAB函数库查询词典. 中国铁道出版社. 2023.4 [5] 潘新民编. 计算机通信技术. 电子工业出版社. 2023.7 [6] 吴玲达 李国辉 杨冰等编. 计算机通信原理与技术. 国防科技大学出版社. 2023.3 [7] 曹志刚 钱压生编. 现代通信原理. 清华大学出版社. 1992.2 [8] 梅志红 杨万铨编. MATLAB程序设计基础及其应用. 清华大学出版社.2023 [9] 樊昌兴. 通信原理编. 国防工业出版社. 1999.10 [10] 王华 李有军编. MATLAB电子仿真与应用教程(第二版). 国防工业出版社. 2023.3 [11] 孙屹主编. MATLAB通信仿真开发手册. 国防工业出版社. 2023.1 总结 通过对线性分组码中的线性分组码的编译码编程实现,了解到线性分组码的构成方式是把信息序列提成每k个码元一段,并由这k个码元按一定规则产生r 个校验位,组成长度为n=k+r的码字,用(n,k)表达。信息码元与校验位之间为线性关系。并且知道了线性分组码的编码过程信息码元与校验位之间的线性关系实现起来是十分简朴的. 对于码组长度为n、信息码元为k位、监督码元为r=n-k位的分组码,假如满足2r-1≥n,则有也许构造出纠正一位或一位以上错误的线性码。就像本设计的(6,3)分组码的(n,k)中,n=6,k = 3,r≥3能纠正一位误码,检测到两位误码。 运用MATLAB语言进行编程,可以较明显的知道编码的过程和译码时出现的错误,码字的最小距离是3时,可以纠正一位错误,当输入特定的两位错误时,该码字还可以纠正这两位错误,这种情况在编程结果的命令窗口中可以明显看到。 线性分组码具有编译码简朴,封闭性好等特点,采用差错控制编码技术是提高数字通信可靠性的有效方法,是目前较为流行的差错控制编码技术之一。展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




基于MATLAB的线性分组码编译码仿真实现设计说明书.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/4572486.html