jeudi 21 juillet 2016

AIS toujours

Évolution de la phase lors d'un message AIS (le 'Curata' de passage à Liège le 19 juillet 2016)
$ rtl_sdr -f 162025000 -s 249600 f.iq
$ rtl_dump -p < f.iq > phase
La phase est obtenue avec rtl_dump. L'allure générale est due à un décalage entre la fréquence d'émission et la fréquence de réception. On a, environ, 5700° sur 5994 échantillons, ce qui correspond à 660 Hz ((5700/360)*(249600/5994)); --à vérifier--

En fait, il faudrait s'intéresser à la stabilité de la fréquence de réception (et sa variation de clé en clé).

$ rtl_sdr -f 162024400 -s 249600 f.iq
rtl_fftmax permet de voir s'il y a quelque chose dans le fichier :
$ /rtl_fftmax -f 162024400 -s 249600 -n 1024 core
On voit que le fichier contient des messages des deux canaux AIS, en 161.975 MHz et 162.025 MHz.

Dans un autre enregistrement d'environ 88 secondes à la Citadelle de Liège centré sur 162.025 MHz, si on applique l'algorithme de Goertzel avec N=512 sur les 'I', on obtient :
Le canal 'A' est obtenu en cherchant la présence de -50 kHz; 'B' à 0 KHz. En regardant de près dans Gnuplot, on peut facilement repérer où sont les messages dans le fichier binaire 'iq'.

Si je ne prends que les IQ des blocs où le test de Goertzel à 25 kHz est positif dans un enregistrement d'une minute centré sur 162 MHz et que je trace la phase en veillant à ce qu'elle soit continue, j'obtiens le graphe :
Ce qui est très encourageant. Les zones montantes concernent le +25 kHz, celles descendantes, le -25 kHz. On a aussi, probablement des collisions entre les deux fréquences qu'il faudrait départager avec un filtre. À noter qu'une translation en fréquence peut se traduire par la multiplication par un sinus. Le IQ étant des e^jwt, si on les multiplie par des e^jdwt, on obtient des e^(j(w+dw)t)... Et donc, l'idée de 'corriger la pente' en ajoutant simplement des a*t à la phase ne semble pas complètement farfelue (bien que probablement un peut trop intuitive (?)).

Notons que le graphe, sur une minute, comprends plus de 200000 points et qu'à 26 points par bits, on arrive à environ 40 messages de 200 bits. Ce qui, si on parvient à les décoder sans erreur, ne serait pas mal du tout.

Voir aussi