精华内容
下载资源
问答
  • matlab汉明码编码与译码
    2021-12-15 09:21:57

    编码

    
    function C=HM_code(M)
    G=[1 1 1
       1 1 0
       1 0 1
       0 1 1];
    G=[eye(4) G];
    C=M*G;
    C=mod(C,2);
    

    译码

    function D=HM_Dcode(A)
    H=[1 1 1 0 1 0 0
       1 1 0 1 0 1 0
       1 0 1 1 0 0 1];
    S=H*A.';
    S=mod(S,2);
    s=[0 0 0 0 1 1 1 1
       0 0 1 1 0 0 1 1
       0 1 0 1 0 1 0 1];
    index=[4 2 1]*S;
    e=[7 6 4 5 3 2 1];
    %if (index~=0)
     %   A(e(index))=mod(A(e(index))+1,2);
    %end
    for k=1:length(index)
        if (index(k)~=0)
            A(k,e(index(k)))=mod(A(k,e(index(k)))+1,2);
        end
    end
    
    D=A;
    

    测试

    clear all;clc;
    m=[1 1 1 0];
    hm=HM_code(m)
    hm2=[0 0 0 1 1 1 1];
    hm_d=HM_Dcode(hm2)
    

    在这里插入图片描述

    更多相关内容
  • matlab汉明码程序,实现汉明编码,,并实现纠错和检错功能
  • 汉明码使用详解

    千次阅读 2019-07-15 21:14:59
    汉明码是一种数据传输中校验和纠错的手段。当传输一个二进制码时,它在每一个2的整数次幂位插入校验位,如1、2、4、8…如下图所示,其中P为校验码,D为数据: 其中P1在第一位,二进制01,与二进制编码最后一位为1...

    汉明码是一种数据传输中校验和纠错的手段。当传输一个二进制码时,它在每一个2的整数次幂位插入校验位,如1、2、4、8…如下图所示,其中P为校验码,D为数据:

    位数二进制分别为:

    P1: 第1位 001;P2 第2位 010;D1 第3位 011;P3 第4位 100;D2 第5位 101; D3 第6位 110;

    其中P1在第一位,二进制001,与二进制编码最后一位为1的位数的数据相异或,即D1和D2

    P1=D1⊕D2

    P2在第二位,二进制10,与二进制编码倒数第二位为1的位数的数据相异或,即D1 D3

    P2=D1⊕D3

    P3在第三位,二进制100,与二进制编码倒数第三位为1的位数的数据相异或,即D2 D3

    P3=D2⊕D3

    假如我们想要传输的数据为0110001100110101,你可能会说用4位校验码就能表示完全表示这个16位数,毕竟24=16,那你就忽略了这三位校验码本身,校验码插入后如下:

    如上图:

    P0= 异或(0 1 0 0 1 0 1 1 1 1)=0;

    P1=异或(0 1 0 0 1 0 1 0 1)=0;

    P2=异或(1 1 0 1 0 0 1 0 1)=1;

    P3=异或(0 0 1 1 0 0 1)=1;

    P4=异或(1 0 1 0 1)=1.

    若传输后第11位因噪声翻转为0,则

    传输数据为:010011010011001110101;

    接收数据为:010011010001001110101;

    将校验位与对应的数据位相异或,即可得出错误位,如下:

    P4=异或(P4 1 0 1 0 1)=0

    P3=异或(P3 0 0 0 1 0 0 1)=1(即异或的数据位有错误,或者说,错误的数据位的倒数第四位为1)

    P2=异或(P2 1 1 0 1 0 0 1 0 1)=0

    P1=异或(P1 0 1 0 0 0 0 1 0 1)=1(即错误的数据位的倒数第二位为1)

    P0=异或(P0 0 1 0 0 0 0 1 1 1 1)=1(即错误的数据位的倒数第一位为1) 得出错误位为:01011,即11.

    展开全文
  • 在VS2008下用C语言实现的汉明码的编解码 源代码 在VS2008下用C语言实现的汉明码的编解码 源代码 在VS2008下用C语言实现的汉明码的编解码 源代码 在VS2008下用C语言实现的汉明码的编解码 源代码
  • 只是一个完整的汉明码 matlab编译码性能仿真程序。包括编译码两个函数模块。
  • 最近在复习汉明码,上计算机组成原理的时候学过了,可是老师讲的实在是太水。于是过了好几个月我再次用“人话”来解释什么是汉明码。最讨厌故弄玄虚装腔作势的讲解了,晦涩难懂,根本理解不了= = ,能不能说人话。 ...

    转载请注明出处,谢谢!

    最近在复习汉明码,上计算机组成原理的时候学过了,可是老师讲的实在是太水。于是过了好几个月我再次用“人话”来解释什么是汉明码。最讨厌故弄玄虚装腔作势的讲解了,晦涩难懂,根本理解不了= = ,能不能说人话。

    不明白的欢迎留言评论哈~

    想要理解汉明码首先要知道“奇偶校验”这个东西。这个东西很简单。

    我们约定一串编码里1的个数是偶数个,那么这串编码里携带的信息就是对的,否则就是错的。

    我们可以在开头对这串编码加一位校验码实现奇偶校验。

    for example:

    我们想传输10010这串码,那么在传输的时候,就传010010,其中在开头的0就是校验位。

    我们想传输10000这串码,那么在传输的时候,就传110000,其中在开头的1就是校验位。

    两个例子的1的个数都是偶数。

    好了,接下来可以讲汉明码了。

    首先汉明码是采用奇偶校验的码。它采用了一种非常巧妙的方式,把这串数字分了组,通过分组校验来确定哪一位出现了错误。

    第一个问题,检错原理。

    它的原理可以通过一个例子来说明。

    因为在传输过程中,最最最可能的是只错一位数据,所以,

    汉明码默认一串数据只错一位

    我们假设想传这一列数据1234567,我们先把他们分个组(当然怎么分组的我们等会儿再讨论),如图。

    转载请标明出处

    P1组:1,2,3,4

    P2组:2,4,5,7
    P3组:3,4,6,7

    tips:最好把这个图花在你的演算纸上^_^,方便些哦~

    我们约定,哪一个组出错了,就给这个组做一个1的标志。

    要记得哦,只错一个数据

    比如,这次的情况是,P1组中有一个错了,P2组没错,P3组没错。

    嗯,好,现在我们看图,我们看,

    P2组里谁都没错,可以排除2,4,5,7这几个数据;

    P3组里谁都没错,可以排除3,4,6,7这几个数据;

    那么P1组里我们知道是有错的,那经过P2,P3组的对数据的排除,我们很容易知道,是1这个数据有了错误。

    好,那么错一个组的情况我们讨论过了,那么错两组的情况呢?

    假设P1中有个错了,P2中有个错了,P3全对了

    好,同时属于P1和P2而且不属于P3的数据是哪个?对,看图,是2这个数据。

    好,那么三个组的情况呢?

    同时属于P1、P2、P3组的数据是谁呢?对,是4这个数据。

    好,这种分组,这种方式是不是很爽呢?汉明码就是利用了这种分组,这样它就可以很简单地分辨出哪一个数据出错,这种可以检测出数据出错的能力叫做“检错”,一定要和“纠错”分开,检错只能检测到错误不一定能改过来错误,纠错是可以的。

    知道那个图的原理就好,现在扔掉它。

    下一个问题,校验码的位置。

    这是规定,记住它,在采用汉明码的一串数据中,2的i次方的位置上,我们放校验码。

    校验码是1,或者是0,使得校验码所在的组的1的个数是偶数。

    如图:

    绿色的位置是放校验码的地方,1,2,4,8,16……等等,2的i次方的地方。

    下一个问题,汉明码是怎么分组的呢?

    我们看到,其实有些数据是既在P1组又在P2组的。

    怎么分组,这个要记住,没啥原理了哈哈。

    要预先做的工作是,

    把表示位置的这个数,转化成二进制数。

    也就是,

    第1个位置,变成第0001个位置;

    第2个位置,变成第0010个位置;

    第3个位置,变成第0011个位置;

    第4个位置,变成第0100个位置;

    第5个位置,变成第0101个位置;

    第6个位置,变成第0110个位置;

    那么,规定来了,

    凡是位置符合这种形式的,XXX1,归到P1;

    凡是位置符合这种形式的,XX1X,归到P2;

    凡是位置符合这种形式的,X1XX,归到P3;

    凡是位置符合这种形式的,1XXX,归到P4;

    那么显然各个校验码也被分到各个组里面去了,而且,每个组只有一个校验码。(这个,太简单我就不解释了……)

    那么组分好了,校验码的值也就确定下来了。(数组内有多少个1就可以了)

    好,为了防止你不明白,我举个例子哈。

    我们想传这一组码:XX1X101X011

    一共11位。

    标X的是校验码的位置,我们暂时不知道它的值是多少。

    位置在1,3,5,7,9,11的数据进到P1组。(你转换一下这些位置的二进制,就知道他们的位置符合XXX1)

    位置在2,3,6,7,10,11的数据进到P2组。(位置符合XX1X)

    位置在4,5,6,7的数据进到P3组。(位置符合X1XX)

    位置在8,9,10,11的数据进到P4组。(位置符合1XXX)

    那么确定了分组,校验码的值也就顺便确定下来了。

    这样整个串的码就确定下来了。

    现在知道汉明码是怎么分组的了吗?对,通过位置数的性质。

    好,下两个问题。

    从发送者的角度,我该怎么发用上汉明码的数据呢?

    首先我们考虑我们到底要发多少位。假设校验码一共k位,我们想发的原始数据一共n位,要注意我们的校验码也要校验校验码错没错,所以,要校验的一共有k+n位,k位校验码可以检测2^k位的码,但是不能所以,校验码的位数要满足这个公式

    2^k>k+n,或者说2^{k}-1 \geq k+n

    这样我们就能算出来要用多少校验码了。

    其实哈,实际上不用这么麻烦,教科书总是那么复杂。假设你想发101011111,那你就先占下校验位,然后空着的位填你想发的数据就好。

    占下1,2,4,8……等等位,看能占下多少位就可以,当然这个手算比较直观啦哈。

    好,我假设你填完了,然后分好组,也确定了校验位的值了,那么发送出去啦~

    嘟嘟嘟~~~~~~~

    我是接收者,我收到了一串汉明码,怎样用汉明码的性质来检错呢?

    1.分组,分好P1,P2,P3……

    (2020年更正错误,各位看官不好意思了,下面的都是对的。)

    2.分别对每个组校验,没有错的给它0,有错的给1.

    3.记得第一个问题,汉明码的原理吗?你可能会想,3个组,我们可以画3个圈,可是100个组,这个圈可就太难画了啊!

    这里有一个等价的方法,hamming真的太聪明了。

    把P从大到小排列起来,得到一串1010,

    for example:

             组别:        P5   P4   P3   P2   P1

             标志:         1      0      1     0     1

    从大到小排列起来,标志排成了一串一零串。这个数就是出错的数据的位置。

    本例中,10101位置上的位错了,换成十进制是第21个位置上的数错了。

    然后,我们发现了它错误的位置,又因为它是二进制的,不是0就是1,所以,可以顺便把它纠错。

    好了,这样,我就全都讲完了……………………

    你可以随便写一串101010101010101010,从接收方的角度,解这一串汉明码,很好玩的。

    加油哦~~~

    展开全文
  • 直接贴代码了//============================================================================// Name : Hamming.cpp// Author : wzw// Version :// Copyright : Your copyright notice// Description...

    直接贴代码了

    //============================================================================

    // Name : Hamming.cpp

    // Author : wzw

    // Version :

    // Copyright : Your copyright notice

    // Description : Hello World in C++, Ansi-style

    //============================================================================

    #include

    #include

    #include

    int isRightParity(int,int[]);

    void getColumn(int,int,int,int[]);

    void getParity(int[],int,int,int[],int[]);//得到数据与校验码组合码

    void getCodedMessage(int[],int[],int,int[]);

    int isPowerOfTwo(int);

    int getParityBit(int);

    void getNextParityCode(int,int,int[]);

    int main(){

    int data_bit; //数据位长

    printf("Input The Bits Of Data:/n");

    scanf("%d",&data_bit);

    int data[data_bit];

    for (int i=0;i

    printf("Input The %dth Bit/n",i+1);

    int temp;

    temp=(int)getche()-48;

    if((temp==0)||(temp==1)){ //确保输入数据时0或1

    data[i]=temp;

    printf("/n");

    }

    else{

    printf("/nInput Must Be 0 Or 1/n");

    i--;

    }

    }

    printf("The Data To Be Coded Is: ");//显示输入的待传输数据

    for(int i=0;i

    printf("%d",data[i]);

    }

    int parity_bit; //校验码位长matrix column;matrix row is parity+data_bit;

    parity_bit=getParityBit(data_bit); //根据数据位长选择最短的检验码,返回位长

    printf("/nChoose Bits Of Parity Is: %d /n",parity_bit);

    int parity_code[parity_bit]; //校验码

    int coded_message[parity_bit+data_bit]; //数据和校验码融合之后的数据

    getParity(data,data_bit,parity_bit,parity_code,coded_message);

    printf("Parity Is: ");

    for(int i=0;i

    printf("%d",parity_code[i]);

    }

    printf("/nCoded Message Is: ");

    for(int i=0;i

    printf("%d",coded_message[i]);

    }

    printf("/n/nPress Any Key Exit...");

    getch();

    }

    void getColumn(int index,int data_bit,int parity_bit,int column[]){

    for(int i=0;i

    int parity_row[parity_bit];

    getNextParityCode(parity_bit,i,parity_row);

    column[i]=parity_row[index];

    }

    }

    void getParity(int data[],int data_bit,int parity_bit,int parity_code[],int coded_message[]){ //计算校验码P

    int flag[parity_bit];

    int column[data_bit+parity_bit];//矩阵一列

    for(int m=0;m

    getNextParityCode(parity_bit,m,parity_code);

    getCodedMessage(data,parity_code,(parity_bit+data_bit),coded_message);

    for(int i=0;i

    flag[i]=0;

    }

    for(int i=0;i

    getColumn(i,data_bit,parity_bit,column);

    int matrix_product=0;//乘积

    for(int j=0;j

    matrix_product=matrix_product+coded_message[j]*column[j];

    }

    if(matrix_product%2==0){

    flag[i]=1;

    continue;

    }

    else{

    flag[i]=0;

    break;

    }

    }

    if(isRightParity(parity_bit,flag)==1){

    break;

    }

    else{

    continue;

    }

    }

    }

    int isRightParity(int length,int flag[]){

    int temp=1;

    for(int i=0;i

    temp=temp*flag[i];

    }

    if(temp==1){

    return 1;

    }

    else{

    return 0;

    }

    }

    void getCodedMessage(int data[],int parity_code[],int length,int coded_message[]){

    int index_data,index_parity;

    index_data=index_parity=0;

    for(int i=0;i

    if(isPowerOfTwo(i+1)==1){

    coded_message[i]=parity_code[index_parity];

    index_parity++;

    }

    else{

    coded_message[i]=data[index_data];

    index_data++;

    }

    }

    }

    int isPowerOfTwo(int num){//num is power幂 of 2 or not

    int ispoweroftwo;

    int i=0;

    while(1){

    int pow2i=(int)pow(2,(double)i);

    if(num

    ispoweroftwo=0;

    break;

    }

    else if(num==pow2i){

    ispoweroftwo=1;

    break;

    }

    else if(num>pow2i){

    i++;

    }

    }

    return ispoweroftwo;

    }

    void getNextParityCode(int parity_bit,int index,int parity_code[]){//change index+1 to BCD

    int temp=index+1;

    for(int i=0;i

    parity_code[parity_bit-i-1]=temp%2;

    temp=temp/2;

    }

    }

    int getParityBit(int data_bit){//get least bit of parity

    int paritybit=0;

    int power;

    while(1){

    paritybit++;

    power=(int)pow(2,(double)paritybit)-1;

    if((paritybit+data_bit)<=power){

    break;

    }

    }

    return paritybit;

    }

    0818b9ca8b590ca3270a3433284dd417.png

    展开全文
  • 汉明码实现原理 汉明码(Hamming Code)是广泛用于内存和磁盘纠错的编码。汉明码不仅可以用来检测转移数据时发生的错误,还可以用来修正错误。(要注意的是,汉明码只能发现和修正一位错误,对于两位或者两位以上的...
  • AR专用汉明码生成器

    2016-04-02 22:45:19
    目前网络上的AR专用汉明码资源很少,本人特地开发一款AR专用汉明码生成器 用JAVA开发,打包成了EXE格式。 本程序生成AR专用的5X5的...http://blog.csdn.net/sac761/article/details/51045218 欢迎交流! QQ489662100
  • 汉明码是由Richard Hanming于1950年提出的,它具有一位纠错能力。 由编码纠错理论得知,任何一种编码是否具有检测能力和纠错能力,都与编码的最小距离有关。所谓编码最小距离,是指在一种编码系统中,任意两组合法...
  • 汉明码——计算机网络——全网最通俗的讲解

    万次阅读 多人点赞 2019-02-24 15:46:27
    汉明码——计算机网络——全网最通俗的讲解 一、什么是汉明码(hamming code) “汉明码”,也称作“海明码”,英文名为“hanming code”,在通信领域中,“汉明码”有广泛的应用,由理查德·卫斯里·汉明于...
  • 11汉明码编解码实验实验一 汉明码编解码实验一、实验目的1、掌握汉明码的编解码原理。2、掌握汉明码的软件仿真方法。3、掌握汉明码的硬件仿真方法。4、掌握汉明码的硬件设计方法。二、预习要求1、掌握汉明码的编解码...
  • MATLAB实现汉明码编码译码 汉明码的编码就是如何根据信息位数k,求出纠正一个错误的监督矩阵H,然后根据H求出信息位所对应的码字。 1、根据已知的信息位数k,从汉明不等式中求出校验位数m=n-k; 2、在每个码字C:...
  • 11位汉明码纠错检错接收端c语言程序,仅限参考。
  • 汉明码(海明码)计算方法

    千次阅读 2019-10-07 04:12:23
    汉明码是一种具有纠错功能的校验码.本文简单地介绍汉明码的计算方法.汉明码的目的是能够纠正一位误码.假设信息码共有 n 位,汉明码共有 r 位,那么总共的码长为 n + r 位.为能检测出 n + r 位编码中其中一位的错误,...
  • 汉明码原理和纠错

    千次阅读 2021-01-24 17:12:22
    汉明码原理和实现 汉明码历史 ​ 汉明码(Hamming Code),是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名。汉明码在传输的消息流中插入验证码,当计算机存储或移动数据时,可能会产生数据...
  • 通俗易懂解释汉明码(附MATLAB实现代码)

    千次阅读 多人点赞 2020-09-09 14:50:34
    汉明码(Hamming Code),是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名。汉明码在传输的消息流中插入验证码,当计算机存储或移动数据时,可能会产生数据位错误,以侦测并更正单一比特错误...
  • 今天上课,老师让我们用matlab进行汉明码编码译码的实现,之前上通信原理课程的时候老师顺带提过一句,现在已然是记不太清了,所以上网搜索了一下关于汉明码的原理。 汉明码(Hamming Code),是在电信领域的一种...
  • VC++实现汉明码

    2022-01-08 00:24:46
    海明码一般指汉明码汉明码(Hamming Code)。汉明码在传输的消息流中插入验证码,当计算机存储或移动数据时,可能会产生数据位错误,以侦测并更正单一比特错误。由于汉明编码简单,它们被广泛应用于内存(RAM)。...
  • [7,4]汉明码编解码

    2010-03-27 20:41:50
    【7,4】汉明码的编解码c语言实现1111111111111111111111111111
  • 汉明码的matlab实现(hanming code)

    热门讨论 2011-09-05 20:33:16
    该资源对一段录音文件(.wav)格式,进行matlab软件中的hanming 编码,通过BSC信道,并解码纠错,利用算法仿真误比特率。文件包含(7,3)、(7,4)、(8,4)的源代码及一个完整报告文件。有问题可邮件:sljdzw@bupt...
  • 汉明码编码原理 汉明码也叫做海明码,它通过向原始数据中添加校验数据来进行查错和纠错。具体来说, 假设数据位有n位,则校验位为k,k满足 2^k >= n+k+1 汉明码的位数为n+k,且校验位位于2的幂次的位置 每...
  • 汉明码编码的纠错原理

    万次阅读 2018-10-06 17:38:25
    当计算机存储或移动数据时,可能会产生数据位错误,这时可以利用汉明码来检测并纠错,简单的说,汉明码是一个错误校验码码集,由Bell实验室的R.W.Hamming发明,因此定名为汉明码。 2. 汉明码的定义和汉明码不等式...
  • MATLAB实现7,4汉明码的编码解码纠错及BER的分析背景代码计算BER计算不使用汉明编码情况时的BER(模拟环境与理论情况)总结 背景 本科时信息论与编码的作业,流程逻辑如下: 数据->汉明编码->BPSK调制->加入...
  • 信源函数_marujie123的博客-CSDN博客) eg.产生四路信源序列: %% 四路信源产生序列 I = 4 %信源数量 m=zeros(4,100);%m是一个4行100列的矩阵 for i = 1:I m(i,:)=randi([0,1],1,100);%m的每一行都是一组长度为100的...
  • 这是本专栏信道编码/Channel Coding的第三站,想对信道编码有一个系统性的认识可以...而在本篇文章中,将介绍汉明码(Hamming Code)的构成,而且会着重讲解汉明码的线性分组码形式,因为这是我学习过程中最大的疑惑。
  • 汉明码的原理、生成和检验

    万次阅读 多人点赞 2017-12-03 11:29:23
    汉明码具有一位纠错能力。 设将要进行检测的二进制代码为n位,为使其具有纠错能力,需要再加上k位的检测位,组成n+k位的代码。那么,新增加的检测位数k应满足: 2k≥n+k+1或2k-1≥n+k 代码长度和检测位数的关系
  • 汉明码原理

    2022-04-07 17:53:16
    终于搞懂汉明码
  • 508_汉明码权重

    2021-01-27 21:21:06
    汉明码之前使用非常少,印象中第一次看到的时候我还在北京。那时候,工作变动但是自己感觉有一些迷惑,因为不觉得自己的能力有什么竞争力。 自己之前的工作经验在PowerPC平台,而那时候我自己的的工作又是这个。...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 306
精华内容 122
关键字:

汉明码csdn

友情链接: contiki-master.zip