lab的(7_4)循环码和(7_4)汉明码的编程设计.docx

上传人:b****1 文档编号:169520 上传时间:2022-10-05 格式:DOCX 页数:15 大小:51.84KB
下载 相关 举报
lab的(7_4)循环码和(7_4)汉明码的编程设计.docx_第1页
第1页 / 共15页
lab的(7_4)循环码和(7_4)汉明码的编程设计.docx_第2页
第2页 / 共15页
lab的(7_4)循环码和(7_4)汉明码的编程设计.docx_第3页
第3页 / 共15页
lab的(7_4)循环码和(7_4)汉明码的编程设计.docx_第4页
第4页 / 共15页
lab的(7_4)循环码和(7_4)汉明码的编程设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

lab的(7_4)循环码和(7_4)汉明码的编程设计.docx

《lab的(7_4)循环码和(7_4)汉明码的编程设计.docx》由会员分享,可在线阅读,更多相关《lab的(7_4)循环码和(7_4)汉明码的编程设计.docx(15页珍藏版)》请在冰豆网上搜索。

lab的(7_4)循环码和(7_4)汉明码的编程设计.docx

.

实验设计

实验一:

(7,4)循环码的编码与译码

1.实验编码原理:

根据循环码的代数性质建立系统编码的过程,可以把消息矢量用如下多项式表示:

.

m(x)=m

xk-1+m

xk-2+...+mx+m

k-1 k-2 1 0

要编码成系统循环码形式,把消息比特移入码字寄存器的最右边k位,而把监

督比特加在最左边的n-k个中,则要用xn-k乘以m(x)得到xn-k

m(x)=

mk-1

xn-1+m



k-2

xn-2+...+mxn-k+1+m

xn-k

1

1

0

0

xn-k

m(x)=q(x)g(x)+p(x),其中p(x)可以表示为

1

1

0

0

p(x)=

pn-k-1

xn-k-1+...+px+p

,则p(x)+

xn-k

m(x)

= mk-1

xn-1+m



k-2

xn-2+...+mxn-k+1+m

xn-k+

pn-k-1

xn-k-1+...+px+p

另U(x)= p(x)+

xn-k

m(x),则U=(p0,p1,p2,···,pn-k-1,m0

,m1,···,mk-1)。

本实验根据以上原理,用matlab实现书上例6.8系统形式的循环码,生成

多项式为g(x)=

1+x+x3

2.实验译码原理:

译码的实验原理g(x)= ,在(n,k)循环码中,

1+x+x3

由于g(x)能除尽,因此xn+1可分解成g(x)和其他因式的乘积,记为

xn+1=

g(x)h(x)

即可写成



h(x)=



xn+1



g(x)



即h(x)=



x4+x2+x+1

h*(x)

x4+x3+x+1

h*(x)

则 = ,其中 式h(x)的逆多项式。

监督矩阵多项式可表示为

éx2h*(x)ù

ê

ú

H(x)=êxh*(x)ú

ë

û

êh*(x)ú

3.(7,4)循环码的编码(4位)的程序:

clear;clc;

a=input('请输入消息矢量:

');

%高次项系数在前的生成多项式Gx=[1011];

%将数组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校正fori=1:

7

ifrem(abs(b(i)),2)==0b(i)=0;end

end

fori=1:

7

ifrem(abs(b(i)),2)==1b(i)=1;end

end

disp('输入序列:

');a

disp('编码输出序列:

');b

程序运行结果为:

改变输入序列

运行结果的编码如下:

序号

输入序列

输出序列

序号

输入序列

输出序列

1

0000

0000000

9

1000

1101000

2

0001

1010001

10

1001

0111001

3

0010

1110010

11

1010

0011010

4

0011

0100011

12

1011

1001011

5

0100

0110100

13

1100

1011100

6

0101

1100101

14

1101

0001101

7

0110

1000110

15

1110

0101110

8

0111

0010111

16

1111

1111111

4.相对应的译码和纠错(7位)程序:

clear;

clc;

r=[1001111];h=[1,0,0;1,1,0;1,1,1;0,1,1;1,0,1;0,1,0;0,0,1];

b=flipud(h);s=r*b;

fori=1:

3

ifrem(abs(s(i)),2)==0s(i)=0;end

end

fori=1:

3

ifrem(abs(s(i)),2)==1s(i)=1;end

end



ifs==[000]

e=[0000000];

elseifs==[100]

e=[0000001];

elseifs==[110]

e=[0000010];

elseifs==[111]

e=[0000100];

elseifs==[011]

e=[0001000];

elseifs==[101]

e=[0010000];

elseifs==[010]

e=[0100000];

elses==[001]

e=[1000000];

endu=r+e;fori=1:

7

ifrem(abs(u(i)),2)==0u(i)=0;end

end

fori=1:

7

ifrem(abs(u(i)),2)==1u(i)=1;end

endData=zeros(1,4);

Data

(1)=u(4);

Data

(2)=u(5);

Data(3)=u(6);

Data(4)=u(7);

ife==[0000000]

disp('没有错误:

')k=0,else

disp('第几位错误:

')k=find(e)

;end

disp('接收码字')r

disp('译码输出序列:

')

Data

第几位错误:

k=5

接收码字

r=1 0 0 1 1 1 1

译码输出序列:

Data=1 0 1 1

以上编码有个缺点,就是它只能对一个消息矢量(4位)进行编码,我又在这个基础上编写了一个可以同时对位数是4的倍数的消息矢量进行编码。

5.多位循环码(4的倍数)的编码程序如下:

clear;

clc;

a=[1 1 0 0 1 0 1 1];

[X,N]=size(a);

%将信息码分为M帧,1帧4个信息码M=ceil(N/4);

d=zeros(1,4);b=zeros(1,7*M);Data=zeros(1,7);fork=1:

M

forj=1:

4d(j)=a(j+(k-1)*4);end

%生成多项式Gx=[1011];

Data

(1)=d(4);

Data

(2)=d(3);

Data(3)=d

(2);

Data(4)=d

(1);

%Data除以Gx得到余数Rx

[Qx,Rx]=deconv(Data,Gx);e=Rx+Data;

b(7*k-6:

7*k)=e(1:

7);

c=b(1+(k-1)*7);

b(1+(k-1)*7)=b(7+(k-1)*7);b(7+(k-1)*7)=c;

c=b(2+(k-1)*7);

b(2+(k-1)*7)=b(6+(k-1)*7);b(6+(k-1)*7)=c;

c=b(3+(k-1)*7);

b(3+(k-1)*7)=b(5+(k-1)*7);b(5+(k-1)*7)=c;

end

fori=1:

M*7

ifrem(abs(b(i)),2)==0b(i)=0;end

end

fori=1:

M*7

ifrem(abs(b(i)),2)==1b(i)=1;end

end

disp('输入序列:

');

a

disp('编码输出序列:

');b

程序运行结果如下:

输入序列:

a=

1 1 0 0 1 0 1 1

编码输出序列:

b=Columns1through13

1 0 1 1 1 0 0 1 0 0 1 0

1

Column14

1

6.多位译码(7的倍数)纠错程序:

clear;

clc;

r=[10011001001001];

[X,N]=size(r);

%将接收到的码分为M帧,1帧7个信息位M=ceil(N/7);h=[1,0,0;1,1,0;1,1,1;0,1,1;1,0,1;0,1,0;0,0,1];

b=flipud(h);d=zeros(1,7);U=zeros(1,4*M);

Data1=zeros(1,7*M);Data=zeros(1,7*M);fori=1:

M

forj=1:

7

d(j)=r(j+(i-1)*7);ends=d*b;

fork=1:

3

ifrem(abs(s(k)),2)==0s(k)=0;end

end

fork=1:

3

ifrem(abs(s(k)),2)==1s(k)=1;end

end



ifs==[000]

e=[0000000];

elseifs==[100]

e=[0000001];

elseifs==[110]

e=[0000010];

elseifs==[111]

e=[0000100];

elseifs==[011]

e=[0001000];

elseifs==[101]

e=[0010000];

elseifs==[010]

e=[0100000];

elses==[001]

e=[1000000];

endu=d+e;fork=1:

7

ifrem(abs(u(k)),2)==0u(k)=0;end

end

fork=1:

7

ifrem(abs(u(k)),2)==1u(k)=1;end

end

Data(1+7*(i-1))=e

(1);

Data(2+7*(i-1))=e

(2);

Data(3+7*(i-1))=e(3);

Data(4+7*(i-1))=e(4);

Data(5+7*(i-1))=e(5);

Data(6+7*(i-1))=e(6);

Data(7+7*(i-1))=e(7);

U(1+(i-1)*4)=u(4);

U(2+(i-1)*4)=u(5);

U(3+(i-1)*4)=u(6);

U(4+(i-1)*4)=u(7);

end

ifData==Data1

disp('没有错误:

')m=0,else

disp('第几位错误:

')m=find(Data)

;end

disp('接收到的码字:

');r

disp('译码输出序列:

');U

运行结果:

第几位错误:

m=3 13

接收到的码字:

r=Columns1through13

1 0 0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1