$ rtl_sdr -f 433630000 -s 256000 fileet d'un petit programme 'rtl_dump -p' pour sortir la phase en texte, on obtient avec Gnuplot quelque chose comme : Le gain automatique (AGC) fait varier la puissance du signal qui sature un peu à l'extérieur mais bon. Ce qui est amusant, c'est que la phase semble 'tourner' (à magnitude constante). En fait, c'est dû au fait que la fréquence de réception choisie ne correspond pas exactement à la fréquence d'émission (en charabia : 'frequency offset' -> 'spinning constellation' en démodulation QAM). J'ai estimé la fréquence en regardant le 'waterfall'; ce n'est pas assez précis. Il existe des techniques pour retrouver la fréquence correcte mais on verra ça plus tard... Pour le moment, c'est bon assez pour voir si on peut en tirer quelque chose. Si l'on s'intéresse à l'évolution de la phase, on obtient bien quelque chose de structuré : En zoomant, on voit que le signal est très propre mais que les sauts autour de 0-360° rendent l'interprétation difficile. En assurant la continuité et en laissant croître la phase au delà de 360°, cela devient plus clair : Cette dérive vers le haut est un peu gênante, on peut la supprimer artificiellement en soustrayant la pente (-i*alpha): Et voilà une jolie trame bien propre (mais un peu asymétrique) qu'il ne reste plus qu'à analyser...
Si j'écris un petit programme qui mesure les montées et les descentes des données (montantes), j'obtiens quatre nuages de points bien séparés représentant les montées/descentes courtes/longues : On notera également que l'on n'a pas n'importe quelle suite de transitions. On n'a pas de suite {courte descente+longue montée} ni de suite {courte montée+longue descente}. En fait, si on considère 4 positions de hauts et bas de courbe, on peut avoir les transitions 1->{2|4}, 2->1, 3->4 et 4->{3|1}. Seuls les départs de 1 et 4 permettent de coder 1 bits. Une petite transition est d'office suivie d'une petite transition qui ramène l'état à son point de départ. Une difficulté de ce petit programme est de commencer et finir aux bons endroits et éviter les parasites.
On peut déjà regarder si les trames se ressemblent en les mettant côte à côte :
Normalement, il faudrait filtrer pour purifier le signal, utiliser la fréquence correcte et ensuite synchroniser et corréler pour extraire les bits. Mais le signal est propre et semble facile à décoder avec un petit programme ad hoc. Mettons qu'on imprime '1' pour deux 'petites' transitions successives et '0' pour une grande transition. Les dix premières trames donnent :
111111000000000000000000010111010010000000011011011101100010101010101100000010010000000010000000010000000010000000010000000010000000010000111010001111100001011101110100010000000001111 0011000000000000000000010111010010000000011011011101100010101010110010000010010000000010000000010000000010000000010000000010000000011001001010001000100001011101110100010000000001111 111110001000000000000000000010111010010000000011011011101100010101010110100000010010000000010000000010000000010000000010000000010000000010001001101010111010001011101110100010000000001111 1110001000000000000000000010111010010000000011011011101100010101010111010000010010000000010000000010000000010000000010000000010000000011001100100111111010001011101110100010000000001111 111111011000000000000000000010111010010000000011011011101100010101010111100000010010000000010000000010000000010000000010000000010000000010001100011100000100001011101110100010000000001111 1111111011000000000000000000010111010010000000011011011101100010101010000010000010010000000010000000010000000010000000010000000010000000011010100100111001100001011101110100010000000001111 11111101011000000000000000000010111010010000000011011011101100010101010000100000010010000000010000000010000000010000000010000000010000000010010100011100110010001011101110100010000000001111 11111111110001000000000000000000010111010010000000011011011101100010101010001010000010010000000010000000010000000010000000010000000010000000011010001010001110010001011101110100010000000001111 01000000000000000000010111010010000000011011011101100010101010001100000010010000000010000000010000000010000000010000000010000000010010001101010001100001011101110100010000000001111 011000000000000000000010111010010000000011011011101100010101010010010000010010000000010000000010000000010000000010000000010000000011011111101010110100001011101110100010000000001111C'est amusant, des similarités apparaissent mais, pour une raison inconnue, elles ne sont pas alignées. Si on les aligne, cela donne :
000000000000000000010111010010000000011011011101100010101010101100000010010000000010000000010000000010000000010000000010000000010000111010001111100001011101110100010000000001111 000000000000000000010111010010000000011011011101100010101010110010000010010000000010000000010000000010000000010000000010000000011001001010001000100001011101110100010000000001111 000000000000000000010111010010000000011011011101100010101010110100000010010000000010000000010000000010000000010000000010000000010001001101010111010001011101110100010000000001111 000000000000000000010111010010000000011011011101100010101010111010000010010000000010000000010000000010000000010000000010000000011001100100111111010001011101110100010000000001111 000000000000000000010111010010000000011011011101100010101010111100000010010000000010000000010000000010000000010000000010000000010001100011100000100001011101110100010000000001111 000000000000000000010111010010000000011011011101100010101010000010000010010000000010000000010000000010000000010000000010000000011010100100111001100001011101110100010000000001111 000000000000000000010111010010000000011011011101100010101010000100000010010000000010000000010000000010000000010000000010000000010010100011100110010001011101110100010000000001111 000000000000000000010111010010000000011011011101100010101010001010000010010000000010000000010000000010000000010000000010000000011010001010001110010001011101110100010000000001111 000000000000000000010111010010000000011011011101100010101010001100000010010000000010000000010000000010000000010000000010000000010010001101010001100001011101110100010000000001111 000000000000000000010111010010000000011011011101100010101010010010000010010000000010000000010000000010000000010000000010000000011011111101010110100001011101110100010000000001111En hexadécimal, cela pourrait donner quelque chose comme (dc; 16o2i ...p; 'pourrait' parce qu'il faut encore aligner et voir si c'est le LSB ou le MSB qui est transmit en premier) :
02E900DBB155604804020100804021D1F0BBA200F 02E900DBB1559048040201008040325110BBA200F 02E900DBB155A048040201008040226AE8BBA200F 02E900DBB155D0480402010080403327E8BBA200F 02E900DBB155E048040201008040231C10BBA200F 02E900DBB1541048040201008040352730BBA200F 02E900DBB1542048040201008040251CC8BBA200F 02E900DBB15450480402010080403451C8BBA200F 02E900DBB1546048040201008040246A30BBA200F 02E900DBB154904804020100804037EAD0BBA200FOn trouve des choses constantes et d'autres qui ne le sont pas. Probablement qu'en analysant un grand nombre de trames dans un grand nombres de circonstances on parviendrait à décoder tout cela. Et, en comparant différentes grues, y découvrir une adresse, un modèle,... (?)
Les tests du billet suivant laissent à penser qu'il pourrait s'agir d'un encodage Manchester en GFSK à 9600 bauds (?; le CC1101 ne semble pas pouvoir du Manchester en MSK (qui 'arrondit' mieux l'évolution de la phase)).
(à suivre?)
Aucun commentaire:
Enregistrer un commentaire