循环码编译码实验报告

合集下载

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

循环编译码实验报告

循环编译码实验报告

一、实验目的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. 评估循环编译码的性能:在不同信道条件下,对循环编译码的纠错能力、误码率和抗干扰能力进行评估。

循环码编译码实验报告

循环码编译码实验报告

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

循环码实验报告

循环码实验报告

循环码实验报告循环码实验报告引言:循环码是一种常用的纠错码,具有很好的纠错能力和编码效率。

本实验旨在通过编码和解码实验,深入了解循环码的原理和应用。

一、实验目的通过实验,掌握循环码的编码和解码过程,了解循环码的纠错能力和编码效率。

二、实验原理循环码是一种线性块码,其编码和解码过程基于生成多项式和校验多项式。

生成多项式决定了编码过程,校验多项式用于纠错。

循环码的编码过程是将信息位按照生成多项式进行除法运算,得到余数作为校验位。

解码过程是将接收到的码字进行除法运算,若余数为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%。

这意味着在传输或存储数据时,循环码可以有效地减少数据的长度。

四、实验总结通过本次实验,我们深入了解了循环码的原理、编码和解码过程,并对其性能进行了评估。

实验结果表明,循环码具有较强的纠错能力和高效的编码效率,适用于各种通信和存储场景。

然而,循环码也存在一些限制。

实验2 信道编码----(7,4)循环码

实验2 信道编码----(7,4)循环码

信息论与编码实验报告姓名:学号:院系:班级:指导教师:实验2 信道编码----(7,4)循环码一、实验目的1.掌握循环码的编码原理(生成多项式、校验多项式等)2.掌握VB开发环境的使用(尤其是程序调试技巧)3.掌握VB的编程技巧二、实验环境1.计算机2.Windows 2000 或以上3.VB三、实验内容根据信道编码——循环码的编码原理,制作(7,4)循环码的码字生成器软件。

要求软件有简单的用户界面,当输入信息码字时,软件能够输出相应的循环码字。

实验结果要求:1、g(x)= x3+ x2+1;2、当输入m(x)= x3+x2时电路工作过程中各寄存器的状态。

四、实验原理1、实验原理循环码定义:设CH是一个[n.k]线性分组码,C1是其中的一个码字,若C1的左(右)循环移位得到的n 维向量也是CH中的一个码字,则称CH是循环码。

循环码的生成多项式和生成矩阵:全0码字除外)称为生成多项式,用g(x)表示。

可以证明生成多项式g(x)具有以下特性:(1)g(x)是一个常数项为1的r=n-k次多项式;(2)g(x)是的一个因式;(3)该循环码中其它码多项式都是g(x)的倍式。

为了保证构成的生成矩阵G的各行线性不相关,通常用g(x)来构造生成矩阵,这时,生成矩阵G(x)可以表示成为其中,因此,一旦生成多项式g(x)确定以后,该循环码的生成矩阵就可以确定,进而该循环码的所有码字就可以确定。

显然,上式不符合形式,所以此生成矩阵不是典型形式,不过,可以通过简单的代数变换将它变成典型矩阵。

2、实验方法循环码的编码方法在编码时,首先需要根据给定循环码的参数确定生成多项式g(x),也就是从的因子中选一个(n-k)次多项式作为g(x);然后,利用循环码的编码特点,即所有循环码多项式A(x)都可以被g(x)整除,来定义生成多项式g(x)。

根据上述原理可以得到一个较简单的系统循环码编码方法:设要产生(n,k)循环码,m(x)表示信息多项式,则其次数必小于k,而·m(x)的次数必小于n,用·m(x)除以g(x),可得余数r(x),r(x)的次数必小于(n-k),将r(x)加到信息位后作监督位,就得到了系统循环码。

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

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

%rem_g.x是在实数域中,而rem_g是在二元域中% 输出系统循环码code_out(loop,:) = [code_in_4(loop,:),code_rem(5:n)];endend3.2 产生错误图样模块本模块产生随机产生重量为0或1的八种错误图样中的一种,并得到实际接收码字。

程序流程图如图3所示。

图3 产生随机错误图样流程图产生错误图样源程序如下:%%函数功能:随机产生重量为0或1的八种错误图样中的一种,得到实际接收码字%%时间:2013-11-29function [code_R,error_picture] = error_pattern(code_S)% code_S:本来发送的码字% code_R:实际接收到的码字% error_picture:随机生成的重量为0或1的八种错误图样中的一种n=7;k=4;[L,W]=size(code_S);num=L*W;code_send=reshape(code_S',1,num);code_send_7=(reshape(code_send,n,length(code_send)/n))';%%%将码元变成length(code_in)/n行,n列矩阵for loop=1:length(code_send)/7error=zeros(1,n); %错误图样序列error_place=randi([0,n],1,1); %错误图样位置if (error_place==0)code_R(loop,:)=code_send_7(loop,:);elseerror(8-error_place)=1;for i=1:ncode_temp=mod(code_send_7(loop,i)+error(i),2); %接收码字序列code_R(loop,i) =code_temp;endenderror_picture(loop,:)=error;endend3.3 译码模块学生设计了校验子译码和梅吉特译码两种译码方式,其中校验子译码时校验子多项式与错误图样多项式的对应关系表如下:表1 校验子多项式与错误图样多项式对应关系梅吉特译码电路如下图:图4 梅吉特译码电路图5 校验子译码流程图 图6 梅吉特译码流程图校验子译码源程序如下:%%函数功能:校验子译码 %%时间:2013-11-29function [C_decode_n,C_decode_k] = check(code_R,code_in_L) % code_R :接收码字序列 %code_in_L :信息码元长度 %C_decode_n :译码后的码字序列 %C_decode_k :译码后的信息码元 n=7; k=4;gen = [1 0 1 1]; % 生成多项式向量[L,W]=size(code_R);num=L*W;code_recrive=reshape(code_R',1,num);code_recrive_7=(reshape(code_recrive,n,length(code_recrive)/n))';%%%将码元变成length(code_in)/n行,n 列矩阵for loop=1:length(code_recrive)/7% 在二元域进行运算,必须把信息码字多项式向量和生成多项式向量转到二元域GF(2)上% 函数gf(X,M)用于从向量X生成GF(2^M)上对应的向量R_g = gf(code_recrive_7(loop,:),1);gen_g = gf(gen,1);% 用R_g除以生成多项式g(x)[Q,rem_g] = deconv(R_g,gen_g); % 多项式除法其实就是解卷积运算,得到除法的商式Q,余式rem_gS_rem_2 = rem_g.x; % rem_g.x表示二元域向量rem_g的一个属性,即多项式的系数%rem_g.x是在实数域中,而rem_g是在二元域中L_S_rem_2=length(S_rem_2);%%长度S_rem=S_rem_2(L_S_rem_2)+2*S_rem_2(L_S_rem_2-1)+4*S_rem_2(L_S_rem_2-2);%%2进制转化为10进制error=zeros(1,n);if S_rem==0error=[0 0 0 0 0 0 0];elseif S_rem==1error=[0 0 0 0 0 0 1];elseif S_rem==2error=[0 0 0 0 0 1 0];elseif S_rem==4error=[0 0 0 0 1 0 0];elseif S_rem==3error=[0 0 0 1 0 0 0];elseif S_rem==6error=[0 0 1 0 0 0 0];elseif S_rem==7error=[0 1 0 0 0 0 0];elseif S_rem==5error=[1 0 0 0 0 0 0];endfor i=1:length(error)if error(i)==1E_place=i;%%定位错误的位置code_recrive_7(loop,E_place)=~code_recrive_7(loop,E_place); %错误码字译码endendcode_temp=code_recrive_7(loop,:);% 输出译码C_decode_n(loop,:) =code_temp;C_decode_k0(loop,:) =code_temp(1:k);end% 输出译码% C_decode_n=reshape(C_decode_n0',1,length(code_recrive));C_decode_k1=reshape(C_decode_k0',1,length(code_recrive)/7*4);C_decode_k=C_decode_k1(1:code_in_L);end梅吉特译码源程序如下:%%函数功能:(7,4)系统循环码梅吉特译码%%编程时间:2013-11-29function [C_decode_n,C_decode_k] = encoder(code_R,code_in_L)%%code_R:接收到的码字%%code_in_L:信息码元长度%%C_decode_n:译码之后得到的码字%%C_decode_k:译码之后得到的信息码元n=7;k=4;[L,W]=size(code_R);num=L*W;code_recrive=reshape(code_R',1,num);code_recrive_7=(reshape(code_recrive,n,length(code_recrive)/n))';%%%将码元变成length(code_in)/n行,n 列矩阵for loop=1:length(code_recrive)/7D=[0,0,0];%%开始译码时门打开%%寄存器初始化D=[D0 D1 D2]for i=1:nD_temp(1)=mod(D(3)+code_recrive_7(loop,i),2);D_temp(2)=mod(D(1)+D(3),2);D_temp(3)=D(2);D=D_temp;endfor i=1:n %输入端关闭,移位寄存器中的接收码S=double(D(1)&(~D(2))&D(3)); %模2加后输出,S反馈到D寄存器D_temp(1)=mod(D(3)+S,2);D_temp(2)=mod(D(1)+D(3),2);D_temp(3)=D(2);D=D_temp;code_temp(i)=mod(code_recrive_7(loop,i)+S,2);end% 输出译码C_decode_n(loop,:) =code_temp;C_decode_k0(loop,:) =code_temp(1:k);end% 输出译码% C_decode_n=reshape(C_decode_n0',1,length(code_recrive));C_decode_k1=reshape(C_decode_k0',1,length(code_recrive)/7*4);C_decode_k=C_decode_k1(1:code_in_L);end3.4 BSC信道传输时的译码模块本模块的编程比较简单,主要是调用bsc函数,设置一下错误概率参数p即可,故不在此报告中给出源代码。

相关文档
最新文档