基于MATLAB的循环码实验报告
基于MATLAB的循环码实验报告

课程名称:信息论与编码课程设计题目:循环码的编码和译码程序设计指导教师:系别:专业:学号:姓名:合作者完成时间:成绩:评阅人:一、实验目的:1、通过实验了解循环码的工作原理。
2、深刻理解RS 码构造、RS 编译码等相关概念和算法。
二、实验原理1、RS 循环码编译码原理与特点设C 使某线性分组码的码字集合,如果对任C c c c C n n ∈=--),,,(021 ,它的循环移位),,,(1032)1(---=n n n c c c c C也属于C ,则称该码为循环码。
该码在结构上有另外的限制,即一个码字任意循环移位的结果仍是一个有效码字。
其特点是:(1)可以用反馈移位寄存器很容易实现编码和伴随式的计算;(2)由于循环码有很多固有的代数结构,从而可以找到各种简单使用的译码办法。
如果一个线性码具有以下的属性,则称为循环码:如果n 元组},,,{110-=n c c c c 是子空间S 的一个码字,则经过循环移位得到的},,,{201)1(--=n n c c c c 也同样是S 中的一个码字;或者,一般来说,经过j 次循环移位后得到的},,,,,,,{11011)(---+--=j n n j n j n j c c c c c c c 也是S 中的一个码字。
RS 码的编码系统是建立在比特组基础上的,即字节,而不是单个的0和1,因此它是非二进制BCH 码,这使得它处理突发错误的能力特别强。
码长:12-=mn信息段:t n k 2-= (t 为纠错符号数) 监督段:k n t -=2 最小码段:12+=t d最小距离为d 的本原RS 码的生成多项式为:g(x)=(x-α)(x -α2)(x -α3)…(x -αd -2) 信息元多项式为::m(x)=m0+m1x+m2x2+…+mk -1xk-1循环码特点有:1)循环码是线性分组码的一种,所以它具有线性分组的码的一般特性,且具有循环性,纠错能力强。
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 是信息位。
matlab课设循环码的性能分析范文

功能:生成循环码的生成多项式。
语法:p=cyclpoly(N,K);
p=cyclpoly(N,K,fd_flag);
说明:从p=cyclpoly(N,K)中可找到一个给定码长N和信息位长度K生成多项式p,注意不是任意给定一个多项式都可以作为生成多项式。
通常,将接收到的循环码组进行除法运算,如果除尽,则说明正确传输;如果未除尽,则在寄存器中的内容就是错误图样,根据错误图样可以确定一种逻辑,来确定差错的位置,从而达到纠错的目的。用于纠错目的的循环码的译码算法比较复杂,感兴趣的话可以参考一些参考书。而用于检错目的循环码,一般使用ARQ通信方式。检测过程也是将接受到的码组进行除法运算,如果除尽,则说明传输无误;如果未除尽,则表明传输出现差错,要求发送端重发。用于这种目的的循环码经常被成为循环冗余校验码,即CRC校验码。CRC校验码由于编码电路、检错电路简单且易于实现,因此得到广泛的应用。在通过MODEM传输文件的协议如ZMODEM、XMODEM协议中均用到了CRC校验技术。在磁盘、光盘介质存储技术中也使用该方法。
2.1.3 循环码的生成矩阵和一致校验矩阵
对所有的i=0,1,2,……k-1,用生成多项式g(x)除 ,有:
(2—7)
式中 是余式,表示为:
(2—8)
因此, 是g(x)的倍式,即 是码多项式,由此得到系统形式的生成矩阵为:
(2—9)
它是一个k n阶的矩阵。
同样,由G =0可以得到系统形式的一致校验矩阵为:
循环码是一种无权码,循环码编排的特点是相邻两个数码之间符合卡诺图中的邻接条件,即相邻两个数码之间只有一位码元不同,码元就是组成数码的单元。符合这个特点的有多种方案,但循环码只能是表中的那种。循环码的优点是没有瞬时错误,因为在数码变换过程中,在速度上会有快有慢,中间经过其它一些数码形式,称它们为瞬时错误。这在某些数字系统中是不允许的,为此希望相邻两个数码之间仅有一位码元不同,即满足邻接条件,这样就不会产生瞬时错误。循环码就是这样一种编码,它可以在卡诺图中依次循环得到。循环码又称格雷码( Grey Code )。
实验6 BCH循环码的编码与译码的matlab实现

