CRC只能检错,不能纠错。
本文盲区
生成式多项式 G(x) 的来源
但是,许多生成多项式已经被标准化,成为行业通用的选择。在实际应用中,通常直接使用这些标准化的生成多项式,以确保兼容性和可靠性。
纠错原理
发送数据后,使用相同的多项生成式 G(x),进行模2除法运算,得到结果 0 ,则表示本次数据无误。
- 补位
将 T(x)向左位移 G(x)的最高次 n,即在 T(x)结尾补 n 个 0,得到 T(x)∗xn,目的是为了加上校验码R(x) 用于校验数据的完整性。
- 发送
有数据项 T(x) 需要发送,选择多项生成式 G(x),通过 T(x)∗xn 对 G(x)进行模2运算,得到商为 Q(x),余数为R(x),则T(x)∗xn可表示:
T(x)⋅xn=Q(x)⋅G(x)+R(x)(式子1)
等式两边同时加上R(x),得:
T(x)⋅xn+R(x)=Q(x)⋅G(x)(式子2)
因为模2运算,R(x)+R(x)=0,而等式左边相当于是直接将余数替换掉0的操作。因为例如000+101=101
所以,最终:
T(x)∗xn+R(x)
作为本次的发送数据。
- 校验
接收方,拿相同的多项生成式 G(x),用 T(x)∗xn+R(x) 对 G(x)进行模2运算,由于式子2,可得:如果发送数据没有出错的情况下,本次模2运算将是一个整除操作,不会有余数的产生,所以校验时观察余数结果是否是0,即可校验数据的正确性。