PDA

查看完整版本 : [求助](8,4)汉明码如何进行解码


ctsf5520
2009-03-20, 12:20
在利用(8,4)汉明码对信息进行编码后,如何对其进行解码?急急。。。

云龙九现
2009-03-24, 13:39
我不知道你说的解码指的是什么,是只是接收到码,还是要将码进行检错和纠错?
举个例子吧!
(8,4)汉明码是一个块长度为8,数据占4位的码。
发送:
假设待发送的8位数据块为:00111001。在发送前,我们要处理一下,将这个8位数据块中间插入一些位置,变成12位的。001101000100(汉明码要放置在1,2,4,8位,也就是2的次幂的位置,从右到左)。我们还知道,其中的第10,第9,第7,第3位的值为1(注:第10位对应原来8位数据块的第6位,第9位对应第5位,第7位对应第4位,第3位对应第1位).下面计算校验码。
10对应的4位二进制码为1010,9对应的1001,7对应的是0111,3对应的是0011,将这4个进行异或得到0111.
也即10xor9xor7xor3=0111
这个在matlab中可以通过bitxor(a,b)来实现.
将校验码填入到12位的数据块中的第8,4,2,1位得到发送序列
001101001111
接收:
接收的时候,将1,2,4,8位读出来,形成校验码0111,十进制为7
再将0111与非零的第10,第9,第7,第3位进行异或,也就是
7xor10xor9xor7xor3=0
由于异或之后,结果为0,所以未发生错误。不需要纠错
如果异或之后,结果不为0,比如异或结果为6,那么可以将接受到的数据块的第6位取反就行了。

具体matlab程序如下,以上面为例
接受到的信息为001101001111
设接受到的信息为m,校验码为pc
m='001101001111';
char pc;
pc(1)=m(5);
m(5)='0';
pc(2)=m(9);
m(9)='0';
pc(3)=m(11);
m(11)='0';
pc(4)=m(12);
m(12)='0';
pc_dec=bin2dec(pc);
x=[];
count=0;
for k=12:-1:1
if(m(k)=='1')
count=count+1;
x=[x count];
else
count=count+1;
end
end
pc_dec=bitxor(pc_dec,x(1));
for k=2:length(x)
pc_dec=bitxor(pc_dec,x(k));
end

最后的结果是:pc_dec=0
也就是说传输过程中没有错误。

未注册
2011-01-30, 14:24
你那是(12,4)人家要的是(8,4)扩展汉明码