74循环汉明码编码及译码
- 格式:docx
- 大小:15.23 KB
- 文档页数:4
74循环汉明码编码及译码
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