📄 7,4hanmingma.txt
字号:
function [out]=hamm_enc(in)
in=input('in=')
n=length(in);
% the length of n is the 4*m where m is integer
% (7,4)汉明
out=[];
if mod(n,4)~=0
n=n+4-mod(n,4)
in=[in zeros(1,4-mod(n,4))];
end
for i=1:n/4
a=in((i-1)*4+1:i*4);
for j=1:4
b=mod(sum(a(1:3)),2);
c=mod(sum(a(2:4)),2);
d=mod(a(1)+a(2)+a(4),2);
end
out=[out a,b,c,d];
end;
in=[1 0 0 1]
in =
1 0 0 1
ans =
1 0 0 1 1 1 0
译码
function [out]=hamm_dec(in)
in=input('in=')
H=[1 1 1 0 1 0 0;0 1 1 1 0 1 0; 1 1 0 1 0 0 1];
n=length(in);
out=[];
for i=1:n/7
a=in((i-1)*7+1:i*7);
b=a*H';
b=mod(b,2)
val=b(1)*4+b(2)*2+b(3);
if val~=0
a(val)=~a(val);
end
out=[out a(1:4)];
end
in=[1 0 0 1 1 1 0]
in =
1 0 0 1 1 1 0
b =
0 0 0
ans =
1 0 0 1
这个函数是实现汉明码编码的
function [out]=hamm_enc(in)
in=input('in=')
n=length(in);
%n用于求解输入的长度
% the length of n is the 4*m where m is integer
% (7,4)汉明
out=[]; %输入首先是空向量,
if mod(n,4)~=0
%判断输入的向量个数是否是4的整倍,
n=n+4-mod(n,4)
in=[in zeros(1,4-mod(n,4))];
end
%如果不是则在输入末端添0,使得输入长度为4的整数倍
for i=1:n/4
a=in((i-1)*4+1:i*4); %4个一组的取出输入数据
for j=1:4
b=mod(sum(a(1:3)),2);
c=mod(sum(a(2:4)),2);
d=mod(a(1)+a(2)+a(4),2);
end %根据生成矩阵来确定输出的校验位
%其中生成矩阵G为
% 1 0 0 0 1 0 1
% 0 1 0 0 1 1 1
% 0 0 1 0 1 1 0
% 0 0 0 1 0 1 1
out=[out a,b,c,d];
% 最后输出为输入a和校验位b,c,d
end;
%所以程序的运行结果为
in=[1 0 0 1]
in =
1 0 0 1
ans =
1 0 0 1 1 1 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -