(7,4)循环码的编码和译码(精品WORD文档)

合集下载

循环码的编码和译码

循环码的编码和译码

信息编码技术实验艮告三题目:循环码的编码和译码院系:计算机科学与工程学院班级:姓名:学号:【实验目的】1. 通过实验了解循环码的工作原理。

2. 了解生成多项式g(x)与编码、译码的关系。

3. 了解码距d 与纠、检错能力之间的关系。

【实验条件】仪器设备:PC 机,应用软件:Matlab 。

【实验内容]1、编程实现(7,4)系统循环码的编、译码。

已知(7, 4)循环码的生成多项式和校验多项式分别为:£(/)=疋+兀+ 1, h(x) = x 4+x 2+x + U 其生成矩阵和校验矩阵分别为:2、计算出所有的码字集合,可纠错误图样E (X 〉表和对应的错误伴随式表。

【程序代码】% (7,4)系统循环码编码.译码 clc;clear all;close all;n=7;k=4;r=n-k;mx=input ('请输入信息码字:m=\n' ) ; %输入信息码字 gx=[l Oil];x_nk=[l, zeros (1, r)];messg=conv(x.nk> mx); [qx, rxO] =deconv(messg, gx); %模 gx> qx 为所得除式,rxO 为余式 rx=mod (rxO, 2); %将余式rxO 转换为二进制cx=me ssg+rx;%编码码字多项式 c=cx瀚出编码码字 %=====绘图======== fs=1000;ts=l/fs;%fs 为一个单位内的样点 for i=l :n%以方波形式输出编码码字,一个单位内一个码字for j=l :fscx.wave ((i-1) *fs+j) =c (i);end endt=O :ts :n-ts;1 0 1 1000 0 10 1 1 00 G= 00101 1 0000 10 11 1110100 H = 0 1110 10 0011001%循环码生成多项式 %x* (n-k)> %x*(n-k)*mxplot (t, cx_wave); %以方波形式输出编码码字xlabel ('时间');ylabel C 幅度');title C (7,4)循环码编码输出波形');axis([0 7 0 1. 2]);%==^ 码===============S=zeros (1, r); 颂始化校验子gx=[l Oil]; %循环码生成多项式Rx=input (*请输入接收码字:R=\n ) ;%接收码字多项式% Rx=[l 0 1 0 1 1 1];R=Rx;繊收码字[nx, SxO]=deconv(Rx, gx); %接收码字多项式除以gx, SxO为余式(十进制) Sx=mod(SxO, 2); %将SxO转换为G (2)域下多项式S=Sx(5:7); %SxO最后3位为检验子if S=[0 0 0] 燈验子二0disp('There is no wrong!'); % 显示接收码字无错E=[0 0 0 0 0 0 0]; %査表得出错误图样为0C=R; %译码输出为接收码字elseif S=[0 0 1] %接收码字第一位r0错dispC1 r0 is wrong!'); % 显示rO 错E=[0 0 0 0 0 0 1]; %査表得出错误图样C=xor (R, E); %译码输出C=R+Eelseif S=[0 1 0] %rl 错disp('rl is wrong!');E=[0 0 0 0 0 1 0];C=xor (R, E);elseif S=[l 0 0] 紐2 错disp('ir2 is wrong!');E=[0 0 0 0 1 0 0];C=xor(R, E);elseif S=[0 1 1] %r3 错dispC1 r3 is wrong!');E=[0 0 0 1 0 0 0];C=xor (R, E);elseif S=[l 1 0] %r4 错disp('r4 is wrong!');E=[0 0 1 0 0 0 0];C=xor (R, E);elseif S=[l 1 1] %r5 错dispC r5 is wrong!');E=[0 1 0 0 0 0 0];C=xor (R, E);elseif S=[l 0 1] %r6 错dispC* r6 is wrong!1);E=[l 0 0 0 0 0 0]; C=xor (R, E);endC %输出译码码字【实验结果】请输入信息码字:[10 110 10]10 110 1 0 1 1请输入接收码字:R 二 [10 11010 110] There is no wrong!C =10 11 0 1 0 1 1 0【实验心得】通过本次实验,我加深了对循环码的1:作原理的理解,也了解了生成多项式 g(x)与编码、译码的关系和码距d 与纠、检错的关系,在动手实验过程中,对知 识点的印象更加清晰,让我的理解更加深刻了。

