这个是函数表示:
做成函数的形式hanmingma_wucha=function(hanmingma)hanmingma_wucha=hanmingmafor i=1:4row=ceil(rand*7) hanmingma_wucha(row,i)=~(hanmingma_wucha(row,i))end保存成一个m文件即可
程序改为如下:
S=ones(7,3)%要加的部分A=[1 1 0 1 1 0 0]
[r,l]=size(A)
E=[0 0 0 0 0 0 00 0 0 0 0 0 10 0 0 0 0 1 00 0 0 0 1 0 00 0 0 1 0 0 00 0 1 0 0 0 00 1 0 0 0 0 01 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
汉明码是Richard Hamming于1950年提出的。是目前广泛采用的一种有效的校验码,其中,主存的ECC(Error Correcting Code)采用的就是类似的校验码。
----摘自百度百科
这个分组的思想有点不是很理解。
以下使用P代表校验位,H代表汉明码,D代表原始信息位,N位信息位的位数,K位校验位的位数。
则N与K的关系为 2^(K-1) >=N+K+1 ,如下表:
假设原始数据信息位的位数为8,那么他需要的K值位5,即需要有5个校验位,组成的汉明码的位数为13.再根据校验位的分配原则,组成的汉明码如下:
|位|13| 12| 11 |10| 9| 8| 7 |6| 5| 4| 3| 2| 1|
|-|-|-|-|-|-|-|-|-|-|-|-|-|
|汉明码|P5| D8| D7| D6 | D5| P4| D4| D3| D2| P3| D1| P2| P1|
P5本来应该是放在第16位的,但是由于生成的汉明码位数为13所以它就被挪到的第13位了。
那么怎么确定校验呢?最初也困扰我许久。
先看一个表格:
其中H的下标代表在汉明码中的位置,也是P4P3P2P1组成的-十进制数
校验位Pi的偶校验结果就是:
P1 = D1 ^ D2 ^ D4 ^ D5 ^ D7
P2 = D1 ^ D3 ^ D4 ^ D6 ^ D7
P3 = D2 ^ D3 ^ D4 ^ D8
P4 = D5 ^ D6 ^ D7 ^D8
如果是奇校验的话上面的结果取反就是了。
那么还有P5呢?上面的结果中,D4,D7出现了3次,而D1,D2,D3,D5,D6,D8仅出现了2次,为了使其各个信息位在校验中均匀的出现校验,从而定义 P5 = D1 ^ D2 ^ D3 ^ D5 ^ D6 ^D8 ,这样,每一位信息位都均匀的出现在3个Pi值得形成关系中,当任意一位信息位变化的时候都会引起3个P值得变化, 即合法汉明码的码距为4 (前面都懂,这个码距为4有点想不明白)
这就是编码了。
现在再来看看这句话
P1,P2,P3,P4,P5的位数分别为1,2,4,8,13
D1的汉明码位数为3,3 = 2 + 1所以D1会被P1,P2两个校验位所校验。
根据偶校验结果以及上应该就清楚了。
将收到的汉明码进行偶校验(当然也可以进行奇校验,前提是前面编码的时候使用的是奇校验)
S1 = P1 ^ D1 ^ D2 ^ D4 ^ D5 ^ D7
S2 = P2 ^ D1 ^ D3 ^ D4 ^ D6 ^ D7
S3 = P3 ^ D2 ^ D3 ^ D4 ^ D8
S4 = P4 ^ D5 ^ D6 ^ D7 ^D8
S5 = P5 ^ D1 ^ D2 ^ D3 ^ D5 ^ D6 ^D8
汉明码出错情况:
记录 S = S5 S4 S3 S2 S1
以上结果分析基于偶校验。
|汉明码||P5| D8| D7| D6 | D5| P4| D4| D3| D2| P3| D1| P2| P1|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|出错位号||H13| H12| H11 |H10|H9| H8| H7 |H6| H5| H4| H3| H2|H1|
||S5|1|1|0|1|1|0|0|1|1|0|1|0|0|
||S4|0|1|1|1|1|1|0|0|0|0|0|0|0|
||S3|0|1|0|0|0|0|1|1|1|1|0|0|0|
||S2|0|0|1|1|0|0|1|1|0|0|1|1|0|
||S1|0|0|1|0|1|0|1|0|1|0|1|0|1|
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)