主要内容

执行循环冗余检查

此示例显示如何执行循环冗余校验(CRC)在一个数字的位上。CRC用于检测数字系统中数据传输中的错误。当发送一段数据时,短消息校验值校验值是通过对数据中的位进行多项式除法得到的。当接收到数据时,重复多项式除法,并将结果与校验值进行比较。如果结果不同,则数据在传输过程中被破坏。

手工计算校验值

从一个16位二进制数开始,这是要传输的消息:

1101100111011010

要获得校验值,请将该数字除以多项式 x 3. + x 2. + x + 1. .你可以用它的系数表示这个多项式:1111

除法是分步进行的,在每一步之后,多项式除数与数字中最左边的1对齐。因为除以四项多项式的结果有三位(通常除以一个长度的多项式 N + 1. 生成长度的检查值 N ),在数字后面加上000求余数。在每一步,结果使用正在操作的4位的逐位异或,而所有其他位不变。

第一个方法是

1101100111011010 000 1111 ---------------- 0010100111011010 000

每个连续的除法都根据上一步的结果进行运算,因此第二个除法是

0010100111011010 000 1111 ---------------- 0001010111011010 000

除法是在除数都为零时完成的。包括上述两个步骤在内的完整除法是

1101100111011010 000 1111 1101100111011010 000 1111 1101100111011010 000 1111 0000101111011010 000 1111 0000101111011010 000 1111 0000101111011010 000 1111 0000000010011010 000 1111 0000000010011010 000 1111 0000000010011010 000 1111 0000000000001100 000 1111 0000000000001100 000 11 11 0000000000001100 110

其余的位,110,是此消息的检查值。

以编程方式计算检查值

在MATLAB®中,您可以使用按位运算执行相同的操作来获取校验值。首先,为消息定义变量和多项式除数。使用无符号32位整数,以便剩余的比特可用。

消息=0b1101100111011010u32;消息长度=16;除数=0b1111u32;除数度=3;

接下来,初始化多项式除数十二月二日显示结果的位。

除数=位移位(除数,messageLength-divisorDegree-1);dec2bin(除数)
ans='1111000000000000'

现在,移动除数和消息,使其具有正确的位数(消息为16位,其余为3位)。

除数= bitshift(除数,divisorDegree);剩余= bitshift(消息、divisorDegree);dec2bin(因子)
ans = ' 1111000000000000000 '
dec2bin(剩余部分)
ans = ' 1101100111011010000 '

使用a执行CRC的除法步骤对于环这个对于循环总是每一步前进一位,因此包括检查当前数字是否为1。如果当前数字为1,则执行除法步骤;否则,循环前进一位并继续。

对于k=1:messageLength如果bitget(余数,messageLength+除数阶)余数=位异或(余数,除数);终止剩余剩余= bitshift (1);终止

将余数的位右移,以获得操作的检查值。

CRC_check_value = bitshift(余数,-messageLength);dec2bin (CRC_check_value)
ans='110'

检查消息完整性

通过重复相同的除法操作,可以使用检查值来验证消息的完整性。但是,不要使用000要启动,请使用检查值110.如果消息是无错误的,那么除法的结果将是零。

重置余数变量,并使用按位或将CRC校验值添加到余数位。通过使用位组

余数=位移位(消息,除数阶);余数=位或(余数,CRC校验值);余数=位集(余数,6);dec2bin(余数)
ans='11011001110110110'

执行CRC除法运算,然后检查结果是否为零。

对于k=1:messageLength如果bitget(余数,messageLength+除数阶)余数=位异或(余数,除数);终止剩余剩余= bitshift (1);终止如果余数==0 disp(“消息是没有错误的。”)其他的disp (“消息包含错误。”)终止
消息包含错误。

参考文献

[1] 斯卡拉,伯纳德。数字通信:基础与应用恩格尔伍德悬崖,新泽西州:普伦蒂斯大厅,1988年。

[2] 柳条,斯蒂芬B。数字通信和存储差错控制系统新泽西州上鞍河:普伦蒂斯大厅,1995年。

另见

|

相关的话题