线性分组码 | 您所在的位置:网站首页 › crc码的编解码实验报告 › 线性分组码 |
(7,4)汉明码解码步骤: 构建校验矩阵计算伴随式若由伴随式的结果纠正错误取出信息位三、实现(7,4)汉明码编解码的Matlab源程序;实现(7,4)汉明码最小码距计算方法的Matlab源程序。 汉明码编码解码及计算最小码距程序(exp3_code.m) clear; clc; 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]; H=[1 1 1 0 1 0 0; 0 1 1 1 0 1 0; 1 1 0 1 0 0 1]; M=input('请输入4位二进制信息序列:'); C=M*G; C=mod(C,2); fprintf('汉明编码为%d %d %d %d %d %d %d\n',C); S=H*C'; S=mod(S,2); T=any(S); if T==0 fprintf('传输没有出现错误\n'); fprintf('信息序列为:%d %d %d %d\n',C(1),C(2),C(3),C(4));
else fprintf('传输出现错误\n'); error=C; fprintf('接受到的信息序列为:%d %d %d %d\n',error(1),error(2),error(3),error(4)); fprintf('正在自动修正一位错误...\n'); for i=1:7 if S==H(:,i) C(i)=~C(i); end end fprintf('修正后正确的信息序列可能为:%d %d %d %d\n',C(1),C(2),C(3),C(4)); fprintf('再次检查错误...\n'); S=H*C'; S=mod(S,2); T=any(S); if T==0 fprintf('已修正错误\n'); fprintf('信息序列可能为:%d %d %d %d\n',C(1),C(2),C(3),C(4)); else fprintf('错误超过1位,无法修正错误\n') fprintf('接受到的错误序列:%d %d %d %d\n',error(1),error(2),error(3),error(4)); end end M_all=[0 0 0 0; 0 0 0 1; 0 0 1 0; 0 0 1 1; 0 1 0 0; 0 1 0 1; 0 1 1 0; 0 1 1 1; 1 0 0 0; 1 0 0 1; 1 0 1 0; 1 0 1 1; 1 1 0 0; 1 1 0 1; 1 1 1 0; 1 1 1 1]; C_all=zeros(16,7); d=7; for i=1:16 C_all(i,:)=M_all(i,:)*G; C_all(i,:)=mod(C_all(i,:),2); di=sum(C_all(i,:)); if(di>0&&di |
CopyRight 2018-2019 实验室设备网 版权所有 |