![]() |
[求助](8,4)汉明码如何进行解码
在利用(8,4)汉明码对信息进行编码后,如何对其进行解码?急急。。。
|
回复: [求助](8,4)汉明码如何进行解码
我不知道你说的解码指的是什么,是只是接收到码,还是要将码进行检错和纠错?
举个例子吧! (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 也就是说传输过程中没有错误。 |
回复: [求助](8,4)汉明码如何进行解码
你那是(12,4)人家要的是(8,4)扩展汉明码
|
所有时间均为北京时间。现在的时间是 11:09。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.