基于51单片机的(7,4)循环码编程

基于51单片机的(7,4)循环码编程

基于51单片机的(7,4)循环码编译码的设计电子信息科学与技术专业学生王东菊指导老师王心水摘要: 通信系统中最重要的是通信质量问题,而衡量通信系统质量的主要性能指标就是有效性和可靠性。

所谓有效性是指要求系统高效率地传输信息,在数字通信系统中信源编码旨在解决有效问题;所谓可靠性,是指要求系统可靠地传输消息,而信道编码旨在解决可靠性问题。

以往循环码编译电路大多用移位寄存器和模2构成的线性时序网络来完成。

基本电路简单,容易实现。

但在体积和功能扩展上受到了限制而不能发挥更大的作用。

采用(7,4)循环码,充分运用单片机的软件功能进行编码及译码纠错,可有效的克服来自通讯信道的干扰,保证数据通讯的可靠及系统的稳定,使误码率大幅度的降低。

而且,只要改变软件算法,即可适用于不同微机、不同字长的需要。

总之,本设计使用软件编程方法实现编译码过程既有简化电路、可靠性高、运算速度快、体积小等优点,又可以扩展电路其他功能,而且可以根据需要任意修改,这是其它硬件电路所无法相比的,是抛开传统模式的一种新尝试。

