为什么 CRC32 在 gnuradio 中是非线性的?

纳德

我有一个关于 gnuradio 中 CRC32 非线性的问题。

我正在做一个项目,我需要一个线性 CRC32,意思是:crc(a xor b) = crc(a) xor crc(b),其中 a 和 b 代表一个数据包。

gnuradio 中 CRC32 的实现默认是非线性的,所以我不得不修改代码以使其线性。

我对 CRC 背后的理论做了一些研究,我发现了非线性 CRC 实现背后的两个原因:

1- 使用线性 CRC,我们可以对 2 个不同的零数据包使用相同的 CRC,例如 crc(0000 0000) = crc(00000 00 00000)。因此,如果我向仅包含零的数据包添加额外的零,那么 CRC 将无法检测到错误(额外的零)。

2-第二个原因是,对于线性 CRC,如果我在数据包的开头添加零,CRC 将无法检测到错误。例如:crc(10010 1101) = crc(0000 1000 1101)

现在我的问题是:在两个 USRP 之间传输数据包时,位可能有错误(例如由于 SNR 不好),因此位“1”可能会变成位“0”,反之亦然。但是,我认为不能在数据包中添加位(如上述两种情况),因此实现非线性 CRC 的原因不应适用于 gnuradio。

那么为什么我们默认在 gnuradio 中有一个非线性 CRC?

而且,如果我在两个 USRP 之间传输时使用线性 CRC,会不会有问题?

谢谢,

马克·阿德勒

这样的 CRC 仍然是线性的,只是增加了一个常数。作为类比,y = a x是线性的,但 也是y = a x + b,其中b是非零常数。

在这种情况下,crc(a xor b) xor crc(a) xor crc(b)对于所有等长消息a是一个常数b该常数是crc(0),即相同消息长度的所有零的 CRC。

这种线性绝对没有任何问题,实际上它有好处。特别是,添加零前缀的消息更改将被检测为错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

什么是非线性模式

Python中的CRC32(vs CRC32b)

C#中的CRC32失败

android中CRC32的错误输出

为什么ReLU是非线性激活函数?

用于加密的 ZIP CRC-32 与 zlib 的 crc32 不太一样......为什么?

为什么 GPU 只用于线性代数而不是非线性计算?

多线程环境中的Java CRC32计算

Java和Go中的不同CRC32值

如何在查询中包含crc32函数?

C ++和Java中CRC32的不同结果

为什么crc32会说我的某些文件为“不良”文件?

为什么此循环的时间复杂度是非线性的?

如何计算与php中的CRC32函数兼容的arrayBuffer的CRC(来自javascript中的FileReader)?

匹配STM32F0和zlib中的CRC32

在 GNURadio 中检测按键

C中<linux / crc32.h>和<zlib.h>的crc32()实现之间的区别

使用缓冲区在Python中的二进制文件上计算CRC / CRC32哈希/校验和

如何使用 Python hashlib 或 zlib 在 crc32 中散列密鑰和秘密消息?

在PHP中为Google Cloud Storage对象计算md5Hash或crc32

Zlib Ruby和Python库中的CRC32校验和不同

使用crcmod在Python中重新创建C CRC32算法

C 中的 crc32 计算在 ATMEGA 和 Linux 机器上产生不同的结果

如何使用Ruby从大型文件中获取CRC32校验和?

JavaScript CRC32

gnuradio中的浮点算术

将字符串中每个字符的CRC32校验和值添加到数组中

如果我的目标函数是非线性(也是指数解释)函数,应该使用什么求解器?蟒蛇

为什么在反向传播神经网络中必须使用非线性激活函数?