
查表法的来源是CRC
5星
- 浏览量: 0
- 大小:None
- 文件类型:DOC
简介:
CRC(查表法)-表的构成原因#### 一、引言
循环冗余校验(CRC)被广泛应用于通信领域中,作为一种用于检测数据传输中的错误的校验码。CRC通常基于一个预定义的多项式采用计算方式来进行计算。 CRC的多种方法中,查表法是一种非常高效的实现方式。本文将详细介绍CRC查表法中表格的生成原理。硬件电路组成 CRC的计算可以通过硬件电路实现。这里将采用两个具体实例来阐述其工作原理及实现过程。
**多项式x^16+x^12+x^5+1**
- **电路图展示:**
```
┌───────────┬─────────────────┬─────────────┐
↑┌─┬─┬─┬─┐↓┌─┬─┬─┬─┬─┬─┬─┐↓┌─┬─┬─┬─┬─┐│
◎←│15│14│13│12│←◎←│11│10│09│08│07│06│05│←◎←│04│03 │
↑└─┴─┴─┴─┘└─┴─┴─┴─┴─┴─┴─┘└─┴─┴─┴─ └──┘
```
**生成多项式x^8+x^2+x+1**
该电路具有8位CRC计算功能。
- **电路图**:
```
┌───────────────┬─────┬─────┐
↑┌─┬─┬─┬─┬─┬─┐↓┌─┐↓┌─┐│
◎←│07│06│05│04│03│02│←◎←│01│←◎←│00│←┘
↑└─┴─┴─┴─┴─┴─┘└─┘└─┘
```
- 在每次计算过程中,首先对当前CRC值的最高位和输入位执行异或运算。
- 然后根据计算结果决定是否需将该值与生成多项式进行异或操作。
硬件电路的工作原理是:当原CRC值最高位与输入位进行异或运算后得到的结果为1时,需将其与生成多项式进行异或操作;若结果等于0,则只需将CRC值左移一位即可完成处理。基于这一原理,我们可以编写一个相对简单但有效的程序来实现相应的数据校验功能。```c
U16 crc_cal(bit *in, U32 cnt) {
U16 crc = 0;
while (cnt--) {
bool tmp = (crc >> 15) ^ *in;
crc <<= 1;
if (tmp)
crc ^= 0x1021; 对应于x^16+x^12+x^5+1
in++;
}
return crc;
}
```四、查表法(按比特计算)取多项式x⁸ + x² + x + 1作为示例,假定目前的校验码值为十进制数1011 ¹⁰₀₁,现时需要传输四位二进制数据字段1101。分别采用两种算法进行运算,并详细说明每一步骤。
取多项式x⁸ + x² + x + 1作为示例,假定目前的校验码值为十进制数1011 ¹⁰₀₁,现时需要传输四位二进制数据字段1101。分别采用两种算法进行运算,并详细说明每一步骤。计算方法1:该种方式具有显著的效果,在数据处理方面表现出色。
对CRC值执行一次位移操作。接着,检查CRC值的最高位是否为1;如果是,则将其与生成多项式进行异或运算。循环上述操作直至全部输入位被处理完毕。
算法流程:具体实施的步骤如下
1. 计算CRC值与输入数据的XOR运算。
2. 执行结果左移一位的操作,并根据新的最高位判断是否需要与生成多项式进行异或。
3. 重复上述步骤,直至处理完所有输入位。
#### 五、结论
通过对两种不同计算方法的分析比较,我们能够清楚地看到,在任何一种计算方案下,处理后的结果都保持一致。这种一致性是由于 CRC 计算过程中的特定机制所决定的:在 CRC 算法中,每次处理完输入位后,CRC 值都会向左移动相应的位数。具体而言,原来 CRC 值的最高位仅仅作为判断是否需要执行异或操作的关键依据。
查表法的优势主要体现在以下几个方面:首先,在数据查找的准确性和效率上得到了显著提升;其次,通过系统化的表格结构优化,使得操作更加直观和便捷;最后,在可靠性方面也有所增强。
- **预处理工作**:对所有可能的输入值进行异或运算与生成多项式的计算,显著提升了整体算法的运行效率。
- **简化计算流程**:在实际计算过程中,通过查找表中的对应数据即可完成操作,避免了繁琐的位运算步骤。
该 CRC 查表法在 CRC 计算方面表现出高效率和实用性,特别适合用于对大规模数据进行快速校验的任务环境。
全部评论 (0)