关键词: 单片机通信循环码编码译码纠错抗干扰The design of Encoding and Decoding of (7,4) Cyclic CodeBased on the 51 SCMStudent majoring in Electronic information science and technology Wang DongjuTutor Wang XinshuiAbstract:The most important problem in communication system is communication quality, and the most important measures of the quality of communication system is effectiveness and reliability. So-called effectiveness refers to the system efficiently transmit information in digital communication system .So-called reliability, refers to the system, and reliable transmission channel encoding aims at solving problems. Reliability, Previous cycle code compiler circuit with the shift register and mostly composed of two linear temporal network to accomplish. The basic circuit is simple and easy to implement. But in volume and function expansion by restrictions and cannot play a bigger role. Using (7,4) codes, make full use of the MCU software functions encoded and decoding correction, which can effectively overcome the interference from communication channel, ensure the reliability of data communication systems, the stability and the ber greatly reduced. And, just change the software algorithm, and can be used in different microcomputer, different words long need. Anyhow, this design using the software programming method (both simplified decoding process, high reliability, operation circuit faster, smaller, and may expand advantages and other functions, circuit according to need any modification, this is compared to other hardware circuit cannot abandon traditional pattern, is a new attempt.Key words: Microcontroller;Communication;Cyclic code;Encode;Decode;Correcting code;Anti-intreferance引言在数据通信中,误码率是项重要指标。

基于FPGA的(7,4)循环码编码和译码的实现

基于FPGA的(7,4)循环码编码和译码的实现

基于FPGA的(7,4)循环码编码和译码的实现摘要:循环码在实际通信中被广泛使用,因为它可以提高信息传输的可靠性和有效性。

随着FPGA芯片的普及,其在各个领域的已广泛使用。

本文在简单的理论分析上,描述了在FPGA中实现(7,4)循环码的编码与译码的实现方案。

关键词:(7,4)循环码FPGA 编码译码1.引言现场可编程逻辑门阵列(FPGA),是一个含有可编辑元件的半导体设备,可供使用者现场程式化的逻辑门阵列元件。

目前以硬件描述语言(Verilog 或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA 上进行测试,是现代IC 设计验证的技术主流。

为了使信号具有较好的抗干扰能力,就要对信号加以改造,使信号内部结构具有更强的规律性和相互关联性,以致在噪声破坏了信号的结构时,仍能根据信号原有的内在规律性和相互关联性来发现错误,甚至改正错误,恢复原有的信息。

其一般方法是:按照某种规律,对原来的码组添加一些新的码元——监督码元,而原码组中的码元则称为信息码元。

监督码元的作用是监督该码组在传输过程中是否发生了错误,甚至指出是哪位或哪些码元发生了错误,以便纠正,添加监督码元的方法(规律或规则)不同,就形成不同的编码方法。

2.(7,4)循环码在通信系统中,为提高信息传输可靠性,广泛使用了具有一定纠错能力的信道编码技术,某(7,4)循环码的生产多项式是:,则其生成矩阵是,具体结果见表其中:,,,并根据生成矩阵与监督矩阵的关系G·H=0从而得到:(2)根据公式(2)可得到:(3)3.编码与译码“公式(3)”表达了根据信息码元值得到各个监督码元值的运算公式,根据这些公式,我们可以得到信息元值与监督元值的具体关系。

在FPGA中进行(7,4)循环码的编码时,可以根据“公式(3)”编写算法由信息码元值来计算监督码元值,也可以采用查表法由信息码元来计算监督码元。

后面一种方法不适用于信息码元位数及监督码元位数较多的循环码,因为这时列出情况较多,其编程较前种方法较复杂。

循环码(7,4)

循环码(7,4)

8.4 循环码时间:2012年09月01日信息来源:《通信原理》精品课程网站点击:2452次我要评论(0) 【字体:大中小】循环码是线性分组码重要的一个子类,现有的重要线性分组码都是循环码或与循环码密切相关。

与其他大多数码相比,循环码的编码及译码易于用简单的具有反馈连接的移位寄存器来实现,这是它的优势所在。

另外,对它的研究是建立在比较严密的数学方法基础之上,因此比较容易获得有效的译码方案。

循环码在实际中应用很广。

8.4.1 循环码基本概念一个线性()分组码,如果它的任一码字经过循环移位后(左移或右移),仍然是该码的一个码字,则称该码为循环码。

上一节中表8-3所示的(7,3)分组码就是一个循环码。

为了便于观察,将(7,3)码重新排列如表8-9所示。

表8-9 循环码的循环移位在代数编码理论中,常用多项式(8.4-1)来描述一个码字。

表8-9中的任一码组可以表示为(8.4-2)这种多项式中,仅是码元位置的标记,因此我们并不关心x的取值,这种多项式称为码多项式。

例如,码字(0100111)可以表示为(8.4-3)左移一位后为(1001110),其码字多项式为(8.4-4)需要注意的是,码字多项式和一般实数域或复数域的多项式有所不同,码字多项式的运算是基于模二运算的。

(1)码多项式相加,是同幂次的系数模二加,不难理解,两个相同的多项式相加,结果系数全为0。

例如(8.4-5)(2)码多项式相乘,对相乘结果多项式作模二加运算。

例如(8.4-6)(3)码多项式相除,除法过程中多项式相减按模二加方法进行。

当被除式的幂次高于等于除式的幂次,就可以表示为一个商式和一个分式之和,即(8.4-7)其中余式的幂次低于的幂次。

把称作对取模的运算结果,并表示为(8.4-8)有了这个运算规则,就可以很方便地表示一个移位后码字多项式。

可以证明,字长为的码字多项式和经过次左移位后的码字多项式的关系为(8.4-9)例如,(7,3)循环码的码字(1001110),其多项式为,移位3次后的多项式可求得如下:(8.4-10)即,它对应的码字为11101008.4.2 循环码生成多项式由表8-9可知,(7,3)循环码的非0码字多项式是由一个多项式分别乘以得到的。

基于单片机(7,4)循环码编码与译码的研究

基于单片机(7,4)循环码编码与译码的研究

基于单片机(7,4)循环码编码与译码的研究
惠高潮;王辉
【期刊名称】《微计算机信息》
【年(卷),期】2009(25)2
【摘要】循环码是实际差错控制系统中常用的编码方案,具有检错纠错能力强、实现方便等特点.本文在理论分析循环码编码和译码基本原理的基础上,提出了基于单片机系统的(7,4)循环码软件实现编码、译码的方案.
【总页数】3页(P107-108,118)
【作者】惠高潮;王辉
【作者单位】210009,江苏南京南京工业大学信息科学与工程学院;210009,江苏南京,南京工业大学信息科学与工程学院
【正文语种】中文
【中图分类】TP13
【相关文献】
1.信道编码方法分析与循环码编、译码实现 [J], 马德凯;崔荣喜;商梅敬
2.循环码编码及译码的分析研究 [J], 刘晓丽
3.信道编码中循环码的译码纠正 [J], 文超
4.缩短循环码(26,16)编码和译码的软件实现 [J], 杨雪芹;陈超波
5.线性码和循环码的编码与译码 [J], 边巴格罗;格桑卓玛;拉巴次仁
因版权原因,仅展示原文概要,查看原文内容请购买。

实验2 信道编码----(7,4)循环码

实验2 信道编码----(7,4)循环码

信息论与编码实验报告姓名:学号:院系:班级:指导教师:实验2 信道编码----(7,4)循环码一、实验目的1.掌握循环码的编码原理(生成多项式、校验多项式等)2.掌握VB开发环境的使用(尤其是程序调试技巧)3.掌握VB的编程技巧二、实验环境1.计算机2.Windows 2000 或以上3.VB三、实验内容根据信道编码——循环码的编码原理,制作(7,4)循环码的码字生成器软件。

要求软件有简单的用户界面,当输入信息码字时,软件能够输出相应的循环码字。

实验结果要求:1、g(x)= x3+ x2+1;2、当输入m(x)= x3+x2时电路工作过程中各寄存器的状态。

四、实验原理1、实验原理循环码定义:设CH是一个[n.k]线性分组码,C1是其中的一个码字,若C1的左(右)循环移位得到的n 维向量也是CH中的一个码字,则称CH是循环码。

循环码的生成多项式和生成矩阵:全0码字除外)称为生成多项式,用g(x)表示。

可以证明生成多项式g(x)具有以下特性:(1)g(x)是一个常数项为1的r=n-k次多项式;(2)g(x)是的一个因式;(3)该循环码中其它码多项式都是g(x)的倍式。

为了保证构成的生成矩阵G的各行线性不相关,通常用g(x)来构造生成矩阵,这时,生成矩阵G(x)可以表示成为其中,因此,一旦生成多项式g(x)确定以后,该循环码的生成矩阵就可以确定,进而该循环码的所有码字就可以确定。

显然,上式不符合形式,所以此生成矩阵不是典型形式,不过,可以通过简单的代数变换将它变成典型矩阵。

2、实验方法循环码的编码方法在编码时,首先需要根据给定循环码的参数确定生成多项式g(x),也就是从的因子中选一个(n-k)次多项式作为g(x);然后,利用循环码的编码特点,即所有循环码多项式A(x)都可以被g(x)整除,来定义生成多项式g(x)。

根据上述原理可以得到一个较简单的系统循环码编码方法:设要产生(n,k)循环码,m(x)表示信息多项式,则其次数必小于k,而·m(x)的次数必小于n,用·m(x)除以g(x),可得余数r(x),r(x)的次数必小于(n-k),将r(x)加到信息位后作监督位,就得到了系统循环码。

(完整word版)matlab(7,4)汉明码和(7,4)循环码的编程设计

(完整word版)matlab(7,4)汉明码和(7,4)循环码的编程设计

二、创新实验设计创新实验一:(7,4)汉明码的编码与译码实现1、实验目的实现(7,4)汉明码的编码与译码,通过这次实验不但加深了对汉明码编码和译码原理了解,而且对线性分组码有所了解。

2、实验原理线性分组码的构造方法比较简单、理论较为成熟,应用比较广泛。

汉明码是一种能够纠正一个错码的效率比较高的线性分组码,下面以(7,4)码为例就汉明码的编码与译码分别进行介绍:(1)编码原理一般来说,若汉明码长为n ,信息位数为k ,则监督位数r=n-k 。

若希望用r 个监督位构造出r 个监督关系式来指示一位错码的n 种可能位置,则要求21r n -≥或211rk r -≥++ (1)设汉明码(n,k )中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r ≥3。

若取r=3,则n=k+r=7。

这样就构成了(7,4)码。

用6543210a a a a a a a 来表示这7个码元,用123s s s 的值表示3个监督关系式中的校正子,则123s s s 的值与错误码元位置的对应关系可以规定如表1所列。

表2.1 校正子和错码位置的关系则由表1可得监督关系式:16542s a a a a =⊕⊕⊕()226531s a a a a =⊕⊕⊕()3 36430s a a a a =⊕⊕⊕()4 在发送端编码时,信息位6543a a a a 的值决定于输入信号,因此它们是随机的。

监督位2a 、1a 、a 应根据信息位的取值按监督关系来确定,为使所编的码中无错码,则123,,S S S 等于0,即65426531643000(5)0a a a a a a a a a a a a ⊕⊕⊕=⎧⎪⊕⊕⊕=⎨⎪⊕⊕⊕=⎩方程组(5)可等效成如下矩阵形式6543210111010001101010010110010a a a a a a a ⎡⎤⎢⎥⎢⎥⎢⎥⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎢⎥⎢⎥⎢⎥⎣⎦(6)式(6)可简化为0T T HA =,H 为监督矩阵,则由式(6)可得到监督矩阵11101001101010=[P I ] (7)1011001r H ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦因为生成矩阵'=[I Q]=[I ]k k G P ,所以由(7)得生成矩阵G 如下:[]k 10001110100110[']00101010001011k G I Q I P ⎡⎤⎢⎥⎢⎥===⎢⎥⎢⎥⎣⎦然后利用信息位和生成矩阵G 相乘产生整个码组,即有[][]65432106543=(8)A a a a a a a a a a a a G=其中A 为整个码组矩阵,6543a a a a 是信息位。

