您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于MATLAB的循环码编译码器设计与仿真---胡鑫
1课程设计报告题目:基于MATLAB循环码编译码器的设计与仿真学生姓名:胡鑫学生学号:1114030110系别:电气信息工程学院专业:通信工程届别:15届指导教师:吴琰电气信息工程学院制2014年6月2基于MATLAB循环码编译码器的设计与仿真学生:胡鑫指导教师:吴琰电气信息工程学院11级通信工程专业1循环码编码的设计目的与要求1.1设计目的(1)巩固并扩展通信原理课的基本概念,基本理论,分析方法和实现方法;(2)通过实验了解循环码的工程作原理;(3)培养创新思维和设计能力;(4)增强软件编程实现能力和解决能力。1.2设计要求(1)掌握循环码的编码与译码的相关知识;(2)能够设计程序并建立模型。2循环码介绍与原理2.1循环码的介绍随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。随着经济文化水平的显著提高,人们对生活质量及工作软件的要求也越来越高。在计算机通信信息码中循环码是线性分组码的一个重要子集,是目前研究得最成熟的一类码。它有许多特殊的代数性质,它使计算机通信以一种以数据通信形式出现,实现了在计算机与计算机之间或计算机与终端设备之间进行有效的与正确地信息传递,它使得现代通信的可靠性与有效性实现了质的飞跃。它是现代计算机技术与通信技术飞速发展的产物,在日常生活通信领域、武器控制系统等领域都被广泛应用。循环码是线性分组码的一种,所以它具有线性分组码的一般特性,此外还具有循环性。循环码的编码和解码设备都不太复杂,且检(纠)错能力强。它不但可以检测随机的错误,还可以检错突发的错误。,nk循环码可以检测长为nk或更短的任何突发错误,包括首尾相接突发错误。循环码是一种无权码,循环码编排的特点是相邻两个数码之间符合卡诺图中的邻接条件,即相邻两个数码之间只3有一位码元不同,码元就是组成数码的单元。符合这个特点的有多种方案,但循环码只能是表中的那种。循环码的优点是没有瞬时错误,因为在数码变换过程中,在速度上会有快有慢,中间经过其它一些数码形式,称它们为瞬时错误。这在某些数字系统中是不允许的,为此希望相邻两个数码之间仅有一位码元不同,即满足邻接条件,这样就不会产生瞬时错误。循环码就是这样一种编码,它可以在卡诺图中依次循环得到。循环码又称格雷码(GrayCode)。2.2循环码的设计原理2.2.1循环码的循环性循环码除了具有线性码的一般性质外,还具有循环性。循环性是指任一码组循环一位(即将最右端的一个码元移至左端,或反之)以后,仍为该码中的一个码组。在表1中给出一种(7,3)循环码的全部码组。由此表可以直观看出这种码的循环型。例如,表中的第2码组向右移一位即得到第5码组;第6码组向右移一位即得到第7码组。一般说来,若(0121aaaann)是循环码的一个码组,则循环移位后的码组:(1032nnnaaaa)(2143nnnnaaaa)……(1210aaaan)也是该编码组中的码组。表1一种(7,3)循环码的全部码组由于循环码具有码的代数结构清晰、性能较好、编译码简单和易于实现的特点,因此在目前的计算机纠错系统中所使用的线性分组码几乎都是循环码。它不。4但可以纠正独立的随机错误,也可用于检测突发错误并且非常有效。),(kn循环码能够检测长为kn或更短的任何突发错误;其中n为码长,k为信息位数。2.2.2循环码多项式表示在代数编码理论中,为了便于计算,把这样的码组中各码元当作是一个多项式的系数,即把一个长度为n的码组表示成:012211)(axaxaxaxaxTiinnnn(2-1)这种多项式中,x仅是码元位置的标记,例如上式表示第7码组中a6、a5、a2和a0为“1”,其他均为0。因此我们并不关心x的取值。这种多项式有时称为码多项式。例如,表1中第7个码组可以表示为:1)(256xxxxT2.2.3循环码的生成多项式在循环码中,一个),(kn码有2k个不同的码组。若用)(xg表示其中前)1(k位皆为“0”的码组,则)(,),(),(),(12xgxxgxxxgxgk都是码组,而且这k个码组是线性无关的。对于(n,k)循环码中的生成多项式g(x),它是(n,k)循环码码集中唯一的,幂次为n-k的码多项式,则kxgx是一个幂次为n的码多项式。按模(1nx)运算,此时:1)()(1)(nnkxxRxQxxgx,R(x)余数多项式(2-2)即kxgxRx,且因kxgx也是n阶幂,故Q(x)=1.由于它是循环码,故kxgx按模(1nx)运算后的“余式”也是循环码的一个码字,它必能被g(x)整除,即:)()()(xFxGxR(2-3)由以上两式可以得到:)()()1()()1)(()(xGxFxxRxxQxgxnnk(2-4)5和1nkxxFxGx(2-5)从上式中可以看出,生成多项式g(x)应该是1nx的一个因式,即循环码多项式应该是1nx的一个n-k次因式。2.2.4循环码的生成矩阵和一致校验矩阵对所有的i=0,1,2,……k-1,用生成多项式g(x)除iknx,有:)()()(1xbxgxaxiikn(2-6)式中)(xbi是余式,表示为:0,1,11__,...)(iiknkniibxbxbxb(2-7)因此()nkiixbx是g(x)的倍式,即)(xbxiikn是码多项式,由此得到系统形式的生成矩阵为:它是一个kn阶的矩阵。同样,由0THG可以得到系统形式的一致校验矩阵为:已知(7,4)循环码的生成多项式和校验多项式分别为:31gxxx,421hxxxx。写得其生成矩阵和校验矩阵分别为:63循环码编译码原理3.1循环码的编码原理(1)有信息码构成信息多项式)()()(xRxExc,其中最高幂次为k-1;(2)用knx乘以信息多项式)(xm,得到的)()()(xRxExc,最高幂次为1n,该过程相当于把信息码),,.....,,(0121mmmmkk移位到了码字德前k个信息位,其后是r个全为零的监督位;(3)用g(x)除)(xmxkn得到余式r(x),其次数必小于g(x)的次数,即小于(n-k),将此r(x)加于信息位后做监督位,即将r(x)于)(xmxkn相加,得到的多项式必为一码多项式。根据上面的讨论,可得(7,4)循环码编码的程序框图,如图1如下:图1编码程序框图3.2循环码的译码原理纠错码的译码是该编码能否得到实际应用的关键所在。译码器往往比编码较难实现,对于纠错能力强的纠错码更复杂。根据不同的纠错或检错目的,循环码译码器可分为用于纠错目的和用于检错目的的循环码译码器。通常,将接收到的循环码组进行除法运算,如果除尽,则说明正确传输;如果未除尽,则在寄存器中的内容就是错误图样,根据错误图样可以确定一种逻辑,来确定差错的位置,从而达到纠错的目的。用于纠错目的的循环码的译码算法比较复杂,感兴趣的话可以参考一些参考书。而用于检错目的循环码,一般使用ARQ通信方式。检测过程也是将接受到的码组7进行除法运算,如果除尽,则说明传输无误;如果未除尽,则表明传输出现差错,要求发送端重发。用于这种目的的循环码经常被称为循环冗余校验码,即CRC校验码。CRC校验码由于编码电路、检错电路简单且易于实现,因此得到广泛的应用。在通过MODEM传输文件的协议如ZMODEM、XMODEM协议中均用到了CRC校验技术。在磁盘、光盘介质存储技术中也使用该方法。在SystemView中没有提供专用的CRC循环冗余校验码编码器,我们可以在CDMA库中找到一个现成的专用的CRC编码器和译码器。该图符是的接入信道的数据帧品质指示编码器,其中使用了多种不同比特率的数据模型,通过CRC校验来判断接入信道的质量好坏。其中规定每一帧的长度为20ms的数据。一个典型IS-95-A标准规定的9600信道的CRC测试码的长度为192比特,其中信息位172位、校验位12比特、尾部全零8比特。感兴趣的读者可以加入一个速率为860bps(192bit/0.2ms=860)的PN数据,然后观察经过CRC编码后的波形。并可用对应的译码器译码观察输出波形是否与输入的PN码一致。当码字c通过噪声信道传送时,会受到干扰而产生错误。如果信道产生的错误图样是e,译码器收到的n重接受矢量是y,则表示为:ecy上式也可以写成多项式形式:)()()(xexcxy译码器的任务就是从y(x)中得到)ˆ(xe,然后求的估值码字ˆˆ()()()cxyxex并从中得到信息组)ˆ(xm。循环码译码可按以下三个步骤进行:(1)有接收到的)(xy计算伴随式)(xs;(2)根据伴随式s(x)找出对应的估值错误图样)ˆ(xe;(3)计算ˆˆ()()()cxyxex,得到)ˆ(xc估计码字。若)()ˆ(xcxc,则译码正确,8否则,若)()ˆ(xcxc,则译码错误。由于g(x)的次数为n-k次,g(x)除E(x)后得余式(即伴随式)的最高次数为n-k-1次,故S(x)共有2n-k个可能的表达式,每一个表达式对应一个错误格式。可以知道(7,4)循环码的S(x)共有2(7-4)=8个可能的表达式,可根据错误图样表来纠正(7,4)循环码中的一位错误,其伴随式如下表2所示。表2BCH(7,4)循环码错误图样表上式指出了系统循环码的译码方法:将收到的码字R(x)用g(x)去除,如果除尽则无错;否则有错。如果有错,可由余式S(x)一一找出对应图样,然后将错误图样E(x)与R(x)模2和,即为所求码字C(x),从而实现纠错目的。解码过程流程图,如图2所示:图2译码程序框图94实现程序和仿真结果分析4.1、循环码编码与解码Matlab源程序(实验以(7,4)循环码进行分析)m=3;n=2^m-1;%定义码长k=n-m;%信息位长msg=randint(k*4,1,2);%随机提取信号,引起一致地分布的任意整数矩阵subplot(2,2,1)stem(msg)title('编码器输入信号')p=cyclpoly(n,k)%循环码生成多项式,n=7,k=4code=encode(msg,n,k,'cyclic',p);%编码函数,对信号进行差错编码subplot(2,2,2)stem(code)title('编码器输出信号')recode=decode(code,n,k,'cyclic',p)%对信号进行译码,对接收到的码字进行译码,恢复出原始的信息,译码参数和方式必须和编码时采用的严格相同subplot(2,2,3)stem(recode)title('译码器输出信号')t=-1:0.01:1;x=recode;%将recode赋值给x,并进行N=length(x);长度与fft设定fx=fft(x);df=100/N;n=0:N/2;f=n*df;subplot(2,2,4);plot(f,abs(fx(n+1))*2/N);grid;title('频谱图')104.2循环码的仿真与分析实验测试结果,译码结果图3编译码信号图理想状态下,对信号随机的提取,编码器输入为1000001110001000,通过encode函数后,因为加入了监督码,信号变得复杂密集,编码输出为1011000101001110110001011000通过译码输出为1000001110001000,与编码输入一致。说明循环码的检错和纠错能力性能好。输出多项式为:g(x)=(x+a)(x+a2)(x+a3)=a6+a5x+a4x+a3x2+a3x+a2x+x3图4编译码信号图图5编译码信号图以randint函数重新做一个输入信号并进行编码,结果与上例相似,输入与输出一致。由上面所有的图可以发现,编码器输入信号并不完全相同,因为对信号的提取是随机的,所以码元也是随机的,信号经过编码器后,因为要加入监督码,所11以波形变得更加密集了。信号经过译码后,波形和编码
本文标题:基于MATLAB的循环码编译码器设计与仿真---胡鑫
链接地址:https://www.777doc.com/doc-5544532 .html