74循环汉明码编码及译码

  • 格式:doc
  • 大小:16.00 KB
  • 文档页数:3

clear all;

close all;

%-------------(7,4)循环汉明码的编码-----------------

n=7;

k=4;

p=cyclpoly(n,k,'all');

[H,G]=cyclgen(n,p(1,:));

Msg=[0 0 0 0;0 0 0 1;0 0 1 0;0 1 0 0;0 1 0 1];

C=rem(Msg*G,2)

M=input('M=');

disp( '输入信源序列: ');

Msg=input('Msg=');

C=rem(Msg*G,2) %编码结果

R=7/4*log2(2) %计算码元信息率

%----------- (7,4)循环码的译码-------------------

M=input('M=');

disp( '输入接收序列: ');

Msg=input('Msg=');

S=mod(Msg*H',2)

for i=1:M

if S(i)==[0 0 0]

disp('接收码元无错');

Rsg=Msg

elseif S(i)==[1 0 0]

disp('监督元a0位错');

if Msg(0)==0

Msg(0)=1;

elseif Msg(0)==1

Msg(0)=0;

end

Rsg=Msg

elseif S(i)==[0 1 0]

disp('监督元a1位错');

if Msg(1)==0

Msg(1)=1;

elseif Msg(1)==1

Msg(1)=0;

end

Rsg=Msg

elseif S(i)==[0 0 1]

disp('监督元a2位错');

if Msg(2)==0 Msg(2)=1;

elseif Msg(2)==1

Msg(2)=0;

end

Rsg=Msg

elseif S(i)==[1 0 1]

disp('信息元第1位错');

if Msg(3)==0

Msg(3)=1;

elseif Msg(3)==1

Msg(3)=0;

end

Rsg=Msg

elseif S(i)==[1 1 1]

disp('信息元第2位错');

if Msg(4)==0

Msg(4)=1;

elseif Msg(4)==1

Msg(4)=0;

end

Rsg=Msg

elseif S(i)==[1 1 0]

disp('信息元第3位错');

if Msg(5)==0

Msg(5)=1;

elseif Msg(5)==1

Msg(5)=0;

end

Rsg=Msg

elseif S(i)==[0 1 1]

disp('信息元第4位错');

if Msg(6)==0

Msg(6)=1;

elseif Msg(6)==1

Msg(6)=0;

end

Rsg=Msg

else

disp('无法纠错');

Rsg=Msg

end

end

H =

1 0 0 1 1 1 0

0 1 0 0 1 1 1

0 0 1 1 1 0 1

G =

1 0 1 1 0 0 0

1 1 1 0 1 0 0

1 1 0 0 0 1 0

0 1 1 0 0 0 1