2017-04-10 7 views
0

J'ai une question concernant la non-linéarité du CRC32 dans gnuradio.pourquoi CRC32 est non linéaire dans gnuradio?

Je travaille sur un projet où j'ai besoin d'un CRC32 linéaire qui signifie que: crc (a xor b) = crc (a) x ou crc (b), où a et b représentent un paquet.

L'implémentation de CRC32 dans gnuradio est par défaut non-linéaire donc j'ai dû modifier le code pour le rendre linéaire.

Je l'ai fait des recherches sur la théorie derrière CRC et j'ai découvert 2 raisons d'une mise en œuvre non linéaire CRC:

1- avec un CRC linéaire, on peut avoir le même CRC pour 2 paquets différents de zéros , par exemple crc (0000 0000) = crc (00000 00 00000). Donc, si j'ajoute des zéros supplémentaires à un paquet contenant seulement des zéros, eh bien, le CRC ne sera pas capable de détecter les erreurs (zéros supplémentaires). 2- la deuxième raison est qu'avec un CRC linéaire, si j'ajoute des zéros au début d'un paquet, le CRC ne sera pas capable de détecter les erreurs. par exemple: crc (10010 1101) = crc (0000 1000 1101)

Maintenant, ma question est: Lors de la transmission de paquets entre deux USRPs, des bits peuvent avoir des erreurs (en raison d'un mauvais SNR par exemple), donc un bit "1 "pourrait devenir un peu" 0 "et vice versa. Cependant, je ne pense pas que des bits pourraient être ajoutés (comme les deux cas mentionnés ci-dessus) aux paquets et donc les raisons d'implémenter un CRC non-linéaire ne devraient pas s'appliquer à gnuradio. Alors, pourquoi avons-nous un CRC non-linéaire dans gnuradio par défaut? Et, si j'utilise un CRC linéaire lors de la transmission entre deux USRP, cela poserait-il un problème?

Merci,

Répondre

1

Ces sont encore linéaire CRCs, juste avec une constante ajoutée. Par analogie, y = a x est linéaire, mais il en est de même pour y = a x + b, où b est une constante non nulle. Dans ce cas, crc(a xor b) xor crc(a) xor crc(b) est une constante pour tous les messages de longueur égale a et b. Cette constante est crc(0), c'est-à-dire le CRC de tous les zéros de même longueur de message.

Il n'y a absolument aucun problème avec ce type de linéarité, et en fait il a des avantages. En particulier, une modification du message qui ajoute un préfixe de zéros serait détectée comme une erreur.