精华内容
下载资源
问答
  • 循环冗余码

    2013-03-28 14:41:35
    循环冗余码(CRC)基础知识,涉及基本概念、多项式表达及移位寄存器实现
  • 循环冗余码的生成和验证程序,,有文档,有报告,有心得,完整的一份报告。
  • 本资源为基于循环冗余码的差错控制系统仿真。循环冗余码是最常见的校验码,有信息位和校验位两个部分组成。
  • 循环冗余码校验原理

    2012-05-23 14:44:29
    循环冗余码校验原理
  • CRC 循环冗余码

    2020-09-13 13:45:49
    循环冗余码(CRC),又称为多项式码,是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。CRC 的工作方法是在发送端产生一个冗余码,附加在信息位后面一起发送到接收端,接收...

    微信搜索:编程笔记本。获取更多干货!
    微信搜索:编程笔记本。获取更多干货!

    点击上方蓝字关注我,我们一起学编程
    欢迎小伙伴们分享、转载、私信、赞赏

    循环冗余码(CRC)

    微信搜索:编程笔记本。获取更多干货!
    微信搜索:编程笔记本。获取更多干货!


    概念:

    循环冗余码(CRC),又称为多项式码,是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。CRC 的工作方法是在发送端产生一个冗余码,附加在信息位后面一起发送到接收端,接收端收到的信息按发送端形成循冗余码同样的算法进行校验,如果发现错误,则通知发送端重发。

    模 2 运算:

    模 2 运算的加减乘除与常规二进制运算类似,不同的一点是:无进位、不借位

    一个例子:

        1001
      - 1100
    -----------
        0101
    

    生成多项式:

    比如,G(x) = x^4 + x^3 + 1 是一个生成多项式,那么该生成多项式对应的二进制比特串就是:11001 。即:G(x) = 1*x^4 + 1*x^3 + 0*x^2 + 0*x^1 + 1*x^0 ,取对应系数即可。

    步骤:

      1. 假设生成多项式为 m 位,则在需要发送的数据帧后增加 m-1 个 0
      1. 将增广后的数据帧除以生成多项式,取出余数,替换前述操作中的 m-1 个 0 并发送。
      1. 接收端接收到数据帧后,用同样的生成多项式去除这个数据帧,若余数不为 0 ,则表示出错

    一个例子:

    微信搜索:编程笔记本。获取更多干货!
    微信搜索:编程笔记本。获取更多干货!

    要发送的数据帧为 1101011011 ,采用的 CRC 生成多项式是 P(x) = x^4 + x + 1

    1、生成多项式的二进制比特串为:10011 ,修改数据帧:11010110110000
    2、模 2 除法运算:取得余数为 1110 ,修改数据帧:11010110111110

                 1100001010
           -----------------
     10011 | 11010110110000
             10011
    ------------------------
              10011
              10011
    ------------------------
                  010110
                   10011
    ------------------------
                     10100
                     10011
    ------------------------
                       1110
    

    3、接收方用同样的方法进行除法运算,得到的余数为 0 ,表示数据帧未发生错误。

                 1100001010
           -----------------
     10011 | 11010110111110
             10011
    ------------------------
              10011
              10011
    ------------------------
                  010111
                   10011
    ------------------------
                     10011
                     10011
    ------------------------
                         00
    

    微信搜索:编程笔记本。获取更多干货!
    微信搜索:编程笔记本。获取更多干货!

    展开全文
  • 计算循环冗余码 Description 计算机网络中采用循环冗余码来校验数据的正确性。其原理是:发送方计算出待发送的二进制数据的循环冗余码,并随同原数据一起发送到接收方;接收方通过重新计算接收到的数据...

    计算循环冗余码

    Description

    计算机网络中采用循环冗余码来校验数据的正确性。其原理是:发送方计算出待发送的二进制数据的循环冗余码,并随同原数据一起发送到接收方;接收方通过重新计算接收到的数据的循环冗余码,并和收到的循环冗余码进行比较,如果两者相同则可判定所收到的数据是正确的,否则说明数据是错误的。其中计算二进制数据的循环冗余码的计算过程如下:
    1.协议事先约定一个二进制生成表达式,本题设为10011;
    2.将待发送的二进制数据串的末尾加4个0;
    3.将补上0的数据串按模2除法除于生成表达式,取余数;
    4.该余数就是该二进制数据串的循环冗余码。
    
    例如: 
    数据串为:1101011011
    生成表达式为:10011
    循环冗余码为:1110
    
    计算过程如下: 

    根据上述的计算方法,请编写一个循环冗余码计算程序,假设二进制数据串的长度不超过20位,生成表达式固定为10011。

    Input

    输入的第一行含一个正整数k (1<=k<=10),表示测试例的个数。后面紧接着k行,每行对应一个测试例,含一个N位二进制串(1<=N<=20),代表数据。

    Output

    每个测试例对应一行输出,含一个5位二进制串,表示循环冗余码。

    Sample Input

    2110101101110101010

    Sample Output

    0111001001

    题目很简单,加上正在学计算机网络,对这个还比较熟悉,可惜的是WA 了好几次,

    有几个小地方记不太清了

    其实:

    将补上0的数据串按模2除法除于生成表达式,取余数
    这一句话直接让每一位做异或就好了

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<string>
    #include<vector>
    #include<stack>
    #include<bitset>
    #include<cstdlib>
    #include<sstream>
    #include<cctype>
    #include<cmath>
    #include<set>
    #include<list>
    #include<deque>
    #include<map>
    #include<queue>
    using namespace std;
    typedef long long ll;
    const double PI=acos(-1.0);
    const double eps=1e-6;
    const int INF=0x3f3f3f3f;
    const int maxn=1234;
    
    int T;
    int n,m;
    int ans,flag;
    
    int main()
    {
        int t;
        scanf("%d",&t);
        char a[50];
        while(t--){
            scanf("%s",a);
    
            int tt=10011;
            int i=5;
            int len =strlen(a);
            a[len]='0';
            a[len+1]='0';
            a[len+2]='0';
            a[len+3]='0';
            a[len+4]='\0';
            len+=4;
            int tmp=(a[0]-'0')*10000+(a[1]-'0')*1000+(a[2]-'0')*100+(a[3]-'0')*10+(a[4]-'0');
            if(a[0]-'0'==1)
                tmp=((a[0]-'0')^1)*10000+((a[1]-'0')^0)*1000+((a[2]-'0')^0)*100+((a[3]-'0')^1)*10+(a[4]-'0')^1;
            else
                tmp=((a[0]-'0')^0)*10000+((a[1]-'0')^0)*1000+((a[2]-'0')^0)*100+((a[3]-'0')^0)*10+(a[4]-'0')^0;
                //printf("%d\n",tmp);
    
               int ttt=1;
            while(i<len){
                    //printf("%d %d\n",ttt++,tmp);
                tmp=tmp*10+a[i++]-'0';
            if(tmp/10000==1)
                tmp=((tmp/10000)^1)*10000+((tmp/1000%10)^0)*1000+((tmp/100%10)^0)*100+((tmp/10%10)^1)*10+(tmp%10)^1;
            else
                tmp=((tmp/10000)^0)*10000+((tmp/1000%10)^0)*1000+((tmp/100%10)^0)*100+((tmp/10%10)^0)*10+(tmp%10)^0;
            }
    
            printf("%05d\n",tmp);
        }
    
    
    
    
        return 0;
    }



    展开全文
  • 关于循环冗余码

    2021-02-02 22:58:36
    关于循环冗余码具体是干嘛的,举个例子就可明白。 你要给远在他乡的好友送礼物,假设路上艰险重重,你怎么保证你的好友收到的礼物一定是你给他发送的原品呢?这时你想到了一个办法,在礼物中额外加点东西,针对这个...

    关于循环冗余码具体是干嘛的,举个例子就可明白。
    你要给远在他乡的好友送礼物,假设路上艰险重重,你怎么保证你的好友收到的礼物一定是你给他发送的原品呢?这时你想到了一个办法,在礼物中额外加点东西,针对这个新的礼物设计一种规则,使得你的好友用这套规则打开礼物后呈现你俩约定好的模样,如果能够实现那么就是原品,如果实现不了那么礼物就被动了手脚了。
    话锋一转,怎么保证传送的比特不出差错?可以在比特中加点东西(新比特),这些新比特怎么来的?就是用那个余数加在原比特串的后面,然后接收方用这个新的比特串除以事先商量好的除数就可以知晓比特串到底有没有被动过手脚了。
    问题的关键是怎么得到那个余数呢?有点小伙伴想,直接用原比特串除以除数嘛?但是这样不行呀,新比特既然加了余数进去,这个被除数也应该加点东西保证二者长度一致。如果除数n位,那就加n-1个0。好了,被除数、除数都知道,余数就可以得出了,这时候你偷偷把余数加在原比特串末尾,等你的好友用得到的比特串除以你俩约定好的除数,看是否结果为0就可以判断你发的比特串有没有被动过手脚啦。

    以上属个人拙见,希望可以加深理解,温故而知新,记录下来是为了更好的学习,欢迎批评指正。

    展开全文
  • 通过硬件描述语言Verilog实现CRC循环冗余码的编码,并已经在CYCLONE的硬件上调试成功
  • CRC循环冗余码校验

    2012-05-21 21:55:10
    CRC循环冗余码校验,计算机网络课程中会用到。JAVA实现
  • CRC循环冗余码原理简述及python代码实现 CRC循环冗余码在计算机组成原理和计算机网络中都有重要的地位,但也不太好懂。 本人通过华南理工大学袁华老师的计算机网络(中国大学mooc平台)课程对CRC编码有了一点肤浅的...

    CRC循环冗余码原理简述及python代码实现

    CRC循环冗余码在计算机组成原理和计算机网络中都有重要的地位,但也不太好懂。
    本人通过华南理工大学袁华老师的计算机网络(中国大学mooc平台)课程对CRC编码有了一点肤浅的认识,结合自己踩过的一些坑,最后给出CRC循环冗余码的python实现,希望能对想了解CRC编码的同学有点帮助。本文中引用了袁华老师课件中的图片,侵删。

    如对程序实现感兴趣可直接跳过前面内容

    要理解CRC的运算过程,先要了解模2运算,这是CRC编码中的运算规则。
    CRC编码中使用模2运算来代替普通的减法运算
    简单来说,模2运算就是对两个长度相同的二进制数进行异或运算。

    接下来给出一个简单的CRC编码的实例
    在这里插入图片描述
    在需要加密的数据(图片里是一个数据桢)后面添加(除数位数-1)位的0,用这个数对除数做模2除法。并把最后得到的余数加到原始帧的后面,得到编码后的数据。

    在这里插入图片描述
    这个图片做了详细介绍

    接下来是解码过程
    在这里插入图片描述
    解码过程和加密过程类似,用需要解码的数据对除数做模2除法,如果余数为0,则代码没有检测出错误(有可能发生了错误但刚好余数也为0)
    如此可以完成CRC的编码和解码过程。

    接下来是python代码实现。

    def XOR(str1, str2):    #实现模2减法
        ans = ''
        if str1[0] == '0':
            return '0', str1[1:]
        else:
            for i in range(len(str1)):
                if (str1[i] == '0' and str2[i] == '0'):
                    ans = ans + '0'
                elif (str1[i] == '1' and str2[i] == '1'):
                    ans = ans + '0'
                else:
                    ans = ans + '1'
        return '1', ans[1:]
                    
    
    def CRC_Encoding(str1,str2):    #CRC编码
        lenght = len(str2)
        str3 = str1 + '0'*(lenght-1)
        ans = ''
        yus = str3[0:lenght]
        for i in range(len(str1)):
            str4,yus = XOR(yus, str2)
            ans = ans+str4
            if i == len(str1)-1:
                break
            else:
                yus = yus+str3[i+lenght]
        ans = str1 + yus
        return ans
    
    def CRC_Decoding(str1,str2):    #CRC解码
        lenght = len(str2)
        str3 = str1 + '0'*(lenght-1)
        ans = ''
        yus = str3[0:lenght]
        for i in range(len(str1)):
            str4,yus = XOR(yus, str2)
            ans = ans+str4
            if i == len(str1)-1:
                break
            else:
                yus = yus+str3[i+lenght]
        return yus == '0'*len(yus)
    
    def main():    #主函数
        while True:
            print('=='*30)
            setting = input("请输入运行模式(0:退出,1:CRC编码,2:CRC验证):")
            if setting == '0':
                break
            elif setting == '1':
                str1 = input("请输入数据:")
                str2 = input("请输入生成比特模式:")
                str3 = CRC_Encoding(str1,str2)
                print("{} 编码后为: {}".format(str1,str3))
            elif setting == '2':
                str1 = input("请输入验证数据:")
                str2 = input("请输入生成比特模式:")
                flag = CRC_Decoding(str1,str2)
                if flag:
                    print("验证完成,未出错")
                else:
                    print("sorry 验证数据已出错")
            else:
                print("请正确输入:")
    
    main()
    

    好了,这就是我对CRC编码的了解,希望能对你有所帮助。代码实现可以帮助你验证你的计算是否错误,仅做学习用途。

    展开全文
  • Problem 1078 计算循环冗余码 Accept: 493 Submit: 910 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description 计算机网络中采用循环冗余码来校验数据的正确性。其原理是:发送方计算出待发送的二进制...
  • 计网笔记:CRC循环冗余码

    千次阅读 2020-07-05 20:18:39
    CRC循环冗余码 CRC循环冗余码是在通信领域经常用来用作检错编码的方式。 计算冗余码 我们可以通过以下步骤计算出冗余码: (1)加0:在要发送的数据后加r个0,其中r为生成多项式G(x)的阶为(一般来说,多项式为N位...
  • 线性反馈移位寄存器LFSR和循环冗余码CRC0 前言1 数学基础1.1 逻辑异或1.2 模2乘法 和 模2除法2 线性反馈移位寄存器LFSR2.1 抽头和特征多项式3 循环冗余码CRC 0 前言 线性反馈移位寄存器(Linear Feedback Shift ...
  • 一种32位并行和高度流水线的循环冗余码(CRC)发生器
  • 循环冗余码CRC 原则:模2除 加密时:首先被模数后面先补最高次数(n-1)位0,模生成多项式n位,异或被模数,取最后余数n-1位,最后余数覆盖数据后面补的0。 检验时,对加密后的数据进行模2除,据余数情况决定对错,0...
  • 1、循环冗余码原理 2、校验过程 3、案例
  • 计算机网络中采用循环冗余码来校验数据的正确性。其原理是:发送方计算出待发送的二进制数据的循环冗余码,并随同原数据一起发送到接收方;接收方通过重新计算接收到的数据的循环冗余码,并和收到的循环冗余码进行...
  • 接收方通过重新计算接收到的数据的循环冗余码,并和收到的循环冗余码进行比较,如果两者相同则可判定所收到的数据是正确的,否则说明数据是错误的。其中计算二进制数据的循环冗余码的计算过程如下: 1.协议事先约定...
  • 计算循环冗余码

    千次阅读 2008-02-20 23:46:00
    FJNU.1240Description计算机网络中采用循环冗余码来校验数据的正确性。其原理是:发送方计算出待发送的二进制数据的循环冗余码,并随同原数据一起发送到接收方;接收方通过重新计算接收到的数据的循环冗余码,并和...
  • CRC循环冗余码校验的原理及用途

    千次阅读 2018-09-04 10:09:23
    循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC。它是利用除法及余数的原理来作错误侦测(Error Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的...
  • 【计算机网络】CRC校验码||循环冗余码详解及计算习题
  • CRC循环冗余码及其详细计算

    千次阅读 多人点赞 2020-09-21 20:35:05
    文章目录循环冗余校验的定义循环冗余校验的特点什么是模2运算CRC的计算具体怎么校验 循环冗余校验的定义 循环冗余校验由信息n位和校验k位构成。k位校验位拼接在n位数据位后面,n+k为循环冗余校验的...
  • 计算循环冗余码Description计算机网络中采用循环冗余码来校验数据的正确性。其原理是:发送方计算出待发送的二进制数据的循环冗余码,并随同原数据一起发送到接收方;接收方通过重新计算接收到的数据的循环冗余码,并...
  • 计算循环冗余码 Description 计算机网络中采用循环冗余码来校验数据的正确性。其原理是:发送方计算出待发送的二进制数据的循环冗余码,并随同原数据一起发送到接收方;接收方通过重新计算接收到的数据的循环冗余...
  • 计算机网络数据链路层差错检验循环冗余码过程
  • 一、 奇偶校验码、 二、 奇偶校验码 特点、 三、 奇偶校验码 示例、 四、 CRC 循环冗余码 ( 原理说明 )、 五、 CRC 循环冗余码 计算示例、
  • 循环冗余码 CRC 的基本思想、 步骤 、示例

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,046
精华内容 15,218
关键字:

循环冗余码