第六章 循环码的译码
- 格式:ppt
- 大小:328.00 KB
- 文档页数:45
循环码的编译码方法..***************** 实践教学****************** 兰州理工大学计算机与通信学院2013年秋季学期《计算机通信》课程设计题目:(15,7)循环码的编译码方法专业班级:通信工程一班姓名:学号:指导教师:成绩:摘要本次课程设计研究的是循环码的编译码方法,在设计过程中,首先要介绍了线性分组码的编码和译码原理,并介绍了循环码的定义及其相关内容;其次给定的生成多项式g?x?求解出了生成矩阵和监督矩阵,并且利用MATLAB编写循环码的编码器和译码器代,实现编码及译码功能;求出该码的最小码距,并分析讨论该码的纠错能力以及在高斯信道下的误码性能。
关键词: 循环码;编码;译码;MATLAB 目录一前言............................................................... ..................................................................... .................................. 1 二循环码编译码的基本原理............................................................... ...................................................................2 循环码的简介............................................................... ..................................................................... ......... 2 循环码的定义............................................................... ....................................................................2 线性分组码与循环码的区别............................................................... ............................................3 循环码的最小码距............................................................... ............................................................ 3 循环码的检纠错能力...............................................................环码编译码原理及过程............................................................... (4)循环码的编译码原理............................................................... ........................................................ 4 循环码编译码的............................................................... (5)三系统分析............................................................... ..................................................................... .......................... 7 循环码编译码方法的实现框图............................................................... ................................................. 7 循环码编译码实现过程............................................................... . (8)四系统设计....................................................................................... 10 生成矩阵和监督矩阵............................................................... . (10)循环码的编码............................................................... ..................................................................... ....... 10 循环码的的译码............................................................... ..................................................................... ... 11 循环码在高斯信道下的误码性能............................................................... ............................................ 13 总结............................................................... ..................................................................... .. (14)线性分组码与循环码的区别线性分组码是同时具有分组特性和线性特性的纠错码。
实验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 的程序实现。
六、实验步骤1.基本概念:设α是()2mGF 上的一个本原,t 是整数,含有2t 个跟232,,,...,tαααα,其系数在()2GF 上,并且最低次多项式()g x 为循环码生成多项式,并称为而原本预案BCH 码。
参数如下: 码长:12m n -=校验位数:r n k mt =-≤ 最小码距:min 021d d t ≥=+ 纠错能力:t 。
其中(3)m m ≥和纠错能力t ()12m t t -<是任意整数2.计算方法:(1)有21mn =-算出m ,遭到一个m 次的本原多项式()p x ,产生()2mGF 扩域。
(2)在()2mGF 上找到一个本原a,一般情况下是利用本原多项式()p x 的根,分别计2t 个连续米次根232,,,...,t αααα所对应的()2GF 域上的最小多项式()()()122,,...,t m x m x m x(3)计算2t 个连续奇次幂之根所对应的最小多项式的公倍式,得到生成多项式()()()()132,,...,t g x LCM m x m x m x =⎡⎤⎣⎦(4)由关系式()()()C x m x g x =求得BCH 码字3.程序实现:对于BCH(15,5),有matlab实现程序如下:①BCH编码enbch155.mfunction coded = bch155(msg_seq) %定义函数bch编码% 输入为msg_seq信息位% 输出为编码后的码元codedg=[1 0 1 0 0 1 1 0 1 1 1]; %生成多项式系数n=15;k=5; %默认为BCH(15,5)%% 从输入msg_seq中提取信息位msgdisplay('信息位:')if nargin<1 %判断输入信息,若未输入,系统自动产生5组信息码,并显示出信息位nmsg=5;msg=randi([0,1],[nmsg,k])elselmsg = length(msg_seq);nmsg = ceil(lmsg/k);msg = [msg_seq(:);zeros(nmsg*k-lmsg,1)];msg = reshape(msg,k,nmsg).'endxx = [msg zeros(nmsg,n-k)]; %将输入信息码msg拓展为矩阵形式的xx%% 进行编码,将xx编码为codedcoded =zeros(nmsg,n);fori=1:nmsg[q,r]=deconv(xx(i,:),g); %产生余式r=abs(rem(r,2));coded(i,:)=r;endcoded = coded + xx; %产生信息码end②BCH解码debch155.mM=4;code = gf(code,M);[m , n]=size(code);decode=[];code1=[];T2=6;N=15;mat=gf(2,M,code.prim_poly).^([N-1:-1:0]'*([1:T2]));Tx = [0 1 zeros(1,T2-1)];fori=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]))';ifDelta.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);fori = 1:length(errLoc);errorMag = 1;code1(N-errLoc(i)) = code1(N-errLoc(i)) - errorMag;end;decode=[decode;code1];end;ccode = double(decode.x);decode = ccode(:,1:5);end③测试文件 bch_en_decode.mfunction bch_en_decode(msg) %编码ifnargin<1code=enbch155();else code=enbch155(msg); %编码endcode=code+randerr(5,15,1:3); %模拟信道产生错误,每行有1-3个随机错误display('信道传输中干扰后,接收到的信息');coder=rem(code,2) %对2取余,使范围是0、1display('解码后');decode=debch155(coder)end4.进行测试法一:不输入信息位,让系统自动产生信息位,在matlab中输入下面一行代码,得到结果>>bch_en_decode()信息位:msg =0 0 1 1 11 1 1 0 01 1 1 1 11 0 0 0 10 0 0 0 0编码后码元:coded =0 0 1 1 1 1 0 1 0 1 1 0 0 1 01 1 1 0 0 0 0 1 0 1 0 0 1 1 01 1 1 1 1 1 1 1 1 1 1 1 1 1 11 0 0 0 1 1 1 1 0 1 0 1 1 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 信道传输中干扰后,接收到的信息coder =0 0 0 1 1 1 0 1 0 1 1 0 0 1 00 1 1 0 0 0 0 1 0 1 1 0 1 1 01 1 1 1 1 1 1 1 0 0 1 0 1 1 11 0 0 0 0 0 1 1 0 1 0 1 1 0 00 0 0 0 0 0 1 1 0 0 0 0 0 1 0 解码后decode =0 0 1 1 11 1 1 0 01 1 1 1 11 0 0 0 10 0 0 0 0法二:输入信息位在matalb中输入下面两行代码,得到结果如下>>msg=[1 1 0 1 1 1 1 1 1 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1];>>bch_en_decode(msg)信息位:msg =1 1 0 1 11 1 1 1 10 0 0 0 10 0 0 1 00 0 0 0 1编码后码元:coded =1 1 0 1 1 1 0 0 0 0 1 0 1 0 01 1 1 1 1 1 1 1 1 1 1 1 1 1 10 0 0 0 1 0 1 0 0 1 1 0 1 1 10 0 0 1 0 1 0 0 1 1 0 1 1 1 00 0 0 0 1 0 1 0 0 1 1 0 1 1 1 信道传输中干扰后,接收到的信息coder =1 1 0 1 1 1 0 0 0 0 1 0 1 0 11 1 1 1 0 0 1 1 1 1 1 1 0 1 10 0 0 0 1 0 1 1 0 1 1 0 1 1 10 0 1 1 0 1 1 0 1 0 0 1 1 1 00 0 1 1 1 0 1 0 0 1 1 0 1 1 1 解码后decode =1 1 0 1 11 1 1 1 10 0 0 0 10 0 0 1 00 0 0 0 1。
循环码编译码工作过程可以概括为以下几个步骤:一、循环码编码过程1. 生成多项式选择:循环码的编码过程中,需要选择合适的生成多项式,以便将输入的数据符号转换成循环码序列。
常见的生成多项式有GF(2^m)中的最小多项式、标准多项式等。
2. 输入数据符号的编码:将输入的数据符号转换成二进制码字,可以采用简单的模2加法或利用编码算法进行转换。
3. 生成多项式扩展:将二进制码字通过生成多项式进行扩展,得到循环码的码字。
由于循环码是循环移位对称的,因此可以通过将码字循环移位得到不同的码字。
4. 校验位添加:根据循环码的校验规则,添加校验位,以确保编码后的码字是正确的循环码序列。
二、循环码解码过程1. 循环移位:将接收到的码字进行循环移位,使其与发送的码字匹配。
2. 校验位检查:根据循环码的校验规则,检查接收到的码字中的校验位是否正确。
3. 错误检测与纠正:如果校验位不正确,需要根据错误的位置和大小进行错误检测和纠正。
如果错误数量较少且位置相对固定,可以采用简单的错误纠正算法;如果错误数量较多或位置不固定,则需要利用更复杂的算法进行错误检测和纠正。
4. 数据恢复:根据解码过程中得到的正确的二进制码字,恢复原始数据符号。
需要注意的是,循环码的编码和解码过程都涉及到多项式的运算,因此需要选择合适的算法和工具进行实现。
同时,为了保证编码和解码的正确性和效率,还需要对传输过程中的干扰和噪声等因素进行考虑和处理。
在实现循环码的过程中,可以采用硬件或软件的方式。
对于硬件实现,可以利用数字电路和微处理器等技术进行设计;对于软件实现,可以利用编程语言和算法库等进行编写。
在实际应用中,需要根据具体的需求和环境选择合适的方式。
总之,循环码是一种重要的编码技术,具有较高的可靠性和效率。
了解循环码的编译码工作过程,对于在实际应用中实现循环码、优化编码和解码性能、提高通信系统的性能具有重要意义。
学生实验报告系别电子工程系课程名称通信原理实验班级实验名称循环码编译码实验姓名实验时间2010年12月14 日学号指导教师报告内容一、实验目的了解生成多项式g(x)与编、译码器之间的关系,码距与纠、检错能力之间的关系。
二、实验内容1.根据编码规则验证循环码的生成多项式。
2.通过实验了解循环码的工作原理。
(1)了解生成多项式g(x)与编码及译码的关系。
(2)了解生成多项式g(x)与码距d的关系。
(3)了解码距d与纠、检错能力之间的关系。
(4)观察该码能纠几个错误码元。
(5)观察循环码的循环性以及封闭性。
3.通过实验了解编、译码器的组成方框图及其主要波形图。
4.了解信道中的噪声对该系统的影响。
三、实验原理总原理方框图如图6.1所示。
图6.1循环码的编、译码系统由下列五部分组成:定时单元、信码发生器及显示部分、编码器、模拟信道部分(虚线部分,包括错码发生器及其显示)和译码器。
(1)定时单元本单元提供编码器及译码器所需的时序信号。
其时钟重复频率(CP)为2MHZ。
(2)信码发生器本单元给编码器提供一个信号源,手控开关(板上CDIN)置于+5V时,发光二极管亮,代表输出“1”码元。
若开关置于“0”,代表输出“0”码元。
(3)循环码编码器编码器是本实验的主要部分。
根据生成多项式,采用5个异或门和D触发器组成编码器。
在K1信号的控制下,输入6位信息码元CDIN,一方面串行输入信道,另一方面通过与门送入除法电路进行计算。
第6位输入码元结束时,K1信号也为零,在CP脉冲作用下,移位寄存器将计算的结果(CDOUT)送往信道,即在6位信息码元后附加了9位监督码,使码长(n=K+r)为15(64个编码输出信号见附表1)。
(4)模拟信道传输错误部分严格说编码输出的基带信号发往信道,若信道为有线的,需加均衡设备;若为无线信号,需加调制设备。
本实验的目的是观察编码输出波形及该波形经过信道后纠错能力,尽量省去附加设备。
本实验设计了一个15位错码发生器(板上ECD框内)可在不同位置使用开关任加“1”码,并使相应的发光二极管发光,显示错码产生的位置(如图6.2所示)。
6-2 循环码(Cyclic Code)循环码是线性分组码的最重要的一类码,它的结构完全建立在有限域多项式的基础上。
它具有两个基本特点:一是编码电路与译码电路非常简单,易于实现;二是其代数性质好编码译码分析方便,有一些好的译码方法。
6-2-1 循环码的描述[循环码定义]:一个(n,k)线性分组码C,如果码组中的一个码字的循环移位也是这个码组中的一个码字,则称C为循环码。
C(0)={c n-1,c n-2,……c1,c0} ∈CC(1)={c n-2,c n-3,……c0,c n-1} ∈C称为具有循环自闭性。
[循环码的多项式描述]:循环码可以用监督矩阵和生成矩阵描述,但更多地用域上多项式来描述,一个(n,k)循环的码字矢量C(0)用一个n-1次多项式描述,可以表示为:C(x)= c n-1x n-1+c n-2x n-2+……+c1x+c0这个多项式称为码字多项式。
码字矢量的循环移位可以用x乘上C(x)后的模x n-1(x n+1)来表示。
xC(x)= x(c n-1x n-1+c n-2x n-2+……+c1x+c0)= c n-1x n+c n-2x n-1+……+c1x2+c0 x= c n-2x n-1+……+c1x2+c0 x+ c n-1(模x n+1)模x n+1相当于x n+1=0;x n=1[循环码举例]:(7,4)系统循环码的编码及码字多项式如下表:可以看出:每个码字的循环移位仍然属于这个码组,注意:并不是说这个码组是由一个码字的循环移位构成的,本例中是由四个码字的循环移位构成的。
[生成多项式的定义]:在一个(n,k)循环码中,有且仅有一个次数为n-k=r的码字多项式,记为:g(x)=x r+g r-1x r-1+……+g1x+1同时:每个码字多项式都是g(x)的倍式;每个次数小于等于n-1的g(x)的倍式必为一个码字多项式。
这时称g(x)的(n,k)码的生成多项式。
从上面的例子可见,g(x)=x3+x+1为(7,4)循环码的生成多项式。
(7,4)循环码的编码译码编码的实验原理:根据循环码的代数性质建立系统编码的过程,可以把消息矢量用如下多项式表示:m(x) = m k」x k' + m k/X k,十…十m i x 十m°要编码成系统循环码形式,把消息比特移入码字寄存器的最右边k 位,而把监督比特加在最左边的n-k个中,则要用x n」乘以m(x)得到n _kx m(x)= mk」x n_l m k-2x n-2…m1x nJ^ 1m0x nJ<nx m(x)= q(x) g(x)+ p(x),其中p(x)可以表示为n _k _1 Er n -kp(x)= P n 上」X …Pi X P o ,贝y p(x)+ x m(x)nd 丄n _2 丄丄n _k H i 丄n _k n _k A= m k」x m k/x …mi x m o x + p n」_i x …pi x p o另U(x)= p(x)+ x m(x),贝卩U=( p o , p i , p2,•…,P n_k」,m o , m i,•…, m k 1 ) o本实验根据以上原理,用matlab实现书上例6.8系统形式的循环3码,生成多项式为g(x)= x 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得到余数Rx[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(输入序列:');disp('编码输出序列:');b程序运行结果为:输入序列:a =110 0编码输出序列:b =10 1110 0改变输入序列a=[1 0 1 1],运行结果:输入序列:a =10 11编码输出序列:b =10 0 10 11运行结果的编码如下:译码的实验原理g(x)= 1 x x3,在(n, k)循环码中,由于g(x)能除尽,因此x n T可分解成g(x)和其他因式的乘积,记为x n V g(x)h(x)x n 1g (x)即 h (x) = x 4 X 2 X 〔则h *(x)=x 4 x 3 x 1,其中h *(x)式h(x)的逆多项式。
循环码的定义和特性定义循环码是一种具有循环特性的线性分组码。
它将k位信息位编码成n位码字,其中n-k为冗余位,用于检测和纠正错误。
特性循环码的两个重要特性是封闭性和循环性。
封闭性指的是两个循环码的和仍然是循环码;循环性指的是循环码的任意循环移位后的结果仍然是循环码。
循环码译码的原理工业控制在工业控制系统中,循环码的译码可用于数据传输的错误检测和纠正,确保控制系统的稳定性和安全性。
循环码译码的应用场景通信领域循环码在数字通信中应用广泛,如移动通信、卫星通信等。
在这些场景中,循环码的译码用于检测和纠正传输过程中的误码,提高通信质量。
存储领域在数据存储领域,如固态硬盘(SSD)、光盘等存储介质中,循环码的译码用于纠正存储数据的错误,提高数据的可靠性和完整性。
航空航天在航空航天领域,由于空间环境恶劣,通信链路容易受到干扰,循环码的译码对于确保航天器与地面站之间的可靠通信具有重要意义。
循环码的编码方法线性反馈移位寄存器法生成多项式法硬判决译码:硬判决译码方法是对接收到的信号进行量化,然后进行译码。
这种方法简单直接,但在低信噪比下性能较差。
循环码的译码方法软判决译码:与硬判决译码不同,软判决译码充分利用了接收信号的幅度信息,提高了译码性能。
但软判决译码实现复杂度相对较高。
迭代译码:迭代译码方法通过多次迭代,逐步逼近正确码字,以提高译码性能。
这种方法在长码长和高纠错能力下具有优势。
以上各种方法各有特点,在实际应用中,需根据具体场景和需求选择合适的方法。
循环码的纠错能力最小距离与纠错能力纠错算法纠错能力定义循环码的误码性能误码性能定义误码率与信噪比仿真与分析与其他码字的比较这是一种迭代算法,用于确定错误位置多项式并纠正错误。
BM算法是循环码译码中最常用的算法之一,具有高效和准确的特点。
BM(Berlekamp-Massey)算法该算法基于欧几里得算法求解最大公约数,能够找到错误图样,并用于纠正循环码中的错误。
相比于BM 算法,欧几里得算法在某些情况下更加简单。