信息论实验报告

更新时间:2024-06-09 21:24:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Harbin Institute of Technology

与 编 码 理实 验 报 告 设计题目: 循环码编、译码器实验 院 系: 电子与信息工程学院 班 级: 通信一班 姓 名: 周 蕾 学 号: 14S105045 序 号: 41 指导教师: 石硕 报告时间: 2014年12月20日

哈尔滨工业大学

一、设计题目、内容

(1)利用(7,4)系统循环码的生成多项式为:g(x)=x3+x+1,请设计该循环码的编码器;

(2)随机产生重量为0或1的八种错误图样中的一种,得到实际接收码字。

(3)根据接收到的码字进行译码,

(3.1)校验子多项式与错误图样多项式的对应关系表:

S(x) E(x) 0 0 1 1 x x x2 x2 x+1 x3 x2+x x4 x2+x+1 x5 x2+1 x6 (3.2)梅吉特译码电路:

1

二、设计工具

MATLAB的GUI界面。 三、设计过程与流程图

3.1循环码编码 3.1.1编码过程

对于(7,4)循环码,生成多项式为g?x??x3?x?1。编码过程主要分为三步:

(1)用xn-k乘上m(x);

xn?km(x)r(x)(2)用g(x)除xm(x),得到模g(x)的余式r(x),即 ?q(x)?g(x) g(x)n-k

(3)c(x)=xn-km(x)+r(x)为系统循环码的码字多项式。 3.1.2流程图

(7,4)循环码编码流程图如下:

2

输入信息位 m(x) g(x)除xn-km(x),得到模g(x)的余式r(x) 系统循环码c(x)=m(x) 左移三位+r(x) 输出循环吗c 图3-1 (7,4)循环码编码流程图

3.2、校验子译码 3.2.1译码过程

(1)首先根据接收到的码字与生成多项式进行二进制除法,得到校验子;

(2)根据校验子与错误图样的一一对应关系,确定错误图样。校验子多项式与错误图样多项式的对应关系表:

S(x) 0 1 x x2 x+1 x2+x x2+x+1 x2+1

E(x) 0 1 x x2 x3 x4 x5 x6 3

图3-2 校验子多项式与错误图样多项式的对应关系表

(3)根据接收码字R与错误图样E,得到译码之后的码字。 3.2.2译码流程图

输入接收码字R根据生成多项式,求出校验子S根据校验子S,得到错误图样E接收码字R+错误图样E,得到译码C输出译码码字C

图3-3 校验子译码流程图

3.3、梅吉特译码 3.3.1译码原理

梅吉特译码器的结构如图3-4所示。以r6位有错为例,详细介绍该电路的译码过程:

开始译码时门打开,移位寄存器内全0.收到的码字多项式R(x)由高次到低次分别输入到七级缓存器和除法电路,7次移位后,缓存

4

器存入整个码字,除法电路[S(x)?E(x)/g(x),E(x)?x6]得到校验子

S0?[s2,s1,s0]。这时门关上,进行译码。

如果S0(x)?x6?x2?1[modg(x)],这时[101]识别电路输出为1,表明

r6位有错。这时译码器继续移位,通过[101]识别电路可以将r6位的错

误纠正。在纠错的同时,[101]识别电路的输出又反馈到除法电路的输入端,以消除错误码元对除法电路的下一个校验子计算的影响。本电路中,第7次移位后产生了校验子S0,第8次移位时对r6进行纠正,同时将[101]识别电路的输出的1输入到输入端,结果使除法电路的寄存器状态为[000],消除了e6的影响。

由于循环闭合性,对于其它错误图样,该电路同样可以纠正。

图3-4 梅吉特译码器原理图

3.3.2梅吉特译码流程

5

输入接收码字Ri=0i=i+1i<=6否m=0m<=6是是校验子是否为101否是移位寄存器移位寄存,各寄存器更新状态校验子标志位s=1校验子标志位s=0否输入码字的第i位与s模2加得到输出码字的第i位; 寄存器D0、D1、D2相应更新m=m+1输出译码码字C

图3-5 梅吉特译码流程图

6

3.4程序整体流程图

图3-6 程序总体流程图

四、程序代码及注释

4.1编码程序

function C=Encode(M)

7

gx=[1,0,1,1]; %生成多项式x^3+x+1 xr=[1,0,0,0]; %x^r=x^3

xrmx=mod(conv(M,xr),2); %信息码字与x^r相乘 [q,r]=deconv(xrmx,gx); %模g(x) q=mod(q,2); r=mod(r,2); C=xrmx+r;

4.2检查输入是否合法程序

function M=Check(m,number)

if number==4 %检测输入码字的位数,若为4,则合法 %将输入的数据的单独位提取出来 m3=uint8(mod(m,10000)/1000); m2=uint8(mod(m,1000)/100); m1=uint8(mod(m,100)/10); m0=uint8(mod(m,10)/1); M=[m3 m2 m1 m0];

%判断输入的数据是否合法,即是否只有0和1

if((m0==0|m0==1)&(m1==0|m1==1)&(m2==0|m2==1)&(m3==0|m3==1))

m4=0; %m4为附加位,用来表示输入的数据是否合法,0表示合法 else

M=zeros(1,4);

m4=1; %m4=1,表示码字不是由0,1组成的四位码字 end else

M=zeros(1,4);

m4=2; %m4=2,表示输入的不是四位码字 end

M=[M m4];

4.3产生错误图样接收程序

function R=Recieve(C) E=[0 0 0 0 0 0 0; 1 0 0 0 0 0 0; 0 1 0 0 0 0 0; 0 0 1 0 0 0 0; 0 0 0 1 0 0 0; 0 0 0 0 1 0 0; 0 0 0 0 0 1 0;

0 0 0 0 0 0 1]; %错误图样矩阵 i=unidrnd(8); %随机生成整数1~8

8

E1=E(i,:); %取出一个错误图样 R=mod((C+E1),2);

4.4 校验子译码程序

function C=Decode1(R) %校验子译码程序

gx=[1,0,1,1]; %生成多项式x^3+x+1 [q,s]=deconv(R,gx); %模g(x)

q=mod(q,2); s=mod(s,2);

s=[s(5) s(6) s(7)]; %校验子 if s==[0,0,0]

E=[0,0,0,0,0,0,0]; elseif s==[0,0,1]

E=[0,0,0,0,0,0,1]; elseif s==[0,1,0]

E=[0,0,0,0,0,1,0]; elseif s==[1,0,0]

E=[0,0,0,0,1,0,0]; elseif s==[0,1,1]

E=[0,0,0,1,0,0,0]; elseif s==[1,1,0]

E=[0,0,1,0,0,0,0]; elseif s==[1,1,1,]

E=[0,1,0,0,0,0,0]; elseif s==[1,0,1]

E=[1,0,0,0,0,0,0]; end

C=mod((R+E),2);

4.5 梅吉特译码程序

function C=Decode(R) C=zeros(1,7);

D00=0;D10=0;D20=0; for i=1:14

if i<=7 D01=xor(D20,R(i)); D11=xor(D00,D20); D21=D10;

S1=D01&(~D11)&D21; else

D01=xor(D20,S0);

%梅吉特译码程序 %初始化寄存器的状态 %接收码字依次输入寄存器

%当前寄存器的状态,xor异或,相当于模2加法 1检测电路的输出 9

D11=xor(D00,D20); D21=D10;

C(i-7)=xor(S0,R(i-7)); %进行纠错译码输出 S1=D01&(~D11)&D21; end

D00=D01; D10=D11; D20=D21; S0=S1;

end %由于循环闭合性,所有1位错误都可以用101电路纠错

五、运行方法及运行结果截图

双击cc_decode程序运行。出现下图。

图5-1 程序初始界面

按要求输入四位信息码字,依次点击“编码”、“收码”、“校验子译码”、“梅吉特译码”,得到相应结果。清空键可以清空已经得到的结果。

10

以输入“1100”为例,程序运行结果如下:

如果输入的不是2进制码元或者长度不是四位,则程序报错:

六、实验心得

通过这次实验,我了解了梅吉特译码电路的原理及实现译码的步骤,初步掌握了CUI界面编程的方法以及将其转化成程序的方法。虽然许多东西从头学起很辛苦,但也收获不少。

11

本文来源:https://www.bwwdw.com/article/mhw6.html

Top