实验6 循环码的软件编、译码实验

合集下载

基于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)循环码是线性分组码的一种,所以它具有线性分组的码的一般特性,且具有循环性,纠错能力强。

循环码的编码和译码

循环码的编码和译码

信息编码技术实验艮告三题目:循环码的编码和译码院系:计算机科学与工程学院班级:姓名:学号:【实验目的】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 与纠、检错的关系,在动手实验过程中,对知 识点的印象更加清晰,让我的理解更加深刻了。

循环编译码实验报告

循环编译码实验报告

一、实验目的1. 理解循环编译码的基本原理和实现方法;2. 掌握循环编译码的编译过程和性能评估方法;3. 分析循环编译码在不同场景下的应用效果。

二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 实验语言:C++三、实验内容1. 循环编译码的基本原理循环编译码是一种特殊的线性编译码,具有循环结构,可以将信息以循环的方式存储在码字中。

循环编译码具有以下特点:(1)循环结构:码字中的信息以循环的方式存储,即码字的前n个比特与后n个比特相对应;(2)线性结构:码字中的比特之间满足线性关系;(3)性能优越:循环编译码具有较好的纠错性能和抗干扰能力。

2. 循环编译码的编译过程循环编译码的编译过程主要包括以下步骤:(1)码字生成:根据信息比特和校验比特的线性关系,生成码字;(2)码字循环:将码字中的信息比特以循环的方式存储,实现循环结构;(3)码字传输:将码字传输到接收端;(4)码字检测:对接收到的码字进行检测,判断是否存在错误;(5)错误校正:对检测到的错误进行校正,恢复原始信息。

3. 循环编译码的性能评估循环编译码的性能评估主要包括以下指标:(1)纠错能力:循环编译码能够纠正的最大错误数量;(2)误码率:在给定信道条件下,码字中错误比特的比例;(3)抗干扰能力:循环编译码在信道干扰下的性能。

四、实验步骤1. 设计循环编译码的结构:确定码长、信息比特数、校验比特数等参数;2. 编写码字生成函数:根据信息比特和校验比特的线性关系,生成码字;3. 编写码字循环函数:将码字中的信息比特以循环的方式存储;4. 编写码字传输函数:模拟码字在信道中的传输过程;5. 编写码字检测函数:对接收到的码字进行检测,判断是否存在错误;6. 编写错误校正函数:对检测到的错误进行校正,恢复原始信息;7. 评估循环编译码的性能:在不同信道条件下,对循环编译码的纠错能力、误码率和抗干扰能力进行评估。

循环码编译码matlab程序

循环码编译码matlab程序