(完整)循环码的编码与译码

(完整)循环码的编码与译码

循环码是线性分组码中一个重要的子类,具有检错纠错能力强,实现方便等特点.它具有严密的代数学理论,封闭性与循环性.(n,k)循环码表示信息位为k位,监督位为(n-k)位.本次设计实验首先分析了(7,4)循环码的编码与译码原理,然后,用C语言实现其编码与译码功能。

通过C语言平台运行所编写的程序,观察了在输入信息码情况下输出对应的编码结果以及相反的译码功能。

通过多组的对比验证了该(7,4)循环码的编译码程序的正确性。

最后,在程序运行的过程中进一步分析循环码的编译码原理,并通过比较仿真模型与理论计算的性能,证明了仿真模型的可行性。

关键词:循环码,编码与译码,C程序。

现代通信的发展趋势为数字化,随着现代通信技术的不断开发,差错控制技术已日趋成熟,在各个领域都得到了广泛的应用和认同。

本文就(7,4)循环码的编码与译码原理进行C语言的编程及运行仿真。

现代社会发展要求通信系统功能越来越强,可靠性越来越高,构成也越来越复杂;这就要借助于功能强大的计算机辅助分析设计技术和工具才能实现。

现代计算机科学技术快速发展,已经研发出了新一代的可视化的仿真软件。

这些功能强大的仿真软件,使得通信系统仿真的设计和分析过程变得相对直观和便捷,由此也使得通信系统仿真技术得到了更快的发展。

本文使用的是功能强大的C语言软件。

C语言是一种使用简便的、特别适用于科学研究和工程计算的高级语言,与其他计算机语言相比,它的特点是简洁和智能化,具有极高的编程和调试效率.通过使用C工具箱函数对数字调制进行仿真,更能直观彻底的掌握循环码的编码与译码原理。

有助于我们的学习和研究,加深对知识的理解和运用. C的便利性还体现在它的仿真结果还可以存放到的工作空间里做事后处理。

方便我们修改参数对不同情况下的输出结果进行对比。

目录第1章概述 (1)第2章计算机通信与纠错码 (2)2。

1 计算机通信技术 (2)2.1.1 通信的概念 (2)2。

1。

2 通信的发展史简介 (2)2。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(7,4)循环码的编码译码编码的实验原理: 根据循环码的代数性质建立系统编码的过程,可以把消息矢量用如下多项式表示:要编码成系统循环码形式,把消息比特移入码字寄存器的最右边k 位,而把监督比特加在最左边的n-k 个中,则要用kn x-乘以m(x)得到k n x - m(x)= kn x - m(x)= q(x) g(x)+ p(x),其中p(x)可以表示为p(x)= ,则p(x)+ kn x - m(x)= + 另U(x)= p(x)+ kn x - m(x),则U=(0p ,1p ,2p ,···,1--k n p ,0m ,1m ,···,1-k m )。

