?? hammingdecode.m
字號:
function t=HammingDecode(T)
%函數(shù)用于糾錯
%T為輸入一個500行的15列的(15,11)編碼后的矩陣
%t為輸出一個1行7500列的(15,11)編碼糾錯后的矩陣
%函數(shù)只能糾正一位錯碼,當有一位以上錯碼時視為超出糾錯范圍
T=reshape(T,1,32);
H=[1 0 1 0 0 1;
0 1 0 1 1 0;
1 0 1 0 1 0;
1 1 0 1 0 0;
1 1 1 0 1 1;
0 1 1 1 0 0;
1 0 1 1 1 1;
1 1 0 1 1 1;
0 1 1 0 1 0;
0 0 1 1 0 1;
0 0 0 1 1 1;
1 0 0 0 1 1;
1 1 0 0 0 1;
1 1 1 0 0 0;
1 1 1 1 0 1;
1 1 1 1 1 0;
0 1 1 1 1 1;
0 0 1 1 1 0;
1 0 0 1 1 0;
1 1 0 0 1 0;
0 1 1 0 0 1;
1 0 1 1 0 0;
0 1 0 1 1 0;
0 0 1 0 1 1;
1 0 0 1 0 1;
0 1 0 0 1 1;
1 0 0 0 0 0;
0 1 0 0 0 0;
0 0 1 0 0 0;
0 0 0 1 0 0;
0 0 0 0 1 0;
0 0 0 0 0 1];
t=[];
R=T;
S=T*H;
S=mod(S,ones(1,6)*2);
if S==[0 0 0 0 0 1]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]);
elseif S==[0 0 0 0 0 0]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[0 0 0 0 1 0]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0]);
elseif S==[0 0 0 1 0 0]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0]);
elseif S==[0 0 1 0 0 0]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0]);
elseif S==[0 1 0 0 0 0]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]);
elseif S==[1 0 0 0 0 0]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0]);
elseif S==[0 1 0 0 1 1]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0]);
elseif S==[1 0 0 1 0 1]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]);
elseif S==[0 0 1 0 1 1]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0]);
elseif S==[0 1 0 1 1 0]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0]);
elseif S==[1 0 1 1 0 0]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0]);
elseif S==[0 1 1 0 0 1]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[1 1 0 0 1 0]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[1 0 0 1 1 0]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[0 0 1 1 1 0]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[0 1 1 1 1 1]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[1 1 1 1 1 0]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[1 1 1 1 0 1]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[1 1 1 0 0 0]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[1 1 0 0 0 1]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[1 0 0 0 1 1]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[0 0 0 1 1 1]
R=xor(R,[0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
R=xor(R,[0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[0 1 1 0 1 0]
R=xor(R,[0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[1 1 0 1 1 1]
R=xor(R,[0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[1 0 1 1 1 1]
R=xor(R,[0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[0 1 1 1 0 0]
R=xor(R,[0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[1 1 1 0 1 1]
R=xor(R,[0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[1 1 0 1 0 0]
R=xor(R,[0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[1 0 1 0 1 0]
R=xor(R,[0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[0 1 0 1 0 1]
R=xor(R,[0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
elseif S==[1 0 1 0 0 1]
R=xor(R,[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
end;
if R(2)==0
R=R;
end;
if R(2)==1
R=xor(R,[0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0]);
end;
t=R(3:26);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -