精华内容
下载资源
问答
  • 奇校验

    千次阅读 2019-04-09 21:31:21
    题目 题目描述: 输入个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如’3’,输出:10110011)。...校验数据完整性的方法个字节的8个数据与校验加起来之和有奇数...

    题目

    题目描述:
    输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如’3’,输出:10110011)。
    输入描述:
    输入包括一个字符串,字符串长度不超过100。
    输出描述:
    可能有多组测试数据,对于每组数据,
    对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行。

    理解

    奇校验:
    校验数据完整性的一种方法,一个字节的8个数据位与校验位加起来之和有奇数个 1。
    校验线路在收到数后,通过发生器在校验位填上 0 或 1,以保证和是奇数个 1。
    因此,校验位是 0 时,数据位中应该有奇数个 1;
    而校验位是 1 时,数据位应该有偶数个 1。
    如果读取数据时发现与此规则不符,CPU会下令重新传输数据。

    代码过程:
    进行与运算,得到其二进制形式及 1 的个数;
    根据得到的 1 的个数与整形 1 进行与运算,如果与结果为 0 ,则校验位置为 1;

    代码

    import java.util.Scanner;
    
    public class Main {
        public static void Test(char[] s) {
            //一个字节8个数据位
            int[] result  = new int[8];
    
            for(int i=0; i<s.length; i++) {
                int n = 0x01;
                int j = 7;
                int sum = 0;
    
                //进行7次与运算,得到其二进制形式及 1 的个数
                while(j>0) {
                    // 与运算
                    result[j] = (s[i] & n) == 0 ? 0 : 1;
                    if(result[j] == 1) {
                        sum++;
                    }
                    n = n << 1;
                    j--;
                }
    
                // 进行校验
                if((sum & 1) == 0) {
                    result[0] = 1;
                }
                for(int k=0; k<result.length; k++) {
                    System.out.print(result[k]);
                }
    
                result[0] = 0; //一次完成,重新置0
                System.out.println();
            }
        }
    
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            while(in.hasNext()) {
                String str = in.nextLine();
                Test(str.toCharArray());
            }
        }
    }
    
    
    展开全文
  • 校验方法

    2016-11-09 22:52:22
    奇偶校验 根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。...奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数

    奇偶校验

    根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。
    校验方法
    奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数
    1000110(0)你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还是奇数个。
    偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数
    1000110(1)你就必须加1了这样原来有3个1要想1的个数为偶数就只能添1了
    范例
    串行数据在传输过程中,由于干扰可能引起信息的出错,例如,传输字符‘E’,其各位为:
    0100,0101=45H
    D7 D0
    由于干扰,可能使位变为1,(为什么不变0?)这种情况,我们称为出现了“误码”。我们把如何发现传输中的错误,叫“检错”。发现错误后,如何消除错误,叫“纠错”。最简单的检错方法是“奇偶校验”,即在传送字符的各位之外,再传送1位奇/偶校验位。可采用奇校验或偶校验。
    奇校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为奇数,如:
    1 0110,0101
    0 0110,0101
    偶校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为偶数,如:
    1 0100,0101
    0 0100,0101
    奇偶校验能够检测出信息传输过程中的部分误码(奇数位误码能检出,偶数位误码不能检出),同时,它不能纠错。在发现错误后,只能要求重发。但由于其实现简单,仍得到了广泛使用。有些检错方法,具有自动纠错能力。如循环冗余码(CRC)检错等

    CRC校验

    CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
    工作原理
    循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将C(x)左移R位(可表示成C(x)*2R),这样C(x)的右边就会空出R位,这就是校验码的位置。用 C(x)*2R 除以生成多项式G(x)得到的余数就是校验码。
    对应关系
    多项式和二进制数有直接对应关系:X的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。可以看出:X的最高幂次为R,转换成对应的二进制数有R+1位。
    多项式包括生成多项式G(X)和信息多项式C(X)。
    如生成多项式为G(X)=X4+X3+X+1, 可转换为二进制数码11011。
    而发送信息位 101111,可转换为数据多项式为C(X)=X5+X3+X2+X+1。
    生成多项式
    是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。
    在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接收方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。
    应满足以下条件:
    A、生成多项式的最高位和最低位必须为1。
    B、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0。
    C、不同位发生错误时,应该使余数不同。
    D、对余数继续做除,应使余数循环。
    校验码位数
    CRC校验码位数 = 生成多项式位数 - 1。注意有些生成多项式的简记式中将生成多项式的最高位1省略了。
    生成步骤
    1、将X的最高次幂为R的生成多项式G(X)转换成对应的R+1位二进制数。
    2、将信息码左移R位,相当于对应的信息多项式C(X)*2R。
    3、用生成多项式(二进制数)对信息码做除,得到R位的余数(注意:这里的二进制做除法得到的余数其实是模2除法得到的余数,并不等于其对应十进制数做除法得到的余数。)。
    4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。
    【例】假设使用的生成多项式是G(X)=X3+X+1。4位的原始报文为1010,求编码后的报文。
    解:
    1、将生成多项式G(X)=X3+X+1转换成对应的二进制除数1011。
    2、此题生成多项式有4位(R+1)(注意:4位的生成多项式计算所得的校验码为3位,R为校验码位数),要把原始报文C(X)左移3(R)位变成1010 000
    3、用生成多项式对应的二进制数对左移3位后的原始报文进行模2除(高位对齐),相当于按位异或:
    1010000
    1011
    ———–】
    0001000
    0001011
    ———-】
    0000011
    得到的余位011,所以最终编码为:1010 011
    原则
    若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得
    V(x)=A(x)g(x)=xRm(x)+r(x);
    其中: m(x)为K次原始的信息多项式, r(x)为R-1次校验多项式(即CRC校验和),
    g(x)称为生成多项式:
    g(x)=g0+g1x1+ g2x2+…+g(R-1)x(R-1)+gRxR
    发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC码字。
    生成方法
    借助于模2除法则,其余数为校验字段。
    例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1
    假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001
    x4m(x)=x10+x8+x7+x4 对应的代码记为:10110010000;
    采用模2除法则: 得余数为: 1010(即校验字段为:1010)
    发送方:发出的传输字段为: 1 0 1 1 0 0 1 1010
    信息字段 校验字段
    接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法)
    如果能够除尽,则正确,
    给出余数(1010)的计算步骤:
    除法没有数学上的含义,而是采用计算机的模二除法,即除数和被除数做异或运算。进行异或运算时除数和被除数最高位对齐,按位异或。
    10110010000
    ^11001
    ————————–】
    01111010000
    1111010000
    ^11001
    ————————-】
    0011110000
    11110000
    ^11001
    ————————–】
    00111000
    111000
    ^11001
    ——————-】
    001010
    则四位CRC校验码就为:1010。
    利用CRC进行检错的过程可简单描述为:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(CRC码),附在原始信息后边,构成一个新的二进制码序列数共k+r位,然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则,在差错控制理论中称为“生成多项式”。

    海明码校验

    将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。实质上,海明校验是一种多重校验。

    假设为k个数据位设置r个校验位,则校验位能表示2^r个状态,可用其中的一个状态指出 “没有发生错误”,用其余的2 ^r -1个状态指出有错误发生在某一位,包括k个数据位和r个校验位,因此校验位的位数应满足如下关系:
    2^r ≥ k + r + 1 (2.7)
    如要能检出与自动校正一位错,并能同时发现哪位错,此时校验位的位数r和数据位的位数k应满足下述关系:
    2^r-1 ≥ k + r (2.8)
    按上述不等式,可计算出数据位k与校验位r的对应关系,如表2.2所示。

    表2.2
    k值 最小r值
    2~4 3
    5~11 4
    12~26 5
    27~57 6
    58~120 7
    分组原则
    编辑
    在海明码中, 位号数(1、2、3、……、n)为2的权值的那些位,即:
    1(2^0)、2(2^1)、4(2^2)、8(2^3)、…2^(r-1)位,作为奇偶校验位,并记作: P1、P2、P3 、P4、…Pr,余下各位则为有效信息位。例如: N=11(海明码位数)K=7(数据位数)r=4(校验位) ,相应海明码可表示位号为: 1, 2, 3, 4 ,5 ,6, 7, 8, 9 ,10 ,11,校验位P占第1,2,4,8位,其他位为有效信息位,海明码中的校验位分别标示为P1,P2,P3,P4… Pr ,并被信息位中的一至若干位所校验,其规律是:第i位,由校验位位号之和等于i的那些校验位所校验,如:海明码的位号为3,它被P1P2(位号分别为1,2)所校验,海明码的位号为5,它被P1P3(位号分别为1,4)所校验。归并起来: 形成了4个小组,每个小组一个校验位,校验位的取值,仍采用奇偶校验方式确定。
    设计海明码编码的关键技术,是合理地把每个数据位分配到r个校验组中,以确保能发现码字中任何一位出错;若要实现纠错,还要求能指出是哪一位出错,对出错位求反则得到该位的正确值。例如,当数据位为3位(用D3 D2 D1表示)时,检验位应为4位(用P4 P3 P2 P1表示)。可通过表2.3表示的关系,完成把每个数据位划分在形成不同校验位的偶校验值的逻辑表达式中。
    表2.3 校验位与数据位的对应关系
    在P1、P2、P3、P4竖列相应行分别填1,
    在该4列的低3横行其它位置分别填0,
    在最顶横行的每个尚空位置都分别填1。
    若只看低3横行,右4竖列的3个bit的组合值分别为十进制的1、2、4、0,则分配 D1 D2 D3列的组合值为3 5 6,保证低3横行各竖列的编码值各不相同。
    表中D3 D2 D1为三位数据位,P4 P3 P2 P1为四位校验位。其中低三位中的每一个校验位P3 P2 P1的值,都是用三个数据位中不同的几位通过偶校验运算规则计算出来的。其对应关系是:对Pi(i的取值为1~3),总是用处在Pi取值为1的行中的、用1标记出来的数据位计算该Pi的值。最高一个校验位P4,被称为总校验位,它的值,是通过对全部三个数据位和其它全部校验位(不含P4本身)执行偶校验计算求得的。
    形成各校验位的值的过程叫做编码,按刚说明的规则,4个校验位所用的编码方程为:
    P4 = D3 D2 D1 P3 P2 P1
    P3 = D3 D2
    P2 = D3 D1
    P1 = D2 D1
    由多个数据位和多个校验位组成的一个码字,将作为一个数据单位处理,例如被写入内存或被传送走。之后,在执行内存读操作或在数据接收端,则可以对得到的码字,通过偶校验来检查其合法性,通常称该操作过程为译码,所用的译码方程为:
    S4 = P4 D3 D2 D1 P3 P2 P1
    S3 = P3 D3 D2
    S2 = P2 D3 D1
    S1 = P1 D2 D1
    对应关系
    编辑
    译码方程和编码方程的对应关系很简单。译码方程,是用一个校验码和形成这个校验码的编码方程执行异或,实际上是又一次执行偶校验运算。通过检查四个S的结果,可以实现检错纠错的的目的。实际情况是,当译码求出来的S4、S3、S2、S1的得值与表2.3中的那一列的值相同,就说明是哪一位出错;故人们又称表2.3为出错模式表。若出错的是数据位,对其求反则实现纠错;若出错的是校验位则不必理睬。举例如下:
    任何一位(含数据位、校验位)均不错,则四个S都应为0值;
    任何单独一位数据位出错,四个S中会有三个为1;如D3错,则S4 S3 S2 S1为1110。
    若单独一位校验位出错,四个S中会有一个或两个为1;如P1错,S4 S3 S2 S1为1001,如P4错,S4 S3 S2 S1为1000。
    任何两位(含数据位、校验位)同时出错,S4一定为0,而另外三个S位一定不全为0,此时只知道是两位同时出错,但不能确定是哪两位出错,故已无法纠错。如D1、 P2出错,会使S4 S3 S2 S1为0001。请注意,S4的作用在于区分是奇数位出错还是偶数位出错,S4为1是奇数位错,为0是无错或偶数位错。这不仅为发现两位错所必需,也是为确保能发现并改正一位错所必需的。若不设置S4,某种两位出错对几个S的影响与单独另一位出错可能是一样的(不必花费精力推敲),此时若不加以区分,简单地按一位出错自动完成纠错处理反而会帮倒忙。

    展开全文
  • 三种校验方法

    千次阅读 2016-11-05 19:54:15
    奇偶校验根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。...奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数 10001

    奇偶校验

    根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。
    校验方法
    奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数
    1000110(0)你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还是奇数个。
    偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数
    1000110(1)你就必须加1了这样原来有3个1要想1的个数为偶数就只能添1了
    范例
    串行数据在传输过程中,由于干扰可能引起信息的出错,例如,传输字符‘E’,其各位为:
    0100,0101=45H
    D7 D0
    由于干扰,可能使位变为1,(为什么不变0?)这种情况,我们称为出现了“误码”。我们把如何发现传输中的错误,叫“检错”。发现错误后,如何消除错误,叫“纠错”。最简单的检错方法是“奇偶校验”,即在传送字符的各位之外,再传送1位奇/偶校验位。可采用奇校验或偶校验。
    奇校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为奇数,如:
    1 0110,0101
    0 0110,0101
    偶校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为偶数,如:
    1 0100,0101
    0 0100,0101
    奇偶校验能够检测出信息传输过程中的部分误码(奇数位误码能检出,偶数位误码不能检出),同时,它不能纠错。在发现错误后,只能要求重发。但由于其实现简单,仍得到了广泛使用。有些检错方法,具有自动纠错能力。如循环冗余码(CRC)检错等

    CRC校验

    CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
    工作原理
    循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将C(x)左移R位(可表示成C(x)*2R),这样C(x)的右边就会空出R位,这就是校验码的位置。用 C(x)*2R 除以生成多项式G(x)得到的余数就是校验码。
    对应关系
    多项式和二进制数有直接对应关系:X的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。可以看出:X的最高幂次为R,转换成对应的二进制数有R+1位。
    多项式包括生成多项式G(X)和信息多项式C(X)。
    如生成多项式为G(X)=X4+X3+X+1, 可转换为二进制数码11011。
    而发送信息位 101111,可转换为数据多项式为C(X)=X5+X3+X2+X+1。
    生成多项式
    是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。
    在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接收方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。
    应满足以下条件:
    A、生成多项式的最高位和最低位必须为1。
    B、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0。
    C、不同位发生错误时,应该使余数不同。
    D、对余数继续做除,应使余数循环。
    校验码位数
    CRC校验码位数 = 生成多项式位数 - 1。注意有些生成多项式的简记式中将生成多项式的最高位1省略了。
    生成步骤
    1、将X的最高次幂为R的生成多项式G(X)转换成对应的R+1位二进制数。
    2、将信息码左移R位,相当于对应的信息多项式C(X)*2R。
    3、用生成多项式(二进制数)对信息码做除,得到R位的余数(注意:这里的二进制做除法得到的余数其实是模2除法得到的余数,并不等于其对应十进制数做除法得到的余数。)。
    4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。
    【例】假设使用的生成多项式是G(X)=X3+X+1。4位的原始报文为1010,求编码后的报文。
    解:
    1、将生成多项式G(X)=X3+X+1转换成对应的二进制除数1011。
    2、此题生成多项式有4位(R+1)(注意:4位的生成多项式计算所得的校验码为3位,R为校验码位数),要把原始报文C(X)左移3(R)位变成1010 000
    3、用生成多项式对应的二进制数对左移3位后的原始报文进行模2除(高位对齐),相当于按位异或:
    1010000
    1011
    ———–】
    0001000
    0001011
    ———-】
    0000011
    得到的余位011,所以最终编码为:1010 011
    原则
    若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得
    V(x)=A(x)g(x)=xRm(x)+r(x);
    其中: m(x)为K次原始的信息多项式, r(x)为R-1次校验多项式(即CRC校验和),
    g(x)称为生成多项式:
    g(x)=g0+g1x1+ g2x2+…+g(R-1)x(R-1)+gRxR
    发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC码字。
    生成方法
    借助于模2除法则,其余数为校验字段。
    例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1
    假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001
    x4m(x)=x10+x8+x7+x4 对应的代码记为:10110010000;
    采用模2除法则: 得余数为: 1010(即校验字段为:1010)
    发送方:发出的传输字段为: 1 0 1 1 0 0 1 1010
    信息字段 校验字段
    接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法)
    如果能够除尽,则正确,
    给出余数(1010)的计算步骤:
    除法没有数学上的含义,而是采用计算机的模二除法,即除数和被除数做异或运算。进行异或运算时除数和被除数最高位对齐,按位异或。
    10110010000
    ^11001
    ————————–】
    01111010000
    1111010000
    ^11001
    ————————-】
    0011110000
    11110000
    ^11001
    ————————–】
    00111000
    111000
    ^11001
    ——————-】
    001010
    则四位CRC校验码就为:1010。
    利用CRC进行检错的过程可简单描述为:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(CRC码),附在原始信息后边,构成一个新的二进制码序列数共k+r位,然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则,在差错控制理论中称为“生成多项式”。

    海明码校验

    将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。实质上,海明校验是一种多重校验。

    假设为k个数据位设置r个校验位,则校验位能表示2^r个状态,可用其中的一个状态指出 “没有发生错误”,用其余的2 ^r -1个状态指出有错误发生在某一位,包括k个数据位和r个校验位,因此校验位的位数应满足如下关系:
    2^r ≥ k + r + 1 (2.7)
    如要能检出与自动校正一位错,并能同时发现哪位错,此时校验位的位数r和数据位的位数k应满足下述关系:
    2^r-1 ≥ k + r (2.8)
    按上述不等式,可计算出数据位k与校验位r的对应关系,如表2.2所示。

    表2.2
    k值 最小r值
    2~4 3
    5~11 4
    12~26 5
    27~57 6
    58~120 7
    分组原则
    编辑
    在海明码中, 位号数(1、2、3、……、n)为2的权值的那些位,即:
    1(2^0)、2(2^1)、4(2^2)、8(2^3)、…2^(r-1)位,作为奇偶校验位,并记作: P1、P2、P3 、P4、…Pr,余下各位则为有效信息位。例如: N=11(海明码位数)K=7(数据位数)r=4(校验位) ,相应海明码可表示位号为: 1, 2, 3, 4 ,5 ,6, 7, 8, 9 ,10 ,11,校验位P占第1,2,4,8位,其他位为有效信息位,海明码中的校验位分别标示为P1,P2,P3,P4… Pr ,并被信息位中的一至若干位所校验,其规律是:第i位,由校验位位号之和等于i的那些校验位所校验,如:海明码的位号为3,它被P1P2(位号分别为1,2)所校验,海明码的位号为5,它被P1P3(位号分别为1,4)所校验。归并起来: 形成了4个小组,每个小组一个校验位,校验位的取值,仍采用奇偶校验方式确定。
    设计海明码编码的关键技术,是合理地把每个数据位分配到r个校验组中,以确保能发现码字中任何一位出错;若要实现纠错,还要求能指出是哪一位出错,对出错位求反则得到该位的正确值。例如,当数据位为3位(用D3 D2 D1表示)时,检验位应为4位(用P4 P3 P2 P1表示)。可通过表2.3表示的关系,完成把每个数据位划分在形成不同校验位的偶校验值的逻辑表达式中。
    表2.3 校验位与数据位的对应关系
    在P1、P2、P3、P4竖列相应行分别填1,
    在该4列的低3横行其它位置分别填0,
    在最顶横行的每个尚空位置都分别填1。
    若只看低3横行,右4竖列的3个bit的组合值分别为十进制的1、2、4、0,则分配 D1 D2 D3列的组合值为3 5 6,保证低3横行各竖列的编码值各不相同。
    表中D3 D2 D1为三位数据位,P4 P3 P2 P1为四位校验位。其中低三位中的每一个校验位P3 P2 P1的值,都是用三个数据位中不同的几位通过偶校验运算规则计算出来的。其对应关系是:对Pi(i的取值为1~3),总是用处在Pi取值为1的行中的、用1标记出来的数据位计算该Pi的值。最高一个校验位P4,被称为总校验位,它的值,是通过对全部三个数据位和其它全部校验位(不含P4本身)执行偶校验计算求得的。
    形成各校验位的值的过程叫做编码,按刚说明的规则,4个校验位所用的编码方程为:
    P4 = D3 D2 D1 P3 P2 P1
    P3 = D3 D2
    P2 = D3 D1
    P1 = D2 D1
    由多个数据位和多个校验位组成的一个码字,将作为一个数据单位处理,例如被写入内存或被传送走。之后,在执行内存读操作或在数据接收端,则可以对得到的码字,通过偶校验来检查其合法性,通常称该操作过程为译码,所用的译码方程为:
    S4 = P4 D3 D2 D1 P3 P2 P1
    S3 = P3 D3 D2
    S2 = P2 D3 D1
    S1 = P1 D2 D1
    对应关系
    编辑
    译码方程和编码方程的对应关系很简单。译码方程,是用一个校验码和形成这个校验码的编码方程执行异或,实际上是又一次执行偶校验运算。通过检查四个S的结果,可以实现检错纠错的的目的。实际情况是,当译码求出来的S4、S3、S2、S1的得值与表2.3中的那一列的值相同,就说明是哪一位出错;故人们又称表2.3为出错模式表。若出错的是数据位,对其求反则实现纠错;若出错的是校验位则不必理睬。举例如下:
    任何一位(含数据位、校验位)均不错,则四个S都应为0值;
    任何单独一位数据位出错,四个S中会有三个为1;如D3错,则S4 S3 S2 S1为1110。
    若单独一位校验位出错,四个S中会有一个或两个为1;如P1错,S4 S3 S2 S1为1001,如P4错,S4 S3 S2 S1为1000。
    任何两位(含数据位、校验位)同时出错,S4一定为0,而另外三个S位一定不全为0,此时只知道是两位同时出错,但不能确定是哪两位出错,故已无法纠错。如D1、 P2出错,会使S4 S3 S2 S1为0001。请注意,S4的作用在于区分是奇数位出错还是偶数位出错,S4为1是奇数位错,为0是无错或偶数位错。这不仅为发现两位错所必需,也是为确保能发现并改正一位错所必需的。若不设置S4,某种两位出错对几个S的影响与单独另一位出错可能是一样的(不必花费精力推敲),此时若不加以区分,简单地按一位出错自动完成纠错处理反而会帮倒忙。

    展开全文
  • 校验方法和校验码

    2012-04-07 21:46:19
    、码距 所谓码距是指在个编码系统中任意两个合法编码之间至少...采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置个奇偶校验,用它使这组代码中“1”的个数为奇数或偶数。

    一、码距

    所谓码距是指在一个编码系统中任意两个合法编码之间至少要有多少个二进制位不同,即任意两个码字的最小距离。

    三种校验码:

    一、奇偶校验码

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

    奇偶校验的开销比较小,在很多情况下都被用作数据的校验码。检验位的添加方法可以有三种形式:

    (1)水平奇偶校验码。为每一个数据的编码添加校验位。

    (2)垂直奇偶校验码。校验位的添加不是针对单个数据,而是为一组数据的相同位添加一个校验位,形成改组数据的一个奇(偶)校验码。

    (3)水平垂直奇偶校验。先对一组数据进行垂直奇(偶)校验,所得结果(连同该垂直校验码)再添加一位水平校验码。

    二、海明码

    三、循环冗余校验码


    展开全文
  • 常见的数据校验方法

    2019-08-09 18:00:54
    校验,是为保护数据的完整性,用种指定的算法对原始数据计算出的个校验值。...奇校验:所有传送的数(含字符的各数和校验)中,“1”的个数为奇数,如: 1 0110,0101 0 0110,0001 偶校验:...
  • 奇偶校验位

    千次阅读 2020-11-01 08:48:58
    在数据传输前附加一位奇校验位,用来表示传输的数据中"1"的个数是奇数还是偶数,为奇数时,校验位置为"0",否则置为"1",用以保持数据的奇偶性不变。例如,需要传输"11001110",数据中含5个"1",所以其奇校验位为"0...
  • LinuxC三种校验方法

    2016-11-06 19:01:32
    奇偶校验 根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。...奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数
  • Linux C——常用校验方法

    千次阅读 2016-11-05 22:40:34
    1.奇偶校验  奇偶校验是种校验代码传输正确性的方法。根据被传输的组二进制代码的数中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶 校验。...奇校验:所有传送的数
  • [Linux C编程]校验方法

    2016-11-07 18:34:11
    校验方法 奇偶校验 根据被传输的组二进制代码的数中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置个奇偶校验,用它使这组代码...
  • 网络数据传输的三种校验方法

    万次阅读 2016-11-05 20:28:59
    一、奇偶校验 根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。...奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇
  • 奇偶校验根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。...奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数 10
  • 校验

    2016-11-05 20:44:38
    一、奇偶校验 根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。...奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为
  • 奇偶校验,CRC校验和海明校验

    千次阅读 2016-11-05 23:37:03
    一、奇偶校验 根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。...奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为
  • 校验码 奇偶校验 海明码校验

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

    千次阅读 2016-11-06 09:02:56
    一、奇偶校验 根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。...奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为
  • 奇偶校验

    2020-07-15 16:05:05
    奇偶校验(Parity Check)是一种校验代码bai传输正确性的方法。根据du被传输的一组二zhi进制代码的数位...奇偶校验需要一位校验位,即使用串口通信的方式2或方式3(8位数据位+1位校验位)。奇校验(odd parity):让传输
  • 8数据的奇偶校验verilog程序_zt

    千次阅读 2018-09-23 14:23:13
    实现奇偶检验的算法就是,如果是偶校验,只要将该8位数据第一位和第二位进行异或,然后将得到的结果和第三位异或,依次下去,直到和第七位异或, 这样得到的最后结果,就是偶校验位;如果是奇校验,将上面的偶校验位...
  • 校验码 -> 奇偶校验

    千次阅读 2014-05-15 15:28:45
    这种方法通过在编码中增加一位校验位来使编码中1的个数为奇数或者偶数 位数是奇数的就叫做奇校验,偶数就叫做偶校验 通过这种方式可以使码距变成2 举例 下例取自wikipedia 原数据(7位) 1的个数 偶校验(8位) ...
  • 校验码(奇偶校验码)

    千次阅读 2020-09-21 21:05:16
    下图为奇校验和偶校验的设置方法。 例如:M的ASCII码77,二进制表示为01001101,若要求奇校验且校验在最高,则需要使1的个数为奇数。现原码中的1的个数为偶数,则校验取值为1,将最高设置为1,则M的二进制...
  • 校验

    2020-09-03 14:36:07
    校验码 计算机系统运行时,各个部件之间要进行数据交换,有两种方法可以...其基本思想是:通过在编码中增加一位校验位来使编码中1的个数为奇数(奇校验)或者为偶数(偶校验),从而使码距变为2。对于奇校验,它可以
  • 51单片机串行通信奇偶校验的设置方法

    万次阅读 多人点赞 2016-01-25 11:30:18
    51单片机串行通信奇偶校验的设置方法悬赏分:10 - 解决时间:2009-12-5 10:21 ;====================================...有时为了提高准确度,需要增加个“校验位或者“偶”校验位。对于高级语言的做法是很简单的
  • 、为什么要使用校验码? 数据在计算机系统内加工、存取和传送的过程中可能会产生错误。为了减少和避免这类错误,引入了数据校验码。...在上图方案一中,使用奇校验方法,则A的码字变为100,B的码字变为001。码字中的
  • 奇校验,若1的个数为奇数,则校验为0,若1的个数为偶数,则校验为1. 偶校验,若1的个数为奇数,则校验为1,若1的个数为偶数,则校验为0. ( 原理是:当数据被传输过去,通过1的个数来判断数据传输是否出错。

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 138
精华内容 55
关键字:

一位奇校验方法