精华内容
下载资源
问答
  • 串口 奇偶校验代码

    千次阅读 2013-12-09 21:27:51
    校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为奇数,如: 1 0110,0101 0 0110,0001 */ unsigned long a,c,temp; //a=0x0001; unsigned int b,jynum; //1 number void jy() { int i; ...
    //奇校验就是在最后一位设置校验位,通过调整最后一位来满足整个发送数据中1的数据为奇数的原则。偶校验同理。 此外还有较完善的CRC校验
    /*
    奇校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为奇数,如:
          1 0110,0101   
            0 0110,0001 
    */
    
    unsigned long  a,c,temp; //a=0x0001;
    unsigned int b,jynum;	 //1 number
    void jy()
    {
       int i;
       temp=0x000F;
       a=0x0001;
       jynum=0;
       for(i=0;i<16;i++)
       {
       	  if(temp&a) 
    	 {
    	   jynum++;
    	  }
    	   temp>>=1; 
       }
       if(jynum%2==0) temp+=0x30000;
       else temp|=0x20000;
       printf("%0x\n",temp);
    }
    void main()
    {
     while(1)
     {
      jy();
      }
    }

    展开全文
  • 具有3-D单奇偶校验产品代码的D-GLDPC代码作为超级校验节点
  • 奇偶校验FPGA源代码

    2010-12-16 17:19:06
    奇偶校验FPGA源代码!!!!!!!!!!!!!!!11
  • 奇偶校验(附代码实现)

    千次阅读 2020-11-25 17:38:16
    奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门...

    定义

    奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。

    简单来说就是:

    奇校验:使完整编码(有效位和校验位)中的"1"的个数为奇数个;
    偶校验:使完整编码(有效位和校验位)中的"1"的个数为偶数个

    示例

    进入的数必须是7位以内的,然后二进制向左移一位,根据二进制中1的个数在后面加上1或者0(加0和没加一样),把二进制中1的个数凑成奇数个或者偶数个。

    数据 (1的个数) 奇校验 偶校验
    000 0011 (2) 000 0011 1 000 0011 0
    000 0100 (1) 000 0100 0 000 0100 1
    111 1111 (7) 111 1111 0 111 1111 1

    代码

    C语言实现:

    #include<stdio.h>
    #include<string.h>
    
    unsigned char add(char data)//奇校验 
    {
        int i, cnt = 0;
    
        for (i = 0; i < 7; i++)//一个char型有7位
        {
            int temp = ((data >> i) & 1);//data >> i是向右移i个位置得到的值,((data >> i) & 1)是与1不同的个数
            cnt += temp;//cnt记录二进制下data中1的个数
        }
    
        unsigned char ans = data << 1;//左移1位 
        
        if (cnt % 2 == 0)//当cnt能够被2整除,即cnt是偶数,即1的个数是偶数
        {
            ans += 1;//在最右边加1
        }
        else//当cnt不能够被2整除,即cnt是奇数,即1的个数是奇数
        {
            ans += 0;//在最右边加0
        }
        return ans;
    }
    
    unsigned char add_2(char data)//偶校验 
    {
        int i, cnt = 0;
    
        for (i = 0; i < 7; i++)//一个char型有7位
        {
            int temp = ((data >> i) & 1);//data >> i是向右移i个位置得到的值,((data >> i) & 1)是与1不同的个数
            cnt += temp;//cnt记录二进制下data中1的个数
        }
    
        unsigned char ans = data << 1;//左移1位 
        
        if (cnt % 2 == 0)//当cnt能够被2整除,即cnt是偶数,即1的个数是偶数
        {
            ans += 0;//在最右边加0
        }
        else//当cnt不能够被2整除,即cnt是奇数,即1的个数是奇数
        {
            ans += 1;//在最右边加1
        }
        return ans;
    }
    
    int main()
    {
        char a;
        unsigned char b;
        scanf("%c", &a);
        b = add(a);
        printf("2进制结果表示为:");//输出b的2进制表示
        for (int i = 7; i >= 0; i--) {
            if (((b>>i) & 1) == 1)
                printf("1");
            else
                printf("0");
        } putchar(10);
    
        printf("8进制结果表示为:%o\n",b);//输出b的8进制表示
    
        printf("10进制结果表示为:%d\n",b);//输出b的10进制表示
    
        printf("16进制结果表示为:%x\n", b);//输出b的16进制表示
        
        return 0;
    }
    

    扩展

    奇偶校验的优缺点:

    1、奇偶校验有两种类型:奇校验和偶校验。奇偶校验位是一个表示给定位数的二进制数中1的个数是奇数或者偶数的二进制数,奇偶校验位是最简单的错误检测码。

    2、传输过程中包括校验位在内的奇数个数据位发生改变,那么奇偶校验位将出错表示传输过程有错误发生。

    3、奇偶校验位是一种错误检测码,但是由于没有办法确定哪一位出错,所以它不能进行错误校正。发生错误时必须扔掉全部的数据,然后从头开始传输数据。

    4、在噪声很多的媒介上成功传输数据可能要花费很长的时间,甚至根本无法实现。

    5、它是使用一位数据能够达到的最好的校验码,并且它仅仅需要一些异或门就能够生成。奇偶校验被广泛应用。

    奇偶校验的用途:
    (1)奇偶校验是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。

    (2)单向奇偶校验(Row Parity)由于一次只采用单个校验位,因此又称为单个位奇偶校验。发送器在数据祯每个字符的信号位后添一个奇偶校验位,接收器对该奇偶校验位进行检查。典型的例子是面向ASCII码的数据信号祯的传输,由于ASCII码是七位码,因此用第八个位码作为奇偶校验位。

    (3)奇偶校验只可以简单判断数据的正确性,从原理上可看出当一位出错,可以准确判断,如同时两个1变成两个0就校验不出来了,只是两位或更多位及校验码在传输过程中出错的概率比较低,奇偶校验可以用的要求比较低的应用下。同时,它不能纠错。在发现错误后,只能要求重发。

    如果对您有帮助的的话,欢迎点赞哦~谢谢

    展开全文
  • 奇偶校验

    2021-03-30 23:15:35
    奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门...

    一、理解

    在一个字节后加一位,代表一个字节中的1的个数的奇偶,由此来校验字节内容。

    二、百度百科

    奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。

    参考

    1. 奇偶校验_百度百科
    展开全文
  • 校验码 奇偶校验 海明码校验

    千次阅读 2020-06-28 17:07:10
    奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中"1"的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门...

    1.奇偶校验

            奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中"1"的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中"1"的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验"1"的个数是否为奇数,从而确定传输代码的正确性。

    工作方式

    为了能检测和纠正内存软错误,首先出现的是内存"奇偶校验"。内存中最小的单位是比特,也称为"位",位只有两种状态分别以1和0来标示,每8个连续的比特叫做一个字节(byte)。不带奇偶校验的内存每个字节只有8位,如果其某一位存储了错误的值,就会导致其存储的相应数据发生变化,进而导致应用程序发生错误。而奇偶校验就是在每一字节(8位)之外又增加了一位作为错误检测位。在某字节中存储数据之后,在其8个位上存储的数据是固定的,因为位只能有两种状态1或0,假设存储的数据用位标示为1、1、1、0、0、1、0、1,那么把每个位相加(1+1+1+0+0+1+0+1=5),结果是奇数。对于偶校验,校验位就定义为1;对于奇校验,则相反。当CPU读取存储的数据时,它会再次把前8位中存储的数据相加,计算结果是否与校验位相一致。从而一定程度上能检测出内存错误,奇偶校验只能检测出错误而无法对其进行修正,同时虽然双位同时发生错误的概率相当低,但奇偶校验却无法检测出双位错误。

    优缺点

    奇偶校验有两种类型:奇校验和偶校验。奇偶校验位是一个表示给定位数的二进制数中1的个数是奇数或者偶数的二进制数,奇偶校验位是最简单的错误检测码。如果传输过程中包括校验位在内的奇数个数据位发生改变,那么奇偶校验位将出错表示传输过程有错误发生。因此,奇偶校验位是一种错误检测码,但是由于没有办法确定哪一位出错,所以它不能进行错误校正。发生错误时必须扔掉全部的数据,然后从头开始传输数据。在噪声很多的媒介上成功传输数据可能要花费很长的时间,甚至根本无法实现。但是奇偶校验位也有它的优点,它是使用一位数据能够达到的最好的校验码,并且它仅仅需要一些异或门就能够生成。奇偶校验被广泛应用。

    2.海明码

    海明码简介

      海明码,小名汉明码(Hamming Code),以发明者理查德·卫斯里·汉明的名字命名。海明码具有检错和纠错双功能,它基于奇偶校验原理,只能检查出某一位错码的位置。当有多位错码时,它就不适用了。

    异或运算
      在了解汉明码之前,先熟悉下异或运算和奇偶校验。
    异或运算,相异为1,相同为0。它也叫模2和、模2加法,本质上是不带进位的加法。
    数学符号是 ⊕;
    计算机符号是“xor”;
    C语言中异或符号是^;
    常用的公式是:(a^b)^a=b,即两个数异或结果在与其中一个数异或得到的是另一个数。
    常用的应用:多用在一些加密算法中,将要加密的数据和一些已知数进行异或运算,得到加密后的数据。
    奇偶校验 :

    海明码的校验位数
      下面本例以1010110为例进行海明码编码。
      第一步先确定需要多少位校验码。
      设数据有n位,校验码有x位。则校验码一共有2x2x种取值方式。其中需要一种取值方式表示数据正确,剩下2x−12x−1种取值方式表示有一位数据出错。因为编码后的二进制串有n+x位,因此x应该满足:2x−1≥n+x2x−1≥n+x   
    使不等式成立的x的最小值就是校验码的位数。在本例中,n=7,解得x=4。
    信息码和校验码的对应关系如下表:

    校验码的位置

      校验码在二进制串中的位置为2的整数幂,即1、2、4、8、16……..剩下的位置是信息码,如图(来源百度),绿色为校验位:

    本例的校验码位置如下图:
    这里写图片描述

    计算校验位的值

    由于奇偶校验原理一样,偶校验的计算更为简单,实际中多用偶校验,本例中也以偶校验进行计算。
    这里写图片描述

    如图中:
    第一行中每个X跳过1位;第一行所有的X值进行异或是0;第一行的X对应的数据位位置转化为二进制最后一位都是1,即是xxx1这种形式;
    第二行中每2个X跳过2位;第二行所有的X值进行异或是0;第二行的X对应的数据位位置转化为二进制倒数第二位一位都是,即是xx1x这种形式;
    第三行中每4个X跳过4位;第三行所有的X值进行异或是0;第三行的X对应的数据位位置转化为二进制倒数第三位一位都是1,即是x1xx这种形式;
    第四行中每8个X跳过8位;第四行所有的X值进行异或是0;第四行的X对应的数据位位置转化为二进制倒数第四位一位都是1,即是1xxx这种形式;
    ……..
    每一行都是从对应的校验位开始校验,即从第2n/22n/2位开始校验,校验2n/22n/2个,然后跳过2n/22n/2个。
    下面计算本例子,将表格中的位置用二进制表示:

     x1的计算:
    x1是第一个校验码,位置对应栏所有最后一位为1(xxx1格式)的相异或为0,即
    这里写图片描述

     

    x1⊕1⊕0⊕0⊕1⊕0=0

    则x1=0;
    x2计算:
    x2是第二个校验码,位置对应栏所有倒数第二位为1(xx1x格式)的相异或为0,即
    这里写图片描述

     

    x2⊕1⊕1⊕0⊕1⊕0=0

     

    则x2=1;
    x3计算:
    x3是第三个校验码,位置对应栏所有倒数第三位为1(x1xx格式)的相异或为0,即
    这里写图片描述

    x3⊕0⊕1⊕0=0

     

    则x3=1;
    x4计算:
    x4是第四个校验码,位置对应栏所有倒数第四位为1(1xxx格式)的相异或为0,即
    这里写图片描述

    x4⊕1⊕1⊕0=0

    则x4=0;
    所以最终的海明码是01110100110。
    这里写图片描述

    海明码的校验
    假设位置为1011的数据传输错误,由0变成了1,则校验纠错的过程为:
      将所有位置形如xxx1, xx1x, x1xx, 1xxx的数据分别异或。
      xxx1: 0^1^0^0^1^1 = 1
      xx1x: 1^1^1^0^1^1 = 1
      x1x: 1^0^1^0 = 0
      1xxx: 0^1^1^1 = 1
     那么出错数据的位置为1011,这样便可得到出错的位置。

    假设同时有两个位置出错,本例中假设位置为1010对应数据由1变成0,,位置为1011对应数据由0变成1,则推出校验纠错过程:
      xxx1: 0^1^0^0^1^1 = 1
      xx1x: 1^1^1^0^0^1 = 0
      x1x: 1^0^1^0 = 0
      1xxx: 0^1^0^1 = 0
    那么校算出的错误位是0001,即第一位;但实际上是倒数第二位和最后一位都有错误,说明海明码不能校验两位以上出错的数据,即海明码只能检测并纠正一位错误。
     

    展开全文
  • 奇偶校验码是一种最简单,最直接。应用最广泛的检错码,他的码距为2,因此他只能检出一位错。实现方法是:由若干位有效信息,再加上一个二进制组成校验码。检验位的取值(0或1)将是整个校验码中“1”的个数为奇数或...
  • 两种新的具有最优修复的2位奇偶校验MDS阵列代码
  • 偶校验矩阵和低密度奇偶校验码的构造方法 摘要 - 低密度奇偶校验(LDPC)码是具有稀疏奇偶校验矩阵的线性分组码。 在本文中,给出了用于生成LDPC码的一些构造方法的简要描述。 这些方法通常分为两类:随机和分析。 ...
  • 奇偶校验判断

    2020-07-30 08:46:54
    奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门...
  • 在调试Modubus协议时需要用到串口的奇偶校验位,但是平时用串口时很少用到奇偶校验位,网上搜相关的历程也很少,将自己写的串口奇偶校验代码分享上来方便以后查阅。 如果用库函数的话,添加奇偶检验位就很简单,在...
  • uart的接收代码,带有可配置的奇偶校验,波特率可配置,三段式状态机,文学功底差.
  • 【实例简介】可以修改奇偶校验位的Android 串口通信demo!!!!!!!!!!!!!!!!【实例截图】【核心代码】串口通信Demo└── 串口通信Demo├── SerialPortDemo│ ├── AndroidManifest.xml│ ├── ...
  • 奇偶校验的matlab实现代码奇偶校验:最常用的检错码是就校验码,他在原编码基础上增加一位奇偶校验位,使得整个编码的“码重”固定为奇数(奇校验)或偶数(偶校验)。其中“码重”即编码中“1”的个数。奇偶校验能发现...
  • 奇偶校验

    2020-04-06 21:55:23
    奇偶校验器 1.1 简介 8bit 奇偶校验器。 1.2 verilog代码 module odd_even_check(din,d_odd,d_even); input [7:0] din; output d_odd,d_even; assign d_odd=^din; assign d_even=~d_odd; endmodule 1.3 test...
  • 先上代码 #include <fstream> #include <iostream> #include <stdlib.h> using namespace std; int main(){ int data[10];//存放数据的数组 int count=0;//变量记录数据中1的个数 ifstream in...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 400
精华内容 160
关键字:

奇偶校验代码