Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#2 |
初级会员
注册日期: 2009-03-20
年龄: 42
帖子: 26
声望力: 17 ![]() |
![]()
我不知道你说的解码指的是什么,是只是接收到码,还是要将码进行检错和纠错?
举个例子吧! (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,不知道自己的无知 |
![]() |
![]() |
|
|
![]() |
||||
主题 | 主题作者 | 版面 | 回复 | 最后发表 |
[MATLAB毕业设计] 求助关于绘图时出现的问题 | antonia1987 | MATLAB论坛 | 3 | 2009-05-14 03:33 |
[MATLAB基础] matlab中for循环语句的问题 | fangqing86 | MATLAB论坛 | 3 | 2009-05-08 23:50 |
我想问下matlab a和b版本的问题 | b181 | MATLAB论坛 | 2 | 2009-03-24 15:29 |
请大家帮我实现这样一个等待的功能 | jerome_and_angela | MATLAB论坛 | 1 | 2009-03-20 09:26 |
opc toolbox | 肥肥雪 | MATLAB论坛 | 0 | 2008-10-06 22:52 |