我学会了一种名为crc的错误检测技术。 crc计算是在模2运算中完成的,没有附加或在减法中借用。我想知道为什么crc采用模2算术而不是常规二进制算术。在数字电路中实现更容易吗?
也许迟到总比没有答案好。 CRC将数据视为多项式的1比特系数串,因为系数是模2的数。从数学角度来看,对于n比特CRC,数据多项式乘以x ^ n,有效地加上n 0比特系数到数据,然后将该数据+零除以n + 1位CRC多项式,得到一个比特余数,即CRC。如果使用CRC“编码”数据,则从数据+零中“减去”余数,但对于单比特系数,加法和减法都是xor,因此CRC仅附加到数据,替换为零的零。附加到数据以生成CRC。
没有携带或借用系数的原因是因为它是多项式数学。
尽管没有为CRC做过,但Reed Solomon码有些类似,但多项式系数可能是以2之外的某些素数为模的数,例如929,对于除2以外的素数,重要的是跟踪加法或减法的时间。使用除2之外的素数的模数。
https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction