(7,4)汉明码 matlab编程

A=[1 1 0 1 1 0 0
][r,l]=size(A)
E=[0 0 0 0 0 0 0;0 0 0 0 0 0 1;0 0 0 0 0 1 0;0 0 0 0 1 0 0;0 0 0 1 0 0 0;0 0 1 0 0 0 0;0 1 0 0 0 0 0;1 0 0 0 0 0 0];
%%%%%求校正子,然后将其转化成十进制数
for i=1:r
Sx=S(i,1)*4+S(i,2)*2+S(i,3);
end
%%%%下面是(7,4)码检错
for i=1:r
switch(Sx)
case 0 disp('此接收码字没错')
case 1 disp('注意:此接收码字的第一位有错,请纠正')
case 2 disp('注意:此接收码字的第二位有错,请纠正')
case 4 disp('注意:此接收码字的第三位有错,请纠正')
case 3 disp('注意:此接收码字的第四位有错,请纠正')
case 5 disp('注意:此接收码字的第五位有错,请纠正')
case 6 disp('注意:此接收码字的第六位有错,请纠正')
case 7 disp('注意:此接收码字的第七位有错,请纠正')
end
end
%%%下面为在知道哪位出错的情况下,进行纠正
for i=1:r
switch(Sx)
case 0 B(i,:)=A(i,:)+E(1,:);
case 1 B(i,:)=A(i,:)+E(2,:);
case 2 B(i,:)=A(i,:)+E(3,:);
case 4 B(i,:)=A(i,:)+E(4,:);
case 3 B(i,:)=A(i,:)+E(5,:);
case 5 B(i,:)=A(i,:)+E(6,:);
case 6 B(i,:)=A(i,:)+E(7,:);
case 7 B(i,:)=A(i,:)+E(8,:);
end
end
B=rem(B,2);disp('纠错后的码字');
disp(B);
这是(7,4)汉明码检错Sx=S(i,1)*4+S(i,2)*2+S(i,3),这句有问题,但是哪里有问题啊

程序改为如下:

S=ones(7,3);%要加的部分
A=[1 1 0 1 1 0 0];
[r,l]=size(A);
E=[0 0 0 0 0 0 0;0 0 0 0 0 0 1;0 0 0 0 0 1 0;0 0 0 0 1 0 0;0 0 0 1 0 0 0;0 0 1 0 0 0 0;0 1 0 0 0 0 0;1 0 0 0 0 0 0];%%%%%求校正子,然后将其转化成十进制数
for i=1:r 
    Sx=S(i,1)*4+S(i,2)*2+S(i,3);
end%%%%下面是(7,4)码检错
for i=1:r 
    switch(Sx)
        case 0 
            disp('此接收码字没错') 
        case 1 
            disp('注意:此接收码字的第一位有错,请纠正') 
        case 2 
            disp('注意:此接收码字的第二位有错,请纠正')
        case 4 
            disp('注意:此接收码字的第三位有错,请纠正') 
        case 3 
            disp('注意:此接收码字的第四位有错,请纠正') 
        case 5 
            disp('注意:此接收码字的第五位有错,请纠正') 
        case 6
            disp('注意:此接收码字的第六位有错,请纠正') 
        case 7 
            disp('注意:此接收码字的第七位有错,请纠正') 
    end
end
%%%下面为在知道哪位出错的情况下,进行纠正
for i=1:r 
    switch(Sx)
        case 0 
            B(i,:)=A(i,:)+E(1,:);
        case 1
            B(i,:)=A(i,:)+E(2,:);
        case 2 
            B(i,:)=A(i,:)+E(3,:); 
        case 4
            B(i,:)=A(i,:)+E(4,:);
        case 3
            B(i,:)=A(i,:)+E(5,:);
        case 5
            B(i,:)=A(i,:)+E(6,:); 
        case 6
            B(i,:)=A(i,:)+E(7,:);
        case 7
            B(i,:)=A(i,:)+E(8,:); 
    end
end
B=rem(B,2);
disp('纠错后的码字');
disp(B);

结果:

注意:此接收码字的第七位有错,请纠正
纠错后的码字
     0     1     0     1     1     0     0

温馨提示:答案为网友推荐,仅供参考
相似回答