基于MATLAB的循环码实验报告
- 格式:doc
- 大小:365.00 KB
- 文档页数:15
课程名称:信息论与编码课程设计题目:循环码的编码和译码程序设计指导教师:系别:专业:学号:姓名:合作者完成时间:成绩:评阅人:一、实验目的: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)循环码是线性分组码的一种,所以它具有线性分组的码的一般特性,且具有循环性,纠错能力强。
二、创新实验设计创新实验一:(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 是信息位。
实验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。
实验五:循环结构程序设计实验报告一、实验目的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%。
这意味着在传输或存储数据时,循环码可以有效地减少数据的长度。
四、实验总结通过本次实验,我们深入了解了循环码的原理、编码和解码过程,并对其性能进行了评估。
实验结果表明,循环码具有较强的纠错能力和高效的编码效率,适用于各种通信和存储场景。
然而,循环码也存在一些限制。
二、创新实验设计创新实验一:(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 是信息位。
二、创新实验设计创新实验一:(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 是信息位。
Harbin Institute of Technology信息论与编码报告题目:循环码编译码实验院(系)电子与信息工程学院班级通信1班学生学号序号哈尔滨工业大学循环码编译码实验1 设计内容循环码是线性分组码中最重要的一类码,它的结构完全建立在有限域多项式的基础上,它具有两个基本特点:一是编码电路与译码电路非常简单,易于实现;二是其代数性质好,分析方便,有一定的成熟的译码方法。
一个(n ,k )线性分组码C ,如果码组中的一个码字的循环移位也是这个码组中的一个码字,则称C 为循环码。
本实验主要完成以下四项内容:(1)利用(7,4)系统循环码的生成多项式为:3()1g x x x =++,请设计该循环码的编码器。
(2)随机产生重量为0或1的八种错误图样中的一种,得到实际接收码字。
(3)根据接收到的码字进行译码,译码方式分为校验子译码和梅吉特译码两种。
(4)对于在BSC 信道传输时的情形进行讨论,验证(7,4)系统循环码的纠错能力。
2 编程环境本实验采用Matlab 作为编程工具,所有代码均在Matlab 软件中运行,此软件功能强大,应用广泛,在此不再赘述。
3 各模块设计3.1 编码器模块利用(7,4)系统循环码的生成多项式为:3()1g x x x =++,请设计该循环码的编码器。
流程图为:图1 (7,4)循环码编码流程图图2 4位信息码元编码流程图在学生设计的演示工具中输入的信息码元可以为任意多个,系统自动按每4个连续的码字一组进行编码,当输入的信息码元不是4的倍数时,自动补零到与信息码元长度最接近的4的倍数。
译码时也是按照每7个连续的码字一组进行译码。
但是为了流程图的清晰明了,在本文的流程图除流程图1以外,其余均按一个循环码码字(即7位)来描述。
编码器模块源程序如下:%%%函数功能:(7,4)系统循环码编码器%%%编程时间:2013-11-29%%%该系统循环码编码器的生成多项式是g(x) = x^3 + x + 1;% %%系统循环码编码的原理是,首先用x^r乘以信息码字多项式m(x),这里r = 3;然后用x^r*m(x)除以生成多项式g(x),% %%得余式r(x);最后得系统循环码多项式c(x) = x^r*m(x) + r(x)function [code_out,code_in_L] = coder(code_in)%%code_in:输入信息码字%%code_out:输出编码后的码字%%L:输入的信息码元的长度n=7;%%每个码字长度k=4;%%每个码字中信息码元长度code_in_L=length(code_in);a=rem(code_in_L,k);%信息码元的长度除以k后的余数if a~=0 %%%信息码元长度不是k的整数倍,则补0array_0=zeros(1,k-a);%%%补零个数code_in=[code_in ,array_0];endcode_in_4=(reshape(code_in,k,length(code_in)/k))';%%%将补零后的码元变成length(code_in)/4行,4列矩阵for loop=1:length(code_in)/kmes_code = [code_in_4(loop,:),zeros(1,3)]; % 在信息码字后面补上三个零,相当于乘上x^rgen = [1 0 1 1]; % 生成多项式向量% 在二元域进行运算,必须把信息码字多项式向量和生成多项式向量转到二元域GF(2)上% 函数gf(X,M)用于从向量X生成GF(2^M)上对应的向量mes_g = gf(mes_code,1);gen_g = gf(gen,1);% 用x^r*m(x)除以生成多项式g(x)[Q,rem_g] = deconv(mes_g,gen_g); % 多项式除法其实就是解卷积运算,得到除法的商式Q,余式rem_g%%相应的,多项式乘法其实是系数的卷积code_rem = rem_g.x; % rem_g.x表示二元域向量rem_g的一个属性,即多项式的系数。