matlab74汉明码纠错,[求助](8,4)汉明码如何进行解码

icon1.gif 回复: [求助](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

也就是说传输过程中没有错误。

__________________

不到马里亚纳,不知道大海的深度

不到珠穆朗玛,不知道大山的高度

不到Labfans,不知道自己的无知

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值