本实验根据以上原理,用matlab 实现书上例6.8系统形式的循环码,生成多项式为g(x)= (7,4)循环码的编码的程序如下:clear; clc; a=[1 0 1 1];%高次项系数在前的生成多项式 Gx=[1 0 1 1];%将数组a 的高位依次放在数组Data 的低位 Data=zeros(1,7); Data(1)=a(4); Data(2)=a(3); Data(3)=a(2); Data(4)=a(1);%Data 除以Gx 得到余数Rx12211...)(m x m x m x m x m k k k k ++++=----kn k n n k n k x m x m x m x m -+-----++++0112211 (011)1...p x p xp k n k n +++----0111...p x p x p k n k n +++----k n k n n k n k x m x m x m x m -+-----++++0112211 (3)1xx ++[Qx,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校正for i=1:7if rem(abs(b(i)),2)==0b(i)=0;endendfor i=1:7if rem(abs(b(i)),2)==1b(i)=1;endenddisp('输入序列:');adisp('编码输出序列:'); b程序运行结果为:输入序列:a = 1 1 0 0编码输出序列:b =1 0 1 1 1 0 0 改变输入序列a=[1 0 1 1],运行结果:输入序列:a = 1 0 1 1 编码输出序列:b =1 0 0 1 0 1 1 运行结果的编码如下:译码的实验原理 g(x)= ,在(n ,k )循环码中,由于g(x)能除尽,因此1+nx 可分解成g(x)和其他因式的乘积,记为)()(1x h x g x n=+31x x++即可写成)(1)(x g x x h n +=即h (x) =则 )(*x h = ,其中)(*x h 式h(x)的逆多项式。

监督矩阵多项式可表示为⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=)()()()(***2x h x xh x h x x H ,相对应的译码和纠错(一位)程序如下: clear; clc;r=[1 0 0 1 1 1 1];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; for i=1:3if rem(abs(s(i)),2)==0 s(i)=0;end end for i=1:3if rem(abs(s(i)),2)==1 s(i)=1;end124+++x x x 134+++x x xif s==[0 0 0]e=[0 0 0 0 0 0 0 ] elseif s==[1 0 0]e=[0 0 0 0 0 0 1] elseif s==[1 1 0]e=[0 0 0 0 0 1 0] elseif s==[1 1 1]e=[0 0 0 0 1 0 0] elseif s==[0 1 1]e=[0 0 0 1 0 0 0] elseif s==[1 0 1]e=[0 0 1 0 0 0 0] elseif s==[0 1 0]e=[0 1 0 0 0 0 0] else s==[0 0 1]e=[1 0 0 0 0 0 0] endu=r+e;for i=1:7if rem(abs(u(i)),2)==0u(i)=0;endfor i=1:7if rem(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);if e==[0 0 0 0 0 0 0]disp('第几位错误:')k=0,elsedisp('第几位错误:')k=find(e);enddisp('接受码字')rdisp('编码输出序列:')Data运行程序结果如下:e = 0 0 0 0 1 0 0第几位错误:k = 5接受码r = 1 0 0 1 1 1 1编码输出序列:Data =1 0 1 1以上编码有个缺点,就是它只能对一个消息矢量(4位)进行编码,我又在这个基础上编写了一个可以同时对位数是4的倍数的消息矢量进行编码,多位循环码的编码程序如下:clear;clc;a=[1 1 0 0 1 0 1 1];[X,N]=size(a);%将信息码分为M帧,1帧4个信息码M=ceil(N/4);d=zeros(1,4);b=zeros(1,7*M);Data=zeros(1,7);for k=1:Mfor j=1:4d(j)=a(j+(k-1)*4);end%生成多项式Gx=[1 0 1 1];Data(1)=d(4);Data(2)=d(3);Data(3)=d(2);Data(4)=d(1);%Data除以Gx得到余数Rx[Qx,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;endfor i=1:M*7if rem(abs(b(i)),2)==0b(i)=0;endendfor i=1:M*7if rem(abs(b(i)),2)==1b(i)=1;endenddisp('输入序列:');adisp('编码输出序列:');b程序运行结果如下:输入序列:a =1 1 0 0 1 0 1 1编码输出序列:b =Columns 1 through 131 0 1 1 1 0 0 1 0 0 1 0 1Column 141相应的多位译码纠错程序如下:clear;clc;r=[1 0 0 1 1 0 0 1 0 0 1 0 0 1 ];[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);Data=zeros(1,7*M);for i=1:Mfor j=1:7d(j)=r(j+(i-1)*7);ends=d*b;for k=1:3if rem(abs(s(k)),2)==0s(k)=0;endendfor k=1:3if rem(abs(s(k)),2)==1s(k)=1;endif s==[0 0 0]e=[0 0 0 0 0 0 0 ] elseif s==[1 0 0]e=[0 0 0 0 0 0 1] elseif s==[1 1 0]e=[0 0 0 0 0 1 0] elseif s==[1 1 1]e=[0 0 0 0 1 0 0] elseif s==[0 1 1]e=[0 0 0 1 0 0 0] elseif s==[1 0 1]e=[0 0 1 0 0 0 0] elseif s==[0 1 0]e=[0 1 0 0 0 0 0] else s==[0 0 1]e=[1 0 0 0 0 0 0] endu=d+e;for k=1:7if rem(abs(u(k)),2)==0u(k)=0;endfor k=1:7if rem(abs(u(k)),2)==1u(k)=1;endendData(1+7*(i-1))=e(1);Data(2+7*(i-1))=e(2); Data(3+7*(i-1))=e(3); Data(4+7*(i-1))=e(4); Data(5+7*(i-1))=e(5); Data(6+7*(i-1))=e(6); Data(7+7*(i-1))=e(7);U(1+(i-1)*4)=u(4);U(2+(i-1)*4)=u(5);U(3+(i-1)*4)=u(6);U(4+(i-1)*4)=u(7);endif Data==zeros(1,7*M);m=0,else[j,m]=find(Data);enddisp('第几位错误:');mdisp('接收到的码字:');rdisp('编码输出序列:');U运行结果如下:e = 0 0 1 0 0 0 0e =0 0 0 0 0 1 0第几位错误:m =3 13接收到的码字:r =Columns 1 through 131 0 0 1 1 0 0 1 0 0 1 0 0Column 141编码输出序列:U = 1 1 0 0 1 0 1 1分析:这两组实验基本上完成了循环码的编码和译码,但是该实验的缺点就是不能同时对7位信息码进行两位的纠错,即只能完成一位信息码的纠错。

相关文档
最新文档