实验6 BCH循环码的编码与译码一、实验内容用VC或Matlab软件编写循环BCH码的编码与译码程序。
利用程序对教科书的例题做一个测试。
二、实验环境1.计算机2.Windows 2000 或以上3.Microsoft Visual C++ 6.0 或以上4.Matlab 6.0或以上三、实验目的1.通过BCH循环码的编码与译码程序的编写,彻底了解并掌握循环BCH的编码与译码原理2.通过循环BCH码的编码与译码程序的编写,提高编程能力。
四、实验要求1.提前预习实验,认真阅读实验原理以及相应的参考书。
2.对不同信道的进行误码率分析。
特别是对称信道,画出误码性能图。
即信道误码率与循环汉明码之间的关系。
3.认真填写实验报告。
五、实验原理1.循环BCH的编码与译码原理(略)2.循环BCH的程序实现。
六、实验步骤bch_en_decode.m文件function bch_en_decode()code=bch155code=code+randerr(5,15,1:3);code=rem(code,2);code=gf(code) %随机产生1-3位错误decode=debch155(code)endfunction decode=debch155(code)code=gf(code);M=4;code = gf(code.x,M);[m , n]=size(code);decode=[];code1=[];for i=1:m ;code1=code(i,:);M=code1.m;T2=6;N=15;S = code1* ((gf(2,M,code1.prim_poly)).^([N-1:-1:0]'*([1:T2])));LambdaX = gf([1 zeros(1,T2)],M,code1.prim_poly);Tx = [0 1 zeros(1,T2-1)];L=0;for k = 1:T2;LambdaXTemp = LambdaX;Delta = S(k) - LambdaXTemp(1+[1:L])*(S(k-[1:L]))';if Delta.x;LambdaX = LambdaXTemp - Delta*Tx;if 2*L < k;L = k-L;Tx = LambdaXTemp/Delta;end;end;Tx = [0 Tx(1:T2)];end;LambdaXValue = LambdaX.x;LambdaX = gf(LambdaXValue(1:max(find(LambdaXValue))), M, code1.prim_poly);errLoc_int = roots(LambdaX);errLoc = log(errLoc_int);for i = 1:length(errLoc);errorMag = 1;code1(N-errLoc(i)) = code1(N-errLoc(i)) - errorMag;end;decode=[decode;code1]; end;ccode = gf(decode.x);decoded = ccode(:,1:5);endfunction [yout]=bch155(x) %定义函数k=5; %信息码位,BCH(15,5)if nargin<1x2=randint(5,k);n=5;msg=x2 %判断输入信息 ,若未输入,系统自动产生5组信息码,并显示出信息位elseif rem(length(x),k)==0;n=length(x)/k;x2=[]; %判断msg是否为K的整数倍,并把输入码员分组for i=0:n-1x2=[x2;x(i*k+1) x(i*k+2) x(i*k+3) x(i*k+4) x(i*k+5)];endif rem(length(x),k)>0 %把输入码员补零并分组x=[x,zeros(size(1:k-rem(length(x),k)))];n=length(x)/k;x2=[];for i=0:n-1x2=[x2;x(i*k+1) x(i*k+2) x(i*k+3) x(i*k+4) x(i*k+5)];endendendik=[eye(5) zeros(5,10)]; %输入信息码扩展x3=x2*ik;yout=[];for i=1:ng=[1 0 1 0 0 1 1 0 1 1 1];[w,yo]=deconv(x3(i,:),g); %产生余式yo=abs(rem(yo,2));yout=[yout;yo];endyout=yout+x3; %产生信息码end运行结果:msg =1 1 0 1 00 1 1 0 10 1 0 0 01 1 1 0 10 0 1 0 0code =1 1 0 1 0 1 1 0 0 1 0 0 0 1 10 1 1 0 1 1 1 0 0 0 0 1 0 1 00 1 0 0 0 1 1 1 1 0 1 0 1 1 01 1 1 0 1 0 1 1 0 0 1 0 0 0 10 0 1 0 0 0 1 1 1 1 0 1 0 1 1 code = GF(2) array.Array elements =1 1 0 1 0 1 0 1 0 1 0 0 0 1 10 1 1 1 1 1 1 0 0 0 0 1 01 00 0 0 0 0 1 1 1 1 0 0 0 11 01 1 0 0 1 0 1 1 1 0 1 0 0 0 10 0 1 1 0 0 1 1 1 1 0 1 01 1decode = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal)Array elements =1 1 0 1 0 1 1 0 0 1 0 0 0 1 10 1 1 0 1 1 1 0 0 0 0 1 01 00 1 0 0 0 1 1 1 1 0 1 0 11 01 1 1 0 1 0 1 1 0 0 1 0 0 0 10 0 1 0 0 0 1 1 1 1 0 1 01 1。
matlab实验五循环结构程序设计实验报告

实验五:循环结构程序设计实验报告一、实验目的1. 了解循环结构的基本概念和原理;2. 掌握使用Matlab进行循环结构程序设计的方法;3. 提高编程能力和问题解决能力。
二、实验内容1. 学习while循环和for循环的基本语法和用法;2. 设计并编写一些基于循环结构的Matlab程序;3. 分析程序运行结果并进行总结。
三、实验原理循环结构是程序设计中的重要组成部分,它可以让一段代码重复执行多次,从而简化程序的编写。
在Matlab中,循环结构主要有while 循环和for循环两种形式。
while循环在执行循环体前判断条件是否为真,只有条件为真时才会执行循环体;for循环则是指定循环的次数,每次迭代时执行一次循环体。
四、实验步骤与结果1. 编写一个使用while循环的程序,实现1~100的累加。
程序代码如下:```matlabsum = 0;i = 1;while i <= 100sum = sum + i;i = i + 1;enddisp(sum);```运行程序后,得到的结果为5050。
2. 编写一个使用for循环的程序,实现1~10的阶乘。
程序代码如下:```matlabresult = 1;for i = 1:10result = result * i;enddisp(result);```运行程序后,得到的结果为xxx。
五、实验总结通过本次实验,我深刻理解了循环结构的基本概念和原理,掌握了使用Matlab进行循环结构程序设计的方法。
在编写循环程序的过程中,我发现循环结构可以大大简化程序的编写,并且能够高效地处理重复性任务。
我也进一步提高了自己的编程能力和问题解决能力。
本次实验使我对Matlab中的循环结构有了更加深入的了解,我相信这对我的编程能力和日后的学习工作都将大有裨益。
六、实验感想和改进意见通过本次实验,我深刻认识到循环结构在程序设计中的重要性和灵活性。
循环结构能够帮助我们简化程序的编写,提高代码的重用性和可读性,因此在实际的程序设计中,合理地运用循环结构能够大大提高程序的效率和逻辑清晰度。
循环码实验报告

循环码实验报告循环码实验报告引言:循环码是一种常用的纠错码,具有很好的纠错能力和编码效率。
本实验旨在通过编码和解码实验,深入了解循环码的原理和应用。
一、实验目的通过实验,掌握循环码的编码和解码过程,了解循环码的纠错能力和编码效率。
二、实验原理循环码是一种线性块码,其编码和解码过程基于生成多项式和校验多项式。
生成多项式决定了编码过程,校验多项式用于纠错。
循环码的编码过程是将信息位按照生成多项式进行除法运算,得到余数作为校验位。
解码过程是将接收到的码字进行除法运算,若余数为0,则认为接收正确;若余数不为0,则认为接收错误,并通过校验多项式进行纠错。
三、实验步骤1. 编码实验:(1)选择生成多项式和校验多项式,如生成多项式为g(x)=x^3+x+1,校验多项式为h(x)=x^3。
(2)选择一组信息位,如信息位为1011。
(3)将信息位对应的二进制数与生成多项式进行除法运算,得到余数,即编码后的码字。
如:1011除以生成多项式g(x),余数为010。
(4)将信息位和余数拼接成码字,即编码完成。
如:码字为1010010。
2. 解码实验:(1)选择一组接收到的码字,如接收到的码字为1010010。
(2)将接收到的码字与校验多项式进行除法运算,得到余数。
若余数为0,则认为接收正确;若余数不为0,则认为接收错误。
(3)若接收错误,则通过余数定位错误位置,并进行纠错。
如:接收到的码字1010010除以校验多项式h(x),余数为010。
根据余数的位置,确定错误位为第2位。
(4)将错误位取反,即可得到纠错后的码字。
如:纠错后的码字为1000010。
四、实验结果与分析通过编码实验,我们成功将信息位1011编码为码字1010010。
通过解码实验,我们成功纠错了接收到的码字,将其从1010010纠正为1000010。
循环码具有很好的纠错能力,能够在一定范围内纠正接收到的错误码字。
通过校验多项式进行纠错,可以定位错误位并进行纠正。
循环码实验报告

循环码实验报告循环码实验报告引言:循环码是一种在信息传输和存储中广泛应用的编码技术。
其具有纠错能力强、编码效率高等优点,因此在通信领域得到了广泛的应用。
本实验旨在通过实际操作,探索循环码的原理、编码和解码过程,并对其性能进行评估。
一、实验目的1. 了解循环码的基本原理和编码过程;2. 掌握循环码的解码方法;3. 评估循环码的纠错能力和编码效率。
二、实验步骤1. 生成循环码通过给定的生成多项式,使用编码器生成循环码。
生成多项式是循环码的重要参数,它决定了编码和解码的方式。
2. 添加错误位为了评估循环码的纠错能力,我们需要在生成的循环码中添加一定数量的错误位。
通过改变错误位的位置和数量,可以观察到循环码的纠错效果。
3. 解码使用循环码的解码器对添加错误位的循环码进行解码。
解码过程中,通过计算校验位和检测错误位的位置,可以进行纠错。
4. 评估性能根据解码结果,评估循环码的纠错能力和编码效率。
纠错能力可以通过计算纠错率来衡量,而编码效率可以通过计算编码后的码字长度与原始数据长度的比值来评估。
三、实验结果与分析在实验中,我们选择了一个生成多项式为G(x)=x^3+x+1的循环码进行测试。
通过编码器生成了一组循环码,并添加了不同数量的错误位。
然后,使用解码器对添加错误位的循环码进行解码。
在纠错能力方面,我们发现当错误位数量较少时,解码器可以有效地纠正错误,并恢复原始数据。
然而,当错误位数量超过循环码的纠错能力时,解码器无法正确恢复原始数据。
在编码效率方面,我们发现循环码的编码效率较高。
通过计算编码后的码字长度与原始数据长度的比值,我们可以得出编码效率为80%。
这意味着在传输或存储数据时,循环码可以有效地减少数据的长度。
四、实验总结通过本次实验,我们深入了解了循环码的原理、编码和解码过程,并对其性能进行了评估。
实验结果表明,循环码具有较强的纠错能力和高效的编码效率,适用于各种通信和存储场景。
然而,循环码也存在一些限制。
matlab(74)汉明码和(74)循环码的编程设计

二、创新实验设计创新实验一:(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 、0a 应根据信息位的取值按监督关系来确定,为使所编的码中无错码,则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 是信息位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定理: 对于任一个 (n, k) 线性分组码,若要在码字内
(1) 检测 个错误,要求码的最小距离 d e 1;
(2) 纠正 个错误,要求码的最小距离 d 2t 1 ;
(3) 纠正 个错误同时检测 个错误,则要求 d t e 1; e 循环码的译码分检错译码与纠错译码两类。在无记忆信道上,对码字 c,差错图案 和接收向
r 量 的多项式描述为
r(x) c(x) e(x)
定义 r(x) 的伴随多项式为 s(x)
s(x) r(x) (mod g(x)) s0 s1x s2 x2 sr1xr1
由于 c(x) a(x)g(x) 0(modg(x)),所以 s(x) e(x)(modg(x))
由此可见, s(x) 0 则一定有差错产生,或说满足 e(x)(modg(x)) 0 的差错图样 e(x) 产生,它满足 e(x)(modg(x)) 0 。 循环码的检错译码即是计算 s(x) 并判断是否为 0
在进行误码率与信噪比之间的关系编程后,Matlab 一直显示
其后才发现原来没有对加噪后的信号进行整形输出,于是加入 for 循环以四舍五入对信号进行整 形设定。
for i=1:100 for a=1:k+1 if noisycode(i,a)< noisycode(i,a) = 0; else noisycode(i,a) = 1; end end
以 randint 函数重新做一个输入信号并进行编码,结果与上例相似,输入与输出一致。 由上面所有的图可以发现,编码器输入信号并不完全相同,因为对信号的提取是随机的,所以码元也 是随机的,信号经过编码器后,因为要加入监督码,所以波形变得更加密集了。信号经过译码后,波 形和编码器输入信号大致相同,说明循环码的检错和纠错能力可以。
线 性 分 组 码 的 码 字 集 合 , 如 果 对 任 C (cn1,cn2 ,,c0 ) C , 它 的 循 环
移 位 C (1) (cn2 , cn3 ,c0 , cn1 ) 也 属 于 C, 则 称 该
码为循环码。
该码在结构上有另外的限制,即一个码字任意循环移位的结果仍是一个有效码字。
1 0 1 1 0 0 0 G 0 1 0 1 1 0 0
0 0 1 0 1 1 0 0 0 0 1 0 1 1
1 1 1 0 1 0 0 H 0 1 1 1 0 1 0
0 0 1 1 1 0 1
2、编码原理: 有信息码构成信息多项式 m(x) mk1xk1 m0 ,其中最高幂次为 k-1; 用 xnk 乘以信息多项式 m(x),得到的 xnk m(x) ,最高幂次为 n-1,该过程相当于把信息码
3) 计算 c^(x)=y(x)+e^(x),得估计码字。若 c^(x)= c(x),则译码正确,否则错误。 由于 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)循环码中的一位错误。
功能:编码函数 语法:code=encode(msg,N,K,method,opt) 说明:用 method 指定的方法完成纠错编码。其中 msg 代表信息码元,是一个 K 列矩阵,N 是编码后 的码字长度;K 是信息位的长度;opt 是有些编码方式需要的参数。
2)decode 函数 功能:译码函数 语法:msg=decode(code,N,K,method,opt1,opt2,opt3,opt4);
( mk 1 , m k 2 ,……, m1 , m0 )移位到了码字德前 k 个信息位,其后是 r 个全为零的监 督位; 用 g(x)除 xnk m(x) 得到余式 r(x),其次数必小于 g(x)的次数,即小于(n-k),将此 r(x)加于信 息位后做监督位,即将 r(x)于 xnk m(x) 相加,得到的多项式必为一码多项式。
信噪比与误码率的关系比较,从图中可看出,当信噪比在 20 以内时,误码率相对比较大,最高达到 以上,而当 SNR 大于20后,信噪比保持很稳定。下面是误码率的数字显示:
2、实验过程遇到的问题及解决方法 刚开始并没有注意到运用循环码时可用上简便的 Matlab 自带函数,一直苦恼怎么进行纠错编码
及解码,然后查找资料,收集了与循环码相关的函数(部分如下:) 1)encode 函数
说明:这个函数对接收到的码字进行译码,恢复出原始的信息,译码参数和方式必须和编码时采用的
严格相同。它对接收到的码字,按 method 指定的方式进行译码;opt1,…,opt4 是可选项的参数。
3)cyclpoly 函数 功能:生成循环码的生成多项式。 语法:p=cyclpoly(N,K); p=cyclpoly(N,K,fd_flag);
H
bk 1,1 bk 1,0
bk 2,1 bk 2,0
b0,1b0,0源自0 1 00 0 1
(2—10)
已 知 ( 7 , 4 ) 循 环 码 的 生 成 多 项 式 和 校 验 多 项 式 分 别 为 : g(x) x3 x 1 , h(x) x4 x2 x 1。写得其生成矩阵和校验矩阵分别为:
RS 码的编码系统是建立在比特组基础上的,即字节,而不是单个的 0 和 1,因此它是非二进制 BCH 码,这使得它处理突发错误的能力特别强。
码长: n 2m 1 信息段: k n 2t (t 为纠错符号数) 监督段: 2t n k 最小码段: d 2t 1
最小距离为 d 的本原 RS 码的生成多项式为:g(x)=(x-α)(x-α2)(x-α3)…(x-αd-2) 信息元多项式为::m(x)=m0+m1x+m2x2+…+mk-1xk-1
是 子 空 间 S 的 一 个 码 字 , 则 经 过 循 环 移 位 得 到 的 c(1) {cn1, c0 ,, cn2} 也同样是 S 中的一个
码字;或者,一般来说,经过 j 次循环移位后得到的 c( j) {cn j ,cn j1,,cn1,c0 ,c1,,cn j1} 也是
S 中的一个码字。
1)有信息码构成信息多项式 m(x)=mk-1xk-1+``````m0 其中高幂次为 k-1。 2)用 xn-k 乘上信息多项式 m(x),得最高幂次为 n-1,做移位。 3)用 g(x)除 xn-km(x)和到余式 r(x)。 编码过程流程图:
3、译码原理:
1) 有接收到的 y(x)计算伴了随式 s(x)。 2) 根据伴随式 s(x)找出对应的估值错误图样。
end
四、RS 码在现代通信系统中的应用
RS 编码起源于 1960 年 MIT Lincoln 实验室,经历了数十年的发展,RS 码成为了研究最详尽,分 析最透彻,应用最广泛,研究成果最多的码类之一。 1、在井下通信中的应用:由于井下空间小,供电系统布置受到很大局限,电磁干扰现象也很严重, 通过选择合适的信道编码方式是抗干扰措施之一,可有效消除干扰,而由于 RSce 纠正 t 个 m 位的二 进制错误会符号,而不管这 t\个错误会符号是连续出现的还是离散出现,因此 RS 很适用于存在突发 错误信道中,如井下工作,对系统码率的降低和可靠性的提高起重要作用。
解码过程流程图:
初始化
由 R(x)确定 S(x):
S(x)=0,无误码误 码否
由 S(x)确定错误图样 E(x)
纠错 c(x) E( X ) R( X )
存储 c(x)
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) code = encode(msg,n,k,'cyclic',p);
井下采煤机与通信系统的硬件框图 2、RS 码在 PDS 水声通信技术的应用 水声通信技术信道是随机时变空变的,其多途扩展产生的码间干扰直接影响到了水声通信的质量。而 RS 是一种扩展的非二进制 BCH 码,具有与 PDS 通信相结合的优势。 3、RS 码在无线高保真音频传输系统中的应用 在无线音频传输中, 如果传输的数据出现误码, 则会在播放时出现噪声或者啸叫声, 所以想要确保得 到高保真的音频, 控制无线传输的误码率是必须的, 通常采用重传和纠错编码两种方法。重传机制对 无线信道的带宽要求更高, 这里采用 RS 纠错编码的方法来控制误码率。
x 对所有的 i=0,1,2,……k-1,用生成多项式 g(x)除 nki ,有: x n k i ai (x)g(x) bi (x)
(2—7)
式因成中此矩,阵bi (为xxn):是kG i余式b100b(,ix()表x100是) 示 g0为(bxi),:n的000k倍1bbx式bkkn0,,12nk,,nn即1k kk1x11n kbi1,1
课程名称: 课程设计题目:
信息论与编码
循环码的编码和译码程序设计
指导教师: 系 别: 学 号: 合作者
专 业: 姓 名:
完成时间:
成绩:
评阅人:
一、实验目的:
1、通过实验了解循环码的工作原理。 2、深刻理解 RS 码构造、RS 编译码等相关概念和算法。
二、实验原理
1、RS 循环码编译码原理与特点