循环码编译码matlab程序循环码编码程序function [ C ] = cyclic_encoder( Si )%C为循环编码的输出编码结果%对x^8+1进行模2因式分解得到:x^8+1=(x^3+x^2+x+1)*(x^5+x^4+x+1)y=size(Si,2);%y表示Si的列数,即输入码元的个数M=ceil(y/5);%将信息码元分成M帧,一帧5个信息码元n=8;%循环编码的一帧码长k=5;%信息位的个数r=n-k;%监督位的个数gx=[1,1,1,1];%(8,5)循环码的生成多项式g(x)=x^3+x^2+x+1Ai=zeros(1,8*M);%Ai用来存放所输入的码元经过循环编码后的码字Axi=zeros(1,8);%Axi用来表示循环编码后的一帧的编码输出码字mi=zeros(1,5);%mi用来存放每一帧的信息码元for i=1:Mfor j=1:5mi(j)=Si(j+(i-1)*5);endAxi(4:8)=mi(1:5);Axi=circshift(Axi',-r)';%实现(x^(n-k))*m(x),其中m(x)的系数由mi决定[qx,rx]=deconv(Axi,gx);%实现((x^(n-k))*m(x))/g(x),得到商q(x)和余数r(x)Axi=Axi+rx;%实现Axi(x)=Axi(x)+r(x),得到的Axi就是循环编码的编码输出码字Ai(8*i-4:8*i)=Axi(1:5);Ai(8*i-7:8*i-5)=Axi(6:8);end%for循环是为了实现模2相加,使循环编码的输出码字Ai中只有0,1for i=1:8*Mif rem(abs(Ai(i)),2)==0Ai(i)=0;elseAi(i)=1;endendC=Ai;%循环编码的输出码字C=Aiend循环码译码程序function [ So ] = cyclic_decoder( R )%输入R为经AWGN信道传输后的二进制信息,So为循环译码器的译码结果R=1*(R>0.5);%对接收到的信号进行抽样判决y=size(R,2);%y表示R的列数,即输入码元的个数M=ceil(y/8);%将接收到的码元R分成M帧,一帧8个码元So=zeros(1,5*M);%用来存放纠检错之后的译码结果Axo=zeros(1,8);%用来存放纠检错之后每一帧的译码结果%对接收信号进行纠检错译码n=8;%循环编码的码长k=5;%信息位的个数r=n-k;%监督位的个数s=zeros(1,3);%用来存放校正子sh=[1,1,0,0,1,1];%监督多项式h(x)=x^5+x^4+x+1hn=[];%hn(x)为监督多项式h(x)的逆多项式,hn用来放hn(x)的各项系数for i=2:5hn(i)=h(k+2-i);endhn(1)=h(1);hn(6)=h(6);%计算监督矩阵HH=zeros(r,n);%监督矩阵H为r*n阶矩阵H0=zeros(1,n);%用来存放hn(x)的系数H1=zeros(1,n);%用来存放x*hn(x)的系数H2=zeros(1,n);%用来存放x^2*hn(x)的系数H0(3:8)=hn(1:6);H1(2:7)=hn(1:6);H2(1:6)=hn(1:6);H(1,:)=H2(1:8);H(2,:)=H1(1:8);H(3,:)=H0(1:8);flag=0;%出错的标志,为1表示检测出错误for i=1:Mfor j=1:8Axo(j)=R(j+(i-1)*8);ends=Axo*H';%计算校正子sfor k=1:3if rem(abs(s(k)),2)==0s(k)=0;elses(k)=1;endendif s==[0 0 0]if flag==0flag=0;endelseflag=1;endfor k=1:8if rem(abs(Axo(k)),2)==0Axo(k)=0;elseAxo(k)=1;endendSo(1+(i-1)*5:5+(i-1)*5)=Axo(4:8);endif flag==1disp('检测出有错误,但无法纠正!'); elsedisp('没有错误');endend。

循环码编译码实验报告

循环码编译码实验报告

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的一个属性,即多项式的系数。

实验6 BCH循环码的编码与译码的matlab实现

实验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。

(7,3)循环码编译码软件设计(DOC)

(7,3)循环码编译码软件设计(DOC)

摘要本课程设计介绍了(7,3)循环码的编译与译码原理,用C语言编程实现其编码与译码功能。

通过C语言平台运用所编写的程序,输入任意的数字信息序列,得出了编码结果。

着重在无差错和部分差错的情况下进行了译码,并对译码结果进行分析。

关键词:循环码、C语言、编译码目录一、计算机通信 (1)1.1通信的概念 (1)1.2计算机通信介绍 (1)二、系统设计 (2)2.1循环码 (2)2.2 编码原理 (5)2.3译码原理 (6)2.4循环码译码的设计 (6)2.5纠错码 (7)三、设计结果及分析 (9)3.1程序运行结果 (9)3.2运行结果理论分析 (11)3.3软件可行性分析 (12)四、总结 (13)参考文献....................................................... 错误!未定义书签。

附:程序清单. (14)一、计算机通信1.1通信的概念通信就是克服距离上的障碍,从一地向另一地传递和交换消息。

消息是信息源所产生的,是信息的物理表现,例如,语音、文字、数据、图形和图像等都是消息(Message)。

消息由模拟消息(如语音、图像等)以及数字消息(如数据、文字等)之分。

所有消息必须在转换成电信号(通常简称为信号)后才能在通信系统中传输。

所以,信号(Signal)是传输消息的手段,信号是消息的物资载体。

相应的信号可以分为模拟信号和数字信号,模拟信号的自变量可以是连续的或离散的,但幅度是连续的,如电话机、电视摄像机输出的信号就是模拟信号。

数字信号的自变量可以是连续的或离散的,但幅度是离散的,如计算机等各种数字终端设备输出的信号就是数字信号。

通信的目的是传送消息,但对受信者有用的是消息中包含的有效内容,即信息(Information)。

消息是具体的、表面的,而信息是抽象的、本质的,且消息中包含的信息的多少可以用信息量来度量。

通信技术,特别是数字通信技术近年来发展非常迅速,它的应用越来越广泛。

循环码的编译码方法..

循环码的编译码方法..

循环码的编译码方法..***************** 实践教学****************** 兰州理工大学计算机与通信学院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)线性分组码与循环码的区别线性分组码是同时具有分组特性和线性特性的纠错码。

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

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

循环码是线性分组码中一个重要的子类,具有检错纠错能力强,实现方便等特点.它具有严密的代数学理论,封闭性与循环性.(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. 理解循环编码的概念和原理;2. 掌握循环编码的实现方法;3. 通过实验验证循环编码的效率和性能;4. 分析循环编码在实际应用中的优势和局限性。

二、实验原理循环编码是一种将数据序列转换为循环序列的编码方法。

在循环编码中,数据序列按照一定的规则进行排列,形成一个循环序列。

循环序列具有以下特点:1. 循环性:序列中的元素按照一定的顺序排列,形成一个循环;2. 压缩性:循环序列可以减少数据序列中的冗余信息,提高数据传输效率;3. 可逆性:循环编码具有可逆性,可以通过解码算法将循环序列还原为原始数据序列。

循环编码的基本原理如下:1. 对数据序列进行预处理,提取出数据序列中的关键信息;2. 将提取出的关键信息按照一定的规则进行排列,形成一个循环序列;3. 对循环序列进行编码,生成编码后的数据序列;4. 通过解码算法将编码后的数据序列还原为原始数据序列。

三、实验设备与软件1. 实验设备:计算机、编程软件(如C++、Python等);2. 实验软件:循环编码算法实现代码。

四、实验步骤1. 编写循环编码算法实现代码;2. 生成测试数据序列;3. 对测试数据序列进行循环编码;4. 计算编码后的数据序列的压缩比;5. 分析循环编码的性能;6. 编写实验报告。

五、实验结果与分析1. 编写循环编码算法实现代码以下是一个简单的循环编码算法实现代码示例(以Python为例):```pythondef encode(data):length = len(data)for i in range(length):for j in range(i+1, length):if data[i] > data[j]:data[i], data[j] = data[j], data[i]return datadef decode(encoded_data):return encoded_data[::-1]# 测试数据序列data = [5, 2, 9, 1, 5, 6]# 循环编码encoded_data = encode(data)# 解码decoded_data = decode(encoded_data)# 输出结果print("Original data:", data)print("Encoded data:", encoded_data)print("Decoded data:", decoded_data)```2. 计算编码后的数据序列的压缩比在本实验中,我们以数据序列的长度作为压缩比的参考指标。

循环码实验报告

循环码实验报告

一、实验内容:(15,6)循环码实验二、实验过程:1、先下载运行插件RunTimeEngine.exe;2、解压(15,6)循环码实验运行即可。

3、编解码分为两个部分(一)编码1.1、输入时钟频率,默认值:2.048mHZ。

1.2、输入信息码元,灯为绿色为1,黑色为01.3、生成多项式默认值为X^9+X^6+X^5+X^4+X+1。

1.4、观察编码输出结果,注意区分信息位,校验位。

(二)译码2.1、该实验模拟信道加扰,人为加入错误码元。

2.2、在任意位置加入一位错误,观察译码输出。

2.3、在任意位置加入两位错误,观察译码输出。

2.4、在任意位置加入三位或三位以上错码,观察译码输出。

2.5、框图右下角的指示灯为绿色,表示能够正确译码;框图右下角的指示灯为红色,表示不能保证正确译码。

三、实验要求及结果:4.1、设置不同的信息码元(至少设置3组),观察编码结果。

在报告中标注信息位与校验位。

第一组码:第二组码:第三组码:4.2、在任意位置分别加入1、2、3、4位以上错码,观察译码结果。

在报告中标注错码位。

一个错码:两个错码:三个错码:四个错码:4.3、在实验报告中说明循环码的编码和译码原理,以及其纠错能力。

循环码编码原理(1) 有信息码构成信息多项式m(x)= +……+其中高幂次为k-1;(2) 用乘以信息多项式m(x),得到的 m(x)最高幂次为n-1,该过程相当于把信息吗(,,……,,)移位到了码字德前k个信息位,其后是r个全为零的监督位;(3) 用g(x)除 m(x)得到余式r(x),其次数必小于g(x)的次数,即小于(n-k),将此r(x)加于信息位后做监督位,即将r(x)于 m(x)相加,得到的多项式必为一码多项式。

当码字c通过噪声信道传送时,会受到干扰而产生错误。

如果信道产生的错误图样是e,译码器收到的n重接受矢量是y,则表示为: y=c+e (13)上式也可以写成多项式形式:y(x)=c(x)+e(x) (14)译码器的任务就是从y(x)中得到,然后求的估值码字= y(x)+ (15)并从中得到信息组。

循环码实验报告

循环码实验报告
如果g(x)是一个n – k = r次多项式,并且是xn+1的一个因式,则g(x)生成一( n , k )循环码。
任何(n,k)循环码的全体码字都是由一个n-k=r次多项式生成。
生成矩阵
xn+1=g(x
可见H矩阵可由下述的多项式矩阵的系数构成,即由h(x)的反多项式h*(x)循环移位得到r组互不相关的多项式系数矢量构成。称H为循环码的一致监督矩阵
int enE[11][11];
//得到7位所有源码
for(i=0;i<128;i++){
for(j=0;j<7;j++)total[i][j]=temp[j];
s=temp[0]*64+temp[1]*32+temp[2]*16+temp[3]*8+temp[4]*4+temp[5]*2+temp[6]*1;//转换为10进制
基于错误图样识别的译码器称,它的原理图如图8-7所示。错误图样识别器是一个具有(n-k)个输入端的逻辑电路,原则上可以采用查表的方法,根据校正子找到错误图样,利用循环码的上述特性可以简化识别电路。梅吉特译码器特别适合于纠正2个以下的随机独立错误。
梅基特译码器
5、实验代码
#include<stdio.h>
for(j=0;j<11;j++){
if(j!=(10-i)) E[i][j]=0;
}
}
/**加到源码中**/
for(k=0;k<11;k++){
for(i=0;i<64;i++){
for(j=0;j<11;j++){

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

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

(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)的逆多项式。

循环码——精选推荐

循环码——精选推荐

循环码实验六循环码的软件编、译码实验⼀、实验⽬的(1)通过实验了解循环码的⼯作原理。

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

(3)了解码距d与纠、检错能⼒之间的关系。

(4)分析(7.3)循环码的纠错能⼒。

⼆、实验要求⽤你熟悉的某种计算机⾼级语⾔或单⽚机汇编语⾔,编制⼀(7,3)循环码的编、译码程序,并改变接受序列R(x)和错误图样E(x),考查纠错能⼒情况。

设(7,3)循环码的⽣成多项式为:g(x)=x4+x3+x2+1 对应(11101)(1)按编、译码计算程序框图编写编、译码程序(2)计算出所有的码字集合,可纠的错误图样E(x)表和对应的错误伴随式表。

(3)考查和分析该码检、纠⼀、⼆位错误的能⼒情况。

(4)整理好所有的程序清单,变量名尽量⽤程序框图所给名称,并作注释。

(5) 出⽰软件报告.三、实验设计原理循环码是⼀类很重要的线性分组码纠错码类,循环码的主要优点是编、译码器较简单,编码和译码能⽤同样的反馈移存器重构,在多余度相同的条件下检测能⼒较强,不检测的错误概率随多余度增加按指数下降。

另外由于循环码具有特殊的代数结构,使得循环码的编、译码电路易于在微机上通过算法软件实现。

1、循环码编码原理设有⼀(n,k)循环码,码字C=[C n-1…C r C r-1…C0],其中r=n-k。

码字多项式为:C (x ) = C n-1x n-1+ C n-2x n-2+…+C1x+C0。

码字的⽣成多项式为:g(x)= g r-1x r-1+g r-2x r-2+…+g1x+g0待编码的信息多项式为:m(x)=m K-1x K-1+…+m0x n-k.m(x)=C n-1x n-1+…+C n-K x n-K 对于系统码有:C n-1=m K-1,C n-2=m K-2,…C n-K=C r=m0设监督多项式为:r(x)=C r-1X r-1+…+C1x+C0根据循环码的定义,则有C(x)=x n-K m(x)+r(x)=q(x).g(x)X n-K m(x)=q(x).g(x)+r(x)r(x)=Rg(x)[x n-K m(x)]即监督多项式是将多项式x n-K m(x)除以g(x)所得的余式。

循环码matlab实验报告

循环码matlab实验报告

信道编码仿真作业关于(15,7) 循环码实验一、实验原理1. (15,7)循环码码长 n=15 ,信息位 k=7 的循环码。

2. 生成多项式生成多项式:()1111n k n k n k g x x g x g x -----=++++对于(15,7)循环码,可用的码多项式共有3个: 87641()1g x x x x x =++++8422()1g x x x x x =++++875433()1g x x x x x x x =++++++编写的matlab 程序子函数 g=gx(n,k) 可以生成任意 (n,k) 循环码的所有生成多项式。

程序核心算法是()|1n g x x -遍历查找符合的()g x ,其中二元域的除法用的是通信工具箱中的 gfdeconv() 函数。

本实验最后用的是8764()1g x x x x x =++++。

3. 生成矩阵与校验矩阵程序用到的标准生成矩阵原理与方法如下:11220(())(())()[](())n k n k K n k x r x x r x G x I P x r x -----⎡⎤+-⎢⎥+-⎢⎥==⎢⎥⎢⎥⎢⎥+-⎣⎦其中()()()n i k i g x r x rem x --=。

则校验矩阵为:[]T n k H P I -=求余同样用到了gfdeconv() 函数。

4.最小距离与纠错能力通过校验矩阵H分析最小距离d,程序的算法是:取遍H的任意2列相加,若结果为0,则d=2;否则取遍H的任意3列相加,若结果为0,则d=3;以此类推,直到找到最小的d,使存在H的某d列相加结果为0。

5.编码器r级编码器采用g(x)k级编码器采用h(x).具体算法见之后的程序说明6. 译码器译码器为能纠正两个错误的梅吉特电路。

我分别编写了了2n 拍和3n 拍的译码电路,具体验证了修正线的作用。

7. 调制本实验所谓的调制只是将 1 变换为 -1,将 0 变换为 1。

循环码编译码实验

循环码编译码实验

SE•HT
1 1 1 0 0 1 0 0 0 0 0 0 0 0 1
CP
K1
K2
译码输入R(x)
S0
S1
S2
S3
S4
S5
除法电路—求伴随式
S6
S7
S8
正交网络
发生错码个数 发生0个错码
错码位置
A3 A2 A1 A0中“1”的个数 A3 A2 A1 A0全为0
发生1个错码
错码在正交位(e14)上
A3 A2 A1 A0全为1,即有四个“1”

错码在非正交位上
A3 A2 A1 A0中只有一个“1”

发生2个错码
其中一个错码在正交位(e14)上 A3 A2 A1 A0中有三个“1”

两个错码均在非正交位上
A3 A2 A1 A0中有两个“1”或0个“1”

发生3个错码
超出纠错范围,不研究

结论:当三个或以上的正交方程为1时,正交位有 错码,需要纠错;当三个以下的正交方程为1时, 正交位无错或超出纠错范围,正交位无需纠错。
就可以构造一个除法电路,把接收码组编除辑以课件 ,如果余式为0即可判断接收到的码
字没有错码,否则有错码。
(三)码距与码检错纠错能力的关系
码距:两个码组对应位上数字的不同位的个数称ng)距离。 如0100110与 0010010的码距为3。
最小码距d:码组集合中非零码组的最小重量。
编辑课件
0 1
A3 A2 A1
大数逻辑 判决电路 6位缓冲寄存器
A3 A2 A0
A3 A1 A0
A2 A1 A0
译码输出^C(x)
四、实验内容 (全部做,不记录波形,只记录编码结果)

循环码的编译码软件设计

循环码的编译码软件设计

******************实践教学*******************兰州理工大学计算机与通信学院2012年春季学期《计算机通信》课程设计循环码是线性分组码的一种,它具有线性分组码的一般性质,当然它还具有循环性。

循环码的编码和解码设备都不太复杂,且检(纠)错能力较强。

本说明书介绍了(7,4)循环码的编码与译码原理,用C语言编程实现其编码与译码功能。

通过C语言平台运行所编写的程序,输入任意的数字信息序列,得出了编码结果。

另外还分别在无差错和部分差错的情况下进行了译码。

关键词:循环码;编码与译码;C语言随着时代的变迁,信息潮流的冲击,通信越来越被人们重视。

伴随信息时代的到来,计算机通信技术也在不断地发展。

目前,计算机通信技术已广泛应用于办公自动化、企业管理与生产过程控制、金融与商业电子化、军事、科研、教育信息服务、医疗卫生等领域。

Internet技术发展迅速,全球性信息高速公路建设的浪潮正在兴起。

人们已经意识到:计算机网络正在改变着人们的工作方式与生活方式,网络与通信技术已成为影响一个国家与地区经济、科学与文化发展的重要因素之一。

现代社会发展越来越快,这要求通信系统功能越来越强,可靠性越来越高,因此通信系统的构成就越来越复杂。

在计算机通信信息码中循环码是线性分组码的一个重要子集,它的循环码的编码和译码电路比较简单,纠错能力也较强,是目前研究得最成熟的一类码。

因此本文运用C语言对(7,4)循环码的编码与译码进行编程及运行仿真。

C语言是一种结构化语言。

它层次清晰,便于按模块化方式组织程序,易于调试和维护。

C语言的表现能力和处理能力极强。

它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。

它还可以直接访问内存的物理地址,进行位(bit)一级的操作。

由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。

既可用于系统软件的开发,也适合于应用软件的开发。

此外,C语言还具有效率高,可移植性强等特点。

循环码实验报告

循环码实验报告

课程名称:信息论与编码课程设计题目:循环码的编码和译码程序设计指导教师:系别:专业:学号:姓名:合作者完成时间:成绩:评阅人:一、实验目的: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)循环码是线性分组码的一种,所以它具有线性分组的码的一般特性,且具有循环性,纠错能力强。

2)循环码是一种无权码,循环码编排的特点为相邻的两个数码之间符合卡诺中的邻接条件,即相邻数码间只有一位码元不同,因此它具有一个很好的优点是它满足邻接条件,没有瞬时错误(在数码变换过程中,在速度上会有快有慢,中间经过其他一些数码形式,即为瞬时错误)。

计算机通信课设循环码的编码与译码

计算机通信课设循环码的编码与译码

计算机通信课设循环码的编码与译码实践教学******************兰州理工大学运算机与通信学院2020年秋季学期《运算机通信》课程设计题目:(15,7)循环码的编译码方法专业班级:通信工程(1)班姓名:学号:指导教师:成绩:摘要本课程设计要紧是通过分析查阅(n,k)循环码的编码方法,在MATLAB环境下设计了对(15,7)循环码编译码方法的仿真,第一设计了对任意(15,7)循环码的编译码,然后使一个通过(15,7)循环码编码的信号序列通过高斯信道,再对译码后的序列进行误码分析,加深对循环码的了解。

关键词:(15,7)循环码;高斯噪声;matlab目录前言 (1)一、循环码编码 (2)1.1信道编码理论 (2)1.1.1信道编码的目的 (2)1.1.2信道编码的实质 (2)1.1.3 信道编码公式 (2)1.1.4线性分组码的编译码原理 (3)1.2 循环码介绍 (4)1.2.1 循环码定义 (4)1.2.2 循环码的特点 (4)1.2.3 (n.k)循环码的码多项式表示 (5)1.2.4 (n,k)循环码的生成多项式与生成矩阵 (5)1.2.5 (n,k)循环码的校验多项式与一致校验矩阵 (7)1.3 循环码编码原理 (9)1.4 循环码的最小码距 (9)1.5 循环码的纠检错能力 (10)1.6 循环码的纠错译码原理 (11)二、(15,7)循环码程序设计 (13)2.1(15,7)循环码仿真模块 (13)2.2(15,7)循环码译码仿真模块 (14)2.3(15,7)循环码在高斯信道下的误码性能仿真模块 (14)三、设计与仿真 (15)3.1仿真设备 (15)3.2 (15,7)循环码的编码 (15)3.3 (15,7)循环码的译码 (15)3.4 (15,7)循环码在高斯信道下的误码性能 (17)总结 (18)参考文献 (19)附录 (20)致谢 (26)前言随着社会经济的迅速进展和科学技术的全面进步,运算机事业的飞速进展,以运算机与通信技术为基础的信息系统正处于蓬勃进展的时期。

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

实验六循环码的软件编、译码实验一、实验目的(1)通过实验了解循环码的工作原理。

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

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

(4)分析(7.3)循环码的纠错能力。

二、实验要求用你熟悉的某种计算机高级语言或单片机汇编语言,编制一(7,3)循环码的编、译码程序,并改变接受序列R(x)和错误图样E(x),考查纠错能力情况。

设(7,3)循环码的生成多项式为:g(x)=x4+x3+x2+1 对应(11101)(1)按编、译码计算程序框图编写编、译码程序(2)计算出所有的码字集合,可纠的错误图样E(x)表和对应的错误伴随式表。

(3)考查和分析该码检、纠一、二位错误的能力情况。

(4)整理好所有的程序清单,变量名尽量用程序框图所给名称,并作注释。

(5) 出示软件报告.三、实验设计原理循环码是一类很重要的线性分组码纠错码类,循环码的主要优点是编、译码器较简单,编码和译码能用同样的反馈移存器重构,在多余度相同的条件下检测能力较强,不检测的错误概率随多余度增加按指数下降。

另外由于循环码具有特殊的代数结构,使得循环码的编、译码电路易于在微机上通过算法软件实现。

1、循环码编码原理设有一(n,k)循环码,码字C=[C n-1…C r C r-1…C0],其中r=n-k。

码字多项式为:C (x ) = C n-1x n-1+ C n-2x n-2+… +C1x+C0。

码字的生成多项式为: g(x)= g r-1x r-1+g r-2x r-2+…+g1x+g0待编码的信息多项式为:m(x)=m K-1x K-1+…+m0x n-k.m(x)=C n-1x n-1+…+C n-K x n-K对于系统码有:C n-1=m K-1,C n-2=m K-2,…C n-K=C r=m0设监督多项式为:r(x)=C r-1X r-1+…+C1x+C0根据循环码的定义,则有C(x)=x n-K m(x)+r(x)=q(x).g(x)X n-K m(x)=q(x).g(x)+r(x)r(x)=Rg(x)[x n-K m(x)]即监督多项式是将多项式x n-K m(x)除以g(x)所得的余式。

编码过程就是如何根据生成多项式完成除法运算求取监督多项式的过程。

设循环码(7.3)码的字多项式为:C(x)=C6x6+C5x5+C4x4+C3x3+C2x2+C1x+C0 (n=7)生成多项式为: g(x)=x4+x2+x+1信息多项式为: m(x)=m2x2+m1x+m0 (k=3),设: m(x)=x2+x监督多项式为: r(x)= C r-1X r-1+…+C1x+C0根据循环码的定义:生成多项式的倍式均是码字,编码实际上是做x n-K m(x)除以g(x)所得的余式运算求得r(x)。

编码程序框图见图1,二进制多项式除法示意图见图2图1 编码计算程序框图111 ...商数┌─────g(x): 10111 | 1100000 .............x r m(x) + 10111 ................第一步─────11110+ 10111 ...............第二步────10010+ 10111 ...........第三步────101 ..........余式:x2+1图2 二进制多项式除法示意图编码步骤:(1)n-k=r=7-3=4,用x4乘m(x)•的运算实际上相当于在信息码110后附上4个0,变为1100000(2)用x r m(x)=x4(x2+x)=x6+x5除以g(x),如图1所示,得到监督余式r(x)=x2+1。

(3)编出相应的发送码字为:C(x)=x r m(x)+r(x)C=1100000+101=1100101(4)按上述步骤,将得到下述码表:2、译码原理设R(x)为接收码字多项式,E(x)为错误图样多项式,S(x)为伴随式,则根据循环码的性质有:S(x)=Rg(x)[R(x)]=Rg(x)[E(x)]当R(x)=C(x)时,有E(x)=0,S(x)=0当R(x)不等于C(x)时,有E(x)为非0,S(x)为非0译码过程如下:计算每一种可能被纠的错误图样E(x)的伴随式,S i(x)=Rg(x)[E(x)]将其作作为本地数据表存储好。

根据已接收码字多项式R(x),计算相应的伴随式:S(x)=Rg(x)[R(x)]将实际接收码字求出的S(x)与本地存储的各S i(x)相比较,查出两者相等的那个唯一匹配的S i(x),找出并得到相应的错误图样E(x)。

纠错:C(x)=R(x)+E(x)否则由S(x)找不出唯一匹配的S i(x),则报出错信息,表示出现不可纠错的错误图样,即码元出错的个数超出该循环码的纠错能力。

译码流程图3所示:图3 译码程序流程图四、实验代码/*循环码编译码的实现(7,3) */#include<stdio.h>#include<string.h>#include<iostream>#define n 7#define k 3#define g 23 //10111using namespace std;int m,d,G,c,B,r;int E[20],S[20];int code() //编码{int i,len,re;char str[32];printf("请输入待编码的三位码字:(以二进制的形式,中间无空格!)\n"); scanf("%s",str);len=strlen(str);m=0;for(i=0;i<len;i++)m+=(str[i]-'0')*(1<<(len-1-i));c=(m<<(n-k));d=c;G=(g<<(k-1));B=n-1;while(B>=(n-k)){if((c&(1<<B))==(1<<B))c=(c^G);G=(G>>1);B--;}d=d^c;printf("编码后的输出码字为:\n");for(i=6;i>=0;i--)if((d&(1<<i))==(1<<i))printf("1");else printf("0");printf("\n");return d;}void decode( ) //译码{int i,j,flag;int len;char str[32];/*打错误图样和其伴随式的对照表*/ for(i=0;i<n;i++){E[i]=(1<<i);//printf("E[i]=%d\n",E[i]);G=(g<<(k-1));B=n-1;c=E[i];while(B>=(n-k)){if((c&(1<<B))==(1<<B))c=(c^G);G=(G>>1);B--;}S[i]=c;}/*输出这个表*/printf("\n\n打出的对照表如下:\n\n");printf("错误图样E(x)\t伴随式S[x]\n");for(i=0;i<n;i++){for(j=6;j>=0;j--)if((E[i]&(1<<j))==(1<<j)) printf("1");else printf("0");printf("\t\t");for(j=6;j>=0;j--)if((S[i]&(1<<j))==(1<<j)) printf("1");else printf("0");printf("\n");}/*下面正式译码*/printf("\n请输入待译码的七位码字:(以二进制的形式,中间无空格!)\n"); scanf("%s",str);len=strlen(str);m=0;for(i=0;i<len;i++)m+=(str[i]-'0')*(1<<(len-1-i));G=(g<<(k-1));c=m;while(B>=(n-k)){if((c&(1<<B))==(1<<B))c=(c^G);G=(G>>1);B--;}flag=0;if(c==0) flag=1;else{for(i=0;i<n;i++)if(c==S[i]) {m=m^E[i];flag=1; break;}}if(flag==0) printf("遇到了不能纠正的错误!\n"); else{printf("译码后的输出是:\n");for(j=6;j>=4;j--)if((m&(1<<j))==(1<<j)) printf("1");else printf("0");printf("\n");}}int main(){code();decode( );system("pause"); return 0;}五、实验结果。

相关文档
最新文档