Vous êtes sur la page 1sur 28

Identifiezvous

(/user/login)

S'inscrire

(https://boutique.eddiamond.com/authentification)

Votrerecherche

Connect(/)

LA RCEPTION RADIOFRQUENCE DFINIE PAR LOGICIEL (SOFTWARE


DEFINED RADIO SDR)
GNU/LinuxMagazinen153|octobre2012|GwenhalGOAVECMEROU(/auteur/view/9649goavec_merou_gwenhael)

(http://creativecommons.org/licenses/byncnd/2.0/fr/)
Administrationrseau (/content/search/?filter[]=attr_category_lk:"administrationrseau"&activeFacets[attr_category_lk:Domaines]=administrationrseau) Audiovido (/content/search/?
filter[]=attr_category_lk:"audiovido"&activeFacets[attr_category_lk:Domaines]=audiovido) Bureautique (/content/search/?
filter[]=attr_category_lk:"bureautique"&activeFacets[attr_category_lk:Domaines]=bureautique) Embarqu (/content/search/?filter[]=attr_category_lk:"embarqu"&activeFacets[attr_category_lk:Domaines]=embarqu)
PeopleInterview (/content/search/?filter[]=attr_category_lk:"peopleinterview"&activeFacets[attr_category_lk:Domaines]=peopleinterview) Programmation (/content/search/?
filter[]=attr_category_lk:"programmation"&activeFacets[attr_category_lk:Domaines]=programmation) Sciences (/content/search/?
filter[]=attr_category_lk:"sciences"&activeFacets[attr_category_lk:Domaines]=sciences) Web (/content/search/?filter[]=attr_category_lk:"web"&activeFacets[attr_category_lk:Domaines]=web)

La diusion large chelle de la communication radiofrquence dans les appareils grand public induit la disponibilit de composants aux performances
compatibles avec ces modes de communication (fonctionnement de 50 2500 MHz ou plus, bandes passantes de lordre de la dizaine de MHz) et pour des
prix ridiculement faibles grce la production de masse. Nous allons proter de cette mode en prsentant lutilisation dun rcepteur de tlvision
numrique - DVB bas sur le composant Elonics E4000 - dont ltage de rception savre tellement simple quil est compatible avec de nombreux modes
de transmission analogique et numrique de donnes par liaison radiofrquence. Le ux de donnes brut issu du rcepteur radio est trait par des blocs
implmentant les fonctionnalits les plus classiques dans le logiciel gnuradio et son interface graphique gnuradio-companion. Nous verrons comment, au
del de la simple utilisation des blocs de traitement disponibles, implmenter nos propres algorithmes de dcodage sur le ux dinformations reu du
rcepteur radiofrquence. Nous nous intresserons en particulier au packet, au protocole ACARS, et aux radiomodems encodant linformation en FSK et
AFSK.

1. INTRODUCTION LA RADIO DFINIE PAR LOGICIEL (SDR)


La radio dnie par logiciel - Software Dened Radio (SDR) - est une approche au traitement de donnes radiofrquences dportant un maximum de traitement sur
du logiciel au lieu de dpendre du matriel [1, 2, 3, 4].

Compte tenu des frquences et du dbit dinformations mis en jeu lors des transmissions sans l radiofrquences, il a t classiquement ncessaire de traiter un
maximum dinformations par du matriel ddi, pour ne nalement qu'ventuellement traiter par logiciel le ux dinformations rsultant, gnralement dans les
frquences audibles (<100 kHz). Mentionnons parmi ces exemples les habituels rcepteurs radiofrquences FM et AM qui ne font appel aucun logiciel, aux
rcepteurs amateurs de mode numrique bass sur un modem audiofrquences (packet1), transmission dimages (SSTV par le vnrable JVFAX sous MS-DOS, des
outils plus rcents tant probablement disponibles aujourdhui sous GNU/Linux) ou la rception dimages satellites que nous avions dj prsente dans ces pages [5].

Classiquement, le traitement logiciel dinformations transmises sans l se cantonne aux frquences audio du fait de la disponibilit dune carte dacquisition
largement disponible - la carte son quipant pratiquement tous les ordinateurs personnels depuis une dizaine dannes - et la puissance de calcul requise qui nest
pas ngligeable, mme pour traiter un ux de donnes aussi lent que 100 kHz. En eet, le dbit du traitement de linformation est impos par le ux entrant, et
toute interruption (par exemple pour grer une autre tche dvolue au systme dexploitation) se traduit par une perte irrmdiable de donnes. Aucun des systmes
dexploitation grand public nayant de prtention de latence borne (temps rel), et surtout pas GNU/Linux dans sa version de base, la disponibilit dune puissance
de calcul surdimensionne est la seule garantie dun traitement sans pertes dinformations.

La limitation sur les interfaces dacquisitions a en partie chang avec lavnement des cartes dacquisition vido : capables dchantillonner plusieurs millions de
mesures par seconde, le ux de donnes devient compatible avec lanalyse par logiciel dune bande de frquences de plusieurs MHz de large. Cependant, ltage le
plus amont de traitement de linformation radiofrquence - amplicateur et transposition vers une frquence acceptable par un convertisseur analogique-numrique
- reste matriel. Rcemment, un rcepteur de tlvision numrique terrestre sous forme de cl USB a induit une explosion dactivit dans le domaine de la SDR libre
lorsquil sest avr que le ux de donnes fourni au logiciel de dcodage vido tait gnraliste (nous dvelopperons plus loin le ux de donnes I/Q fourni par cette
interface matrielle) : pourquoi donc se limiter aux bandes de tlvision et ne pas sonder nimporte quelle bande de frquence accessible par ltage radiofrquence,
et ce en vue den interprter les informations par traitement logiciel de linformation ?

Dans ce but, un environnement logiciel sympathique est gnuradio2, qui fournit un certain nombre de blocs de traitement de base qui permettent de rapidement
apprhender le problme.

La squence danalyse que nous proposons commence par une brve prsentation du matriel utilis, avant dexploiter directement quelques blocs de traitement du
signal disponibles sous gnuradio en sappuyant pour la construction des applications sur son interface graphique, gnuradio-companion3. Lutilisation de blocs
existants ntant d peu prs aucun intrt technique pour le dveloppeur, autre que pour un aspect ludique, nous nous attellerons ensuite la tche de traiter un
ux de donnes inconnu, savoir le ux de donnes issu dun radiomodem dune part, et dautre part le ux de donnes mis par les avions suivant le protocole
ACARS. Finalement, nous verrons comment remplacer le post-traitement des informations acquises pour en extraire les donnes numriques, par un traitement en
temps rel sous forme de bloc compatible avec gnuradiocompanion.

2. PRSENTATION DU MATRIEL
Historiquement, le dveloppement de SDR sur plateforme libre sest organis autour des systmes USRP (Universal Software Radio Peripheral) dvelopps par Ettus
Research4. Bien que de cot raisonnable en comparaison des systmes professionnels proposs, linvestissement de lordre du millier deuros reste nanmoins
cantonn lamateur motiv qui a besoin des performances de tels dispositifs ddis (bande passante importante, sensibilit). Les USRP sont supportes dans
gnuradio au travers des pilotes gr-uhd (UHD signiant USRP Hardware Driver). Ce point est utile mentionner car tous les outils faisant rfrence uhd nous seront
inutiles dans la suite de cette discussion.

En eet, alors que les USRP ont pu voir le jour grce la chute vertigineuse des cots de composants radiofrquences dvelopps notamment pour les applications de
communication numrique sans l (synthtiseurs de frquence, modulateur et dmodulateur I/Q sur des bandes allant de quelques MHz aux GHz, notamment par
Analog Devices, Maxim ou Semtech), cette tendance sacclre aujourdhui avec lavnement de circuits compacts regroupant tous les lments radiofrquences
analogiques (front end) habituellement spars en lments discrets.

En particulier, un nouveau composant, le Elonics E4000 (rcepteur radiofrquence direct - sans exploitation dune frquence intermdiaire - fonctionnant de 64
1700 MHz) a t la source dune explosion de circuits trs faible cot pour la SDR. Ce composant se limite en eet amplier le signal radiofrquence reu par une
antenne, le mlanger avec un oscillateur local pour transposer la frquence5 suivi de ltres passe-bas pour ne conserver que la composante basse-frquence. Ce
composant analogique fournit donc les composantes I et Q (identit et en quadrature) sur une bande passante allant jusqu 8 MHz.

Ce signal analogique doit ensuite tre numris pour traitement par un ordinateur personnel. Un premier projet exploite un convertisseur analogique-numrique de
carte audio : Funcube6. Les faibles volumes de production induisent un cot de lordre de la centaine deuros, pour un dispositif la sensibilit acceptable pour de la
rception de sources en orbite terrestre (satellites), mais avec une bande passante rduite aux performances dune carte son, donc une centaine de kHz.

An de pallier cette carence sur la bande passante, un projet introduisant un FPGA pour acclrer la frquence dchantillonnage a t engag sous le nom de
OsmoSDR7, avec la participation de dveloppeurs aussi clbres que Harald Welte8, garantie de srieux du projet. Les dveloppements logiciels autour de ce projet ont
nalement prot de la commercialisation de rcepteurs de tlvision numrique terrestre de qualit mdiocre, mais dont les volumes de production induisent des
cots dachat imbattables. En eet, le portage V4L de ces cls USB de rception de tlvision a fait apparatre que tout le dcodage du ux de donnes se fait de
faon logicielle (un triste rappel des modems dil y a une quinzaine dannes, aussi nomms winmodems, qui avaient engag cette tendance de rduction du matriel
en transposant le dcodage au logiciel - modems inutilisables dans un environnement libre en labsence des pilotes appropris9) et que ce ux de donnes I/Q serait
appropri pour des applications bien plus intressantes que la visualisation dmissions de tlvision.

Il est donc dsormais possible de se lancer dans le domaine fantastique de la SDR pour un investissement matriel infrieur 20 euros : nous avons pour notre part
expriment avec des cls EZCAP (DVB-T/DAB/FM) telles que (par exemple) disponibles http://www.dealextreme.com/p/mini-dvb-t-digital-tv-usb-2-0-dongle-
with-fm-dab-remote-controller-92096 (http://www.dealextreme.com/p/mini-dvb-t-digital-tv-usb-2-0-dongle-with-fm-dab-remote-controller-92096) ou
https://www.cosycave.co.uk/product.php?id_product=104 (https://www.cosycave.co.uk/product.php?id_product=104) pour les sources que nous avons testes
(pourquoi un vendeur de plantes prtendues thrapeutiques vend des rcepteurs de tlvision ? Mystre, lappt du gain na pas de limites).

Le projet exploitant le convertisseur analogique-numrique embarqu sur ces cls, le Realtek RTL2832U, est issu de OsmoSDR et dcrit
http://sdr.osmocom.org/trac/wiki/rtl-sdr (http://sdr.osmocom.org/trac/wiki/rtl-sdr).

2.1 INSTALLATION DES OUTILS GNURADIO


Lenvironnement gnuradio est dynamique et en particulier les outils autour des cls USB pour rception de tlvision numrique changent rapidement. Il est donc de
bon ton de recompiler ses outils depuis les dernires versions des sources. Ce processus a t automatis dans un script fort utile, disponible
http://www.sbrac.org/les/build-gnuradio (http://www.sbrac.org/les/build-gnuradio). Il est cependant signicatif de raliser un aspect quelque peu surprenant de
la compilation de gnuradio : au lieu dimposer les dpendances ncessaires un ensemble de fonctionnalits, linclusion ou lexclusion de morceaux de gnuradio est
induite par une recherche des bibliothques disponibles. Ainsi, une premire compilation se traduit par lexclusion d peu prs toutes les fonctionnalits de
gnuradio, et ce nest quen installant petit petit les bibliothques ncessaires (libfftw3dev, modules Python) que nous nirons par atteindre lobjectif de
compiler tous les modules, sauf uhd, qui ne sera pas ncessaire. En particulier, il est fondamental de compiler la partie gnuradiocompanion, une interface
graphique pour accder aux modules de traitement du signal, dont nous ferons intensivement usage dans la suite de ce document.

2.2 UTILISATION EN OSCILLOSCOPE DU RTL2832U


Ayant install les outils gnuradio et en particulier gnuradiocompanion, nous pouvons prendre en main une cl USB de rception de tlvision numrique terrestre
EZCAP. Le premier constat est que le connecteur de type antenne de tlvision 75 ohm est peu prs inexploitable avec des antennes de radioamateur ou mme pour
nos propres exprimentations dantennes ddies diverses bandes de frquences, donc nous commenons par le remplacer par une embase BNC.

An de bien matriser la distinction entre les fonctions du composant analogique E4000 et du convertisseur analogique-numrique suivi de communication
numrique RTL2832U, nous allons injecter un signal sinusodal sur ce qui apparat lvidence sur la carte lectronique comme les signaux balancs des composantes
I et Q (i.e. I+ et I- ainsi que Q+ et Q-). Ce faisant, nous gnrons le graphique de traitement du signal gnuradio le plus simple possible : une source de donnes sous la
forme du bloc OsmoSDR Source (accessible dans le menu des fonctions OsmoSDR droite de gnuradiocompanion) - labsence de ce menu indique que la compilation
des outils ne sest pas faite convenablement - et un puits de donnes sous la forme dun oscilloscope accessible dans le menu WXGUIWidget (bloc WXGUIScope
Sink).

Figure 1 : Utilisation dun rcepteur de tlvision numrique terrestre


comme oscilloscope avec une bande passante de plus de 2 MHz.
Nous constatons sur la Figure 1 que les voies I et Q prsentent bien un signal sinusodal, en accord avec la forme du signal inject, une frquence de 200 kHz et
chantillonn 2 MS/s (10 points/priode). Lhorloge interne au convertisseur EZCAP et le quartz cadenant le synthtiseur de frquence sont synchroniss mieux
que 2 parties par million (2 ppm) puisque nous avons d programmer la frquence de 199999,720 Hz pour que lchantillonnage fasse exactement 10 points/priode
2 MS/s (en labsence de dclenchement sur un front, cette condition sobserve visuellement sur la sortie oscilloscope de gnuradio lorsque la sinusode arrte de se
dplacer horizontalement une vitesse gale linverse de la dirence des frquences), un rsultat impressionnant compte tenu de la simplicit du montage
nexploitant quun quartz de qualit commerciale pour cadencer llectronique numrique.

Nous avons mentionn un gain dun facteur de lordre de 2,5*106/48000=~ 50 sur la frquence dchantillonnage en exploitant le RTL2832U comme carte
dacquisition la place dune carte son. Cependant, ce chire ne doit pas cacher la dynamique mdiocre du convertisseur analogique-numrique de ce composant qui
ne code linformation que sur 8 bits. Une dynamique de 20*log10(28)=48 dB est mdiocre compte tenu de la dynamique des signaux radiofrquences acquis qui atteint
souvent 60 dB. Un tage de pramplication capable de sadapter la puissance radiofrquence reue est donc souhaitable (ajustement automatique par le E4000 ou
de faon logicielle en ajustant manuellement le gain de ce composant). Le sur-chantillonnage dun facteur 50 ne compense pas la mdiocrit de la rsolution des
convertisseurs par rapport ceux dune carte son. En eet, il est bien connu [6] quen appliquant une moyenne glissante sur N points acquis, lcart type sur ces
mesures (supposes polues par un bruit uniforme) dcrot comme N. Ainsi, il faut quadrupler la frquence dchantillonnage pour diviser par 2 le bruit sur le signal
acquis et donc ajouter un bit sur la rsolution du convertisseur analogique-numrique. La rfrence [6] formalise ce point en notant que pour une frquence
dchantillonnage fse, le gain en rsolution (p bits) par application dune moyenne glissante par rapport aux acquisitions frquence fe est

fse=4p*fe

ou, en passant en chelle logarithmique, 10log10(fse/fe)=10log10(4)*p soit, en notant que 10log10(4)=~6, nous retrouvons [3] que le gain en rsolution en bits p pour un
sur-chantillonnage de fse/fe est 1/6*10log10(fse/fe). Dans tous les cas, nous sommes loin datteindre les 16 bits de rsolution dune carte son, puisque
10log10(50)/6=~3 soit un total de 11 bits sur le convertisseur quivalent fonctionnant la mme frquence que la carte son.

Ce rapide petit calcul nous incite nous rappeler que la frquence dchantillonnage nest pas ncessairement la caractristique principale dun convertisseur
analogique-numrique, et dans ce cas les plus de 2 Mchantillons/s ne se justient que pour analyser un signal de bande passante importante, mais de dynamique
rduite. Si la bande passante ne se justie pas, une carte son sera plus ecace pour chantillonner des signaux avec une dynamique accrue.

Tous ces traitements se font sur un eeePC701 et ne ncessitent donc pas des ressources normes en termes de puissance de calcul ou de mmoire.

3. PREMIERS PAS : UTILISATION AVEC GNURADIO-COMPANION


Nos essais de rception radiofrquence ont pour ambition de recevoir des signaux plus faibles que les missions commerciales sur bande FM. En particulier, nous
nous intresserons la rception dimages mises par des satellites sur des frquences autour de 137 MHz. Il savre que la majorit des frquences qui vont nous
intresser dans ce document se situent autour de cette valeur - 88 108 MHz pour la FM commerciale, 108 137 MHz pour la bande arienne, 154 MHz pour le packet
radio - et nous exploiterons donc dans tous ces cas une antenne diple ajuste pour 137 MHz. An de maintenir la portabilit dun rcepteur radiofrquence se
branchant sur port USB, lantenne se doit dtre dmontable et tenir dans un sac dos. Pour ce faire, un tube de cuivre creux de 8 mm de diamtre est coup en deux
morceaux de 55 cm de longueur (300/137/4=~0,55 avec 300 m/s la clrit dune onde lectromagntique et 137 la frquence dintrt en MHz) et munis, chaque
extrmit, de ches banane de 4 mm de diamtre. Ce montage robuste sassemble facilement sur un support en plastique muni de deux embases 4 mm femelles
auxquelles est soud un bout - aussi court que possible - de cble coaxial RG58 muni une extrmit dune che BNC (Fig. 2). Exceptionnellement, nous ajouterons
un amplicateur faible bruit Hittite HMC478 (alimentation en 5 V, facteur de bruit 2 dB) entre lantenne et le rcepteur EZCAP, bien que le gain dun tel montage
reste dmontrer. Le pr-amplicateur faible bruit (LNA) est aliment en 5 V par un second port USB.

Figure 2 : Deux montages dantennes exploits avec le


rcepteur EZCAP : une antenne diple facilement dmontable
pour les bandes de frquences autour de 137 MHz, et sinon
une antenne discone large bande. Aussi importante que la
nature de lantenne, lemplacement slectionn doit tre
aussi libre que possible dobstacles. Ici, un balcon au 3me
tage dun btiment orient vers lEst est acceptable pour la
rception FM et davions, mais insusamment dgag pour
la rception dimages issues de satellites.

Dans le cas particulier de lADS-B qui occupe une bande de frquences autour de 1090 MHz, une antenne discone large bande a t exploite (Diamond Antenna D190,
annonce comme fonctionnelle entre 100 et 1500 MHz) (Fig. 2).

3.1 LA BANDE FM COMMERCIALE


Le test le plus simple car permettant de recevoir un signal mis en continu avec une forte puissance est la bande FM commerciale, entre 88 et 108 MHz. Cette bande
de frquences est qualie de large bande (Wide FM) du fait de lencombrement spectral important occup par chaque station (180 kHz). Les canaux allous aux radio
sont donc spars denviron 200 kHz [9, p.138].
Ce test fera oce de validation du bon fonctionnement de linstallation : interface graphique gnuradiocompanion, source OsmoSDR (comme utilise auparavant
pour lexemple de loscilloscope), dmodulation par le bloc WFM et puits de donnes sous forme de la carte son dune part (aprs dmodulation) et analyse du
spectre acquis (avant dmodulation) pour identier la frquence dmission des stations dautre part.

Figure 3 : Exemple de chanes de traitement pour le dcodage de la bande


FM commerciale (88-108 MHz) ou la bande daviation o les
communications se font en AM (au-dessus de la bande FM commerciale,
108-137 MHz). Le mode de dmodulation FM troite na pas fourni de
rsultat signicativement dirent du dmodulateur WFM, mais est inclus
pour illustrer la dcimation en sortie de ce dmodulateur par une fonction
qui ne garde que 1 chantillon sur 4 (et donc fournit le ux de donnes au
dbit appropri la carte son). Le spectre, en bas droite, du signal
acquis, prsente une extension de -fe/2 fe/2 avec fe=1152 kHz la
frquence dchantillonnage : nous y trouvons videmment un pic autour
de la frquence de la chane radio coute (100,4 MHz) ainsi quun pic
autour de la frquence adjacente (100.9 MHz), qui ninterfre nanmoins
pas avec la dmodulation grce au ltre passe-bas situ aprs lanalyseur
de spectres.

Cet exemple fournit lopportunit dintroduire une premire contrainte sur lassemblage des blocs de traitement : il nous faut garantir la continuit du ux de
donnes le long de la chane de traitement, et donc ne pas fournir trop de donnes un bloc qui ne peut tout traiter, ni faire attendre un bloc qui naura plus rien
faire. Ainsi, dans lexemple de la Figure 3, si nous partons de la n de la chane de traitement (le puits quest la carte son du PC), nous devons fournir un ux continu
de donnes la frquence dchantillonnage choisie 48 kHz. Nous constatons que le bloc de dmodulation FM large bande (WFM) eectue une dcimation dun
facteur 4 (i.e. sort 4 fois moins de donnes quil en reoit), donc le ux de donnes en entre de ce bloc doit tre 4*48=192 kHz. Le ltre passe bas eectue quant lui
une dcimation dun facteur 6, donc ncessite un ux en entre de 192*6=1152 kHz, qui est bien la valeur que nous observons dans le sampling rate de ce bloc. La
source OsmoSDR tant directement connecte au ltre passe-bas, sa frquence dchantillonnage est elle aussi slectionne 1152 kS/s. On notera quune limitation
de la source OsmoSDR est de ne pas pouvoir descendre sous quelques centaines de kHz de frquence dchantillonnage : on conservera donc habituellement une
source chantillonnant entre 1 et 2,5 MS/s, quitte dcimer par un ltre passe-bas si la suite des tapes ne ncessitent que des traitements sur des bandes passantes
rduites. Le lecteur est encourag changer les frquences dchantillonnage ou facteurs de dcimations sur un tel graphique pour apprhender leet derreurs sur
ces valeurs.

Une extension propose dans le cadre de gnuradiocompanion est le dcodage de linformation RDS (Radio Data System)10 qui fournit une information sous forme
numrique sur la station coute (nom de la station, frquences correspondantes aux alentours, nature du programme transmis, ventuellement information de
trac, ...). Cet exemple est intressant car il illustre la souplesse du dcodage dinformations transmises sur porteuse radiofrquence par logiciel. En eet, le mme
ux de donnes est dune part dmodul en un ux audible, et dautre part en un ux de donnes numriques, sans que le matriel nait t modi (Fig. 4). Par
ailleurs, notons que lauteur a recr un rcepteur FM comme nous le ferions base de composants lectroniques analogiques, en asservissant une boucle verrouille
en phase (PLL) sur la sortie ltre en passe-bas du rcepteur radio, au lieu dutiliser le bloc de dmodulation prt lemploi de gnuradiocompanion. Les divers
ltres passe-bande permettent ensuite de slectionner la nature de linformation traite dans les diverses bandes de frquence audio (son ou RDS).

Ci-dessous, quelques exemples de captures des signaux numriques transmis dans la bande FM commerciale ct des signaux analogiques radiofrquences
audibles, illustrant quelques-uns des messages transmis sur ce mode de communication.

00A(BASIC)PI:F211PTY:None(country:EG/FR/NO/BY/BA,area:National,program:17)
==>RTL<==TPMusicSTEREOAF:
00A(BASIC)PI:F211PTY:None(country:EG/FR/NO/BY/BA,area:National,program:17)
==>RTL<==TPMusicSTEREOAF:
00A(BASIC)PI:F211PTY:None(country:EG/FR/NO/BY/BA,area:National,program:17)
==>RTL<==TPMusicSTEREOAF:104.00MHz
00A(BASIC)PI:F211PTY:None(country:EG/FR/NO/BY/BA,area:National,program:17)
==>RTL<==TPMusicSTEREOAF:92.40MHz,93.90MHz
00A(BASIC)PI:F211PTY:None(country:EG/FR/NO/BY/BA,area:National,program:17)
==>RTL<==TPMusicSTEREOAF:95.00MHz,97.50MHz
00A(BASIC)PI:F211PTY:None(country:EG/FR/NO/BY/BA,area:National,program:17)
==>RTL<==TPMusicSTEREOAF:101.20MHz,101.50MHz
00A(BASIC)PI:F211PTY:None(country:EG/FR/NO/BY/BA,area:National,program:17)
==>RTL<==TPMusicSTEREOAF:102.20MHz,103.20MHz
00A(BASIC)PI:F211PTY:None(country:EG/FR/NO/BY/BA,area:National,program:17)
@@@@@LostSync(Got46badblockson50total)
@@@@@SyncStateDetected
@@@@@LostSync(Got46badblockson50total)
@@@@@SyncStateDetected
00A(BASIC)PI:F219PTY:None(country:EG/FR/NO/BY/BA,area:National,program:25)
==>IRL<==TPMusicSTEREOAF:99.60MHz,99.80MHz
00A(BASIC)PI:F219PTY:None(country:EG/FR/NO/BY/BA,area:National,program:25)
==>IRL<==TPMusicSTEREOAF:99.60MHz,99.80MHz
00A(BASIC)PI:F219PTY:None(country:EG/FR/NO/BY/BA,area:National,program:25)
==>IRLN<==TPMusicSTEREOAF:97.80MHz,98.40MHz
00A(BASIC)PI:F219PTY:None(country:EG/FR/NO/BY/BA,area:National,program:25)
==>VIRLN<==TPMusicSTEREOAF:100.40MHz
@@@@@LostSync(Got47badblockson50total)
@@@@@SyncStateDetected
@@@@@LostSync(Got49badblockson50total)
@@@@@SyncStateDetected
00A(BASIC)PI:FC67PTY:None(country:EG/FR/NO/BY/BA,area:Regional9,program:103)
==>GRAY<==TPMusicSTEREOAF:100.10MHz
00A(BASIC)PI:FC67PTY:None(country:EG/FR/NO/BY/BA,area:Regional9,program:103)
==>GRAY<==TPMusicSTEREOAF:97.10MHz
02A(RT)PI:FC67PTY:None(country:EG/FR/NO/BY/BA,area:Regional9,program:103)
RadioTextA:RADIOSTARTOUSLESHITSBESANCON106.6GRAY100.2
00A(BASIC)PI:FC67PTY:None(country:EG/FR/NO/BY/BA,area:Regional9,program:103)
==>10AY<==TPMusicSTEREOAF:100.70MHz,87.80MHz

Les trames que nous avons slectionnes illustrent dune part les champs de type AF (alternative frequencies) grce auxquels un rcepteur radio sait comment
rechercher un nouveau canal pour le mme programme radiophonique une fois la liaison courante trop faible, et dautre part le champ RT (radio text) dans lequel un
texte libre dau plus 64 caractres est transmis. Nous navons pas eu loccasion de tester TA (trac announcement) qui est probablement une des applications les
plus utiles de ce mode de communication numrique sur la bande FM commerciale.

Figure 4 : Gauche : capture dcran du dcodeur RDS en fonctionnement.


Noter dans le terminal, en bas de la fentre, les messages qui sachent
(les mme messages sachent dans le terminal do a t lanc
gnuradio-companion), et dans le menu de droite les fonctions RDS qui ont
t ajoutes aprs compilation des blocs disponibles
https://cgran.org/wiki/RDS. Droite : schma complet issu de
http://mmbtools.crc.ca/content/view/45/73/#fm_rds_rx mais pur de
quelques sorties graphiques qui consommaient trop de ressources de
calcul sur eeePC 701.

Un dernier exemple propose le transfert dheure (champ CT) par RDS ainsi que lutilisation du champ de texte libre (RT) pour annoncer le titre en cours de diusion :

04A(CT)PI:F221PTY:None(country:EG/FR/NO/BY/BA,area:National,program:33)
Clocktime:10.08.2012,17:27(+2.0h)
02A(RT)PI:F221PTY:None(country:EG/FR/NO/BY/BA,area:National,program:33)
RadioTextA:Mozart:Concertopourpianon14:1ermvt

3.2 ADS-B
ADS-B (Automatic Dependent Surveillance-Broadcast) est un protocole numrique de communication entre un avion et le sol initi sur une requte provenant dun
RADAR qui sollicite une information de position dun aronef suppos tre quip dun rcepteur GPS. Depuis le sol, un rcepteur (nous) ne peut entendre que la
rponse de lavion la sollicitation : cette rponse se fait la frquence de 1090 MHz. Ainsi, ADS-B fournit une information complmentaire lanalyse purement
passive de rexion de londe lectromagntique par lavion : au lieu de se contenter du temps de vol et orientation de lantenne au moment de lmission de
limpulsion lectromagntique, la position de lavion est complte par sa localisation GPS.

Ce protocole a t implment sous forme de script gnr par gnuradio, disponible https://www.cgran.org/wiki/gr-air-modes (https://www.cgran.org/wiki/gr-
air-modes) et dcrit en dtail dans les transparents [10].

La mise en commun des informations acquises par de tels rcepteurs dADS-B permet de cartographier la position des avions dans le monde de faon indpendante
des contrleurs ariens, tel que par exemple disponible http://www.radarvirtuel.com/ (http://www.radarvirtuel.com/). Le logiciel propos par N. Foster pour
gnuradio inclut une sortie au format KML compatible avec Google Earth et Google Maps (Fig. 5).
Figure 5 : Gauche : spectre acquis lors de lcoute de transmissions en ADS-B,
avec une frquence centrale lgrement dcale par rapport la frquence
dintrt. Droite : carte des avions suivis depuis un rcepteur situ prs
dOrlans, avec une antenne situe sur un balcon dgag vers lEst
uniquement.

3.3 SATELLITES
Deux essais sur les satellites en orbite basse polaire de la NOAA11 et sur la station spatiale internationale (ISS) se sont rvls sans succs, probablement par manque
de sensibilit du rcepteur. Lajout dun amplicateur faible bruit de 25 dB nayant pas amlior la situation, il nest pas exclu que les rglages naient t mauvais.
En particulier, une mise jour rcente du pilote du convertisseur analogique-numrique permet de dsactiver le contrle de gain automatique, qui semble tre un
handicap signicatif pour la rception de signaux faibles12.

4. DCODAGE DUN MODE NUMRIQUE


Lutilisation de fonctionnalits existantes nest que dun intrt limit et le dveloppeur se lasse vite dutiliser les modules disponibles sur le dpt des projets
associs gnuradio CGRAN13. Notre vritable intrt consiste en la matrise des mthodes de dmodulation en vue dadapter ces techniques des mthodes qui ne
sont pas encore implmentes, et ainsi utiliser loutil open source quest gnuradio comme un outil de prototypage souple. Laspect open source du projet est

fondamental pour apprendre par la lecture des codes dautrui14. Nous allons proposer daborder 3 modes de communication numriques : la FSK des radiomodems,
lAFSK tel qu'utilis en packet radio amateur ou commercial, et le protocole ACARS de communication des avions civils (et militaires par compatibilit avec le rseau
civil), protocole plus ancien mais plus intressant que lADS-B puisque transportant des messages sur ltat de laronef ou des messages de lquipage vers le
sol.

Bien que tous ces modes aient t conus dans des dbits de donnes compatibles avec les cartes son, la solution de rcepteur de tlvision numrique terrestre (DVB)
ore nanmoins une solution intgre qui vite lachat dun scanner radiofrquence. Bien quun scanner soit un outil souple demploi et bien plus sensible quune cl
USB, son cot peut paratre rdhibitoire pour lamateur dsireux de sengager dans la voie du dcodage de modes numriques sans vouloir eectuer un
investissement nancier consquent. Par ailleurs, le dcodage numrique des signaux par logiciel permet de dynamiquement adapter les caractristiques des ltres
en ntant limit que par la puissance de calcul disponible, alors quun scanner nore quun nombre ni de modes de dcodage et gnralement 2 ou 3 largeurs de
ltres, implments sous forme matriel et donc inaccessibles pour lacheteur de linstrument.

4.1 LES MODES DE MODULATION ET TRAITEMENT NUMRIQUE DU SIGNAL


Nous ne pouvons prtendre introduire ici tous les lments de traitement du signal associs aux modulations sur porteuse radiofrquence en vue de transmettre un
signal. An de faciliter lintroduction aux concepts pour le lecteur qui nest pas familier avec ces notions, rappelons quun signal priodique s(t) est caractris pour
son comportement temporel t par trois grandeurs : son amplitude A, sa frquence f et sa phase selon s(t)=A(t)*sin(2 f(t)+(t)). Ces trois grandeurs peuvent voluer
dans le temps, individuellement ou simultanment, pour coder un signal transmis : A(t) implique une modulation damplitude (AM en analogique, ou ASK -
Amplitude Shift Keying - pour les modes numriques), f(t) implique une modulation de frquence (FM en analogique, ou FSK - Frequency Shift Keying - pour les
modes numriques) et (t) implique une modulation de phase (PSK - Phase Shift Keying) [11]. Chacune de ces modulations a des proprits dencombrement spectral,
de robustesse diverses sources de bruit et de simplicit de mise en uvre qui impliquent un choix contraint par les paramtres de communication recherchs. Un
cas particulier que nous aborderons plus bas est lAFSK - Audio Frequency Shift Keying - dans lequel les signaux ne sont pas cods par une frquence ou une phase,
mais par une modulation en frquence audible de la porteuse radiofrquence. Il sagit dun mode dvelopp spciquement pour lutilisation avec des modes de
communication de la voix (tlphonie dans le cas des modems, ou transceivers radiofrquences) qui ne ncessitent pas que la sortie soit adapte pour des gammes de
frquences autres que les bandes de frquences audibles (typiquement 1000-5000 Hz).

Ayant introduit ces concepts, nous constatons que le dcodage de signaux numriques consiste en lextraction dun de ces paramtres pour en tracer lvolution dans
le temps et par consquent remonter aux signaux transmis. Le cas de lASK est le plus simple : nous calons le rcepteur sur la frquence de la porteuse
(ventuellement avec un asservissement pour garantir que la drive entre oscillateur de lmetteur et du rcepteur soit compense), et un ltre passe-bas dtecte
lenveloppe du signal. Lamplitude du signal traduit alors la valeur du bit transmis. La FSK est peine plus complique dans le principe puisque nous exploitons le
signal de contrle de loscillateur local asservi par verrouillage de phase sur le signal reu, mais son exploitation est rendue triviale par la disponibilit sous
gnuradiocompanion du bloc ModulatorsWBFMreceive.
Figure 6 : Principe de la dmodulation IQ pour extraire les deux grandeurs
reprsentatives dun signal dentre radiofrquence s(t) connaissant sa frquence f
(ou pulsation angulaire =2 f), savoir son amplitude A(t) et sa phase (t), toutes
deux pouvant tre utilises pour coder de linformation si elles varient avec le temps
t. La frquence de coupure des deux ltres passe-bas aprs les mlangeurs
dnissent la bande passante du dtecteur (qui dnit en partie le dbit de
communication puisquil sagit de la vitesse laquelle les symboles dtermins par
A(t) et/ou (t) peuvent varier).

La dmodulation dun signal passe dans un premier temps par la gnration des signaux I (In-phase) et Q (quadrature) que nous avons dj mentionns sans les
dnir (Fig. 6) : il sagit du mlange du signal incident (dit RF - RadioFrequency) avec un oscillateur local de rfrence (dit LO - Local Oscillator) en vue de gnrer
I=A(t)sin((RF-LO)*t) et Q=A(t)cos((RFLO)*t). Alors I+j*Q=A(t)exp((RFLO)*t) avec j2=-1 [12] (noter que sin et cos sont spars par un dphasage de 90o, donc en
pratique les schmas de dmodulateur I/Q indiquent ces oprations par un mlangeur, donc la composante LO a t sur une des voies dphase de 90o).

Ces deux signaux sont fournis par le composant Elonics E4000 aprs que lutilisateur ait congur LO. Dans ces conditions, une reprsentation simple des concepts
de modulation que nous venons de citer est rsume dans le diagramme de constellation [12, p.11]. Ce diagramme trace en abscisse la composante I et en ordonne la
composante Q telles que nous venons de les dnir et nous permet de revenir au plan complexe dont les proprits sont bien connues : la distance dun point
lorigine reprsente le module du complexe (dans notre cas A(t)) et langle entre laxe des abscisses (I) et le point reprsent dans le plan complexe reprsente sa
phase (t). Ainsi, un diagramme de constellation reprsente dans le plan complexe (I, Q) les divers codes possibles. Une modulation en phase se traduit par des points
distribus le long dun cercle de rayon constant centr sur lorigine, tandis quune modulation en amplitude se traduit par des points distance variable de lorigine.
La modulation en frquence est un peu particulire puisque la frquence est la drive de la phase et par consquent les points dans le plan complexe tournent sur un
cercle centr sur lorigine.

Nous allons, dans les sections qui vont suivre, illustrer le dcodage de ces modes de modulation sur des exemples concrets mis en uvre sur des metteurs
commercialement disponibles dont nous dsirons dcoder les informations transmises. Le radiomodem XE1203F de Semtech met sur un codage modul en
frquence, le packet radio met des signaux moduls par des frquences audibles, et le protocole de communication avec les avions ACARS module un signal en
amplitude.

4.2 CAS DE LA FSK DU SEMTECH XE1203F


Le radiomodem XE1203F15 de Semtech est un transceiver half duplex (soit il met, soit il reoit) susceptible de moduler un oscillateur en frquence (FSK) pour coder
les deux tats possibles de la donne numrique transmise. La frquence de sa porteuse est programmable par pas de 500 Hz : nous slectionnons 434 MHz, en plein
milieu de la bande Industrielle, Scientique et Mdicale (ISM). Lexcursion de la modulation FM entre les deux tats est programmable - nous choisissons 55 kHz, et
le dbit des informations est dni par le ux de donnes issu de linterface asynchrone (UART) du microcontrleur (dans notre cas un ST STM32F103) connect aux
broches DATA et DATAIN du radiomodem (ux de donnes numriques transmis). Ces connexions de broches semblent tre le mode de communication le plus simple
entre le radiomodem XE1203F et le bus de communication asynchrone (RS232) dun microcontrleur, bien que les bits de dbut (start) et de n (stop) de
communication introduisent quelques subtilits dans linterprtation quen fait le radiomodem.

Figure 7 : Gauche : schma blocs pour dcoder le ux


dinformations transmis par un radiomodem en FSK (il
sagit du mme bloc de WFM que nous avions dj utilis
pour les bandes FM commerciales). Droite : sortie
oscilloscope au cours de lenregistrement. Les deux tats
de transmission des donnes sont dj clairement visibles
et laissent prsager dun dcodage ais.
Lapplication du dmodulateur WFM (qui est appropri pour une excursion aussi importante que 55 kHz) donne le signal de la Figure 7 : nous observons de faon
vidente des transitions reprsentatives du ux de donnes sur loscilloscope connect en sortie de dmodulateur. La FSK ne ncessite aucun autre traitement
particulier pour retrouver les valeurs des bits puisque loscillateur radiofrquence est directement attaqu par la valeur du signal numrique transmis : le
dmodulateur fournit un signal basse frquence proportionnel au signal derreur de la boucle asservie en phase, donc directement une tension proportionnelle la
frquence codant chaque bit.

Par ailleurs, lintervalle de temps entre deux transitions est en accord avec un dbit de 4800 bits/s. Enn, lanalyse de ces donnes pour en extraire une squence
comprhensible ncessite de sapproprier la squence dmission que nous avons implmente dans le microcontrleur selon les consignes de la che de donnes de
Semtech :

1. La transmission commence par une squence doscillations entre 0 et 1 nomme bit synchronizer pour que le rcepteur cale son oscillateur sur le signal mis.
Compte tenu du 0 en start bit et 1 en stop bit, nous constatons quune alternance de 0 et de 1 sobtient en envoyant la valeur 0x55 (le bit de poids le plus faible est
envoy en premier), i.e. le caractre U.

2. Nous utilisons la fonctionnalit de coder une adresse du radiomodem metteur, notamment aprs avoir constat que le bruit radiofrquence ambiant a tendance
tre dtect comme une transmission errone en labsence de cette fonctionnalit (Pattern recognition block).

3. Finalement, le motif didentication ayant t dtect, le message lui-mme est transmis.

Nous vrions pour chaque octet dcod que le dernier bit (stop bit) est 1, sinon nous indiquons une erreur. Cette vrication permet en partie de saranchir du
bruit sur le canal radiofrquence de transmission qui risquerait de nous laisser croire quun start bit sest dclench (transition de 1 0), bruit qui a peu de chances de
se retrouver au niveau du stop bit en labsence dune vraie transmission de donnes.

An de faciliter le dveloppement du dcodage, la stratgie de dveloppement que nous proposons consiste systmatiquement commencer par enregistrer dans un
chier binaire (ou WAV pour y ajouter un en-tte de format incluant taille des donnes et frquence dchantillonnage) un ux de donnes, y appliquer dans un
premier temps un algorithme de traitement dvelopp sous GNU/Octave, avant de le traduire en C pour inclure cet algorithme dans le formalisme de gnuradio
(section 5) avant de nalement appliquer un vrai ux de donnes issu du rcepteur radio.

La Figure 8 propose un exemple de schma bloc pour valider lenregistrement et acher en mode oscilloscope les valeurs stockes dans un chier binaire (nous
avons toujours exploit le mode par dfaut dun enregistrement mono-voie - oppos stro - en 8 bits/donnes).

Figure 8 : Bloc pour rejouer un signal enregistr dans un


chier binaire muni dune en-tte WAV : noter
lutilisation du bloc throttle pour imposer le dbit
dmission des donnes lues dans le chier.

4.3 CAS DE LAFSK


LAudio Frequency Shift Keying encode les deux tats possibles sur une frquence audible, typiquement entre 1000 et 1550 Hz pour un tat, et 2000 2500 Hz pour
lautre. En particulier, le mode de transmission packet hrite des protocoles mis en place lpoque de la communication numrique sur lignes tlphoniques cbles
analogiques au moyen de modems.

Lintrt pour ce mode tient en deux aspects : dune part il sagit dun mode de communication numrique couramment utilis par les radioamateurs, et dautre part
le rseau de bus Ginko de Besanon exploite des modems bass sur ce protocole de communication pour localiser ses bus (missions sur 154,150 et 154,154 MHz).

Le mode le plus commun de packet radio est un codage des deux tats possible du bit par un signal 2200 et 1200 Hz (protocole Bell 202), et transmission de donnes
au rythme de 1200 bits/s. Sur lexemple de la Figure 9, les ronds bleus sont chantillonns tous les 40 points, soit pour un chantillonnage 46 kS/s, un dbit
dinformation de 48000/40=1200 bits/s. Comme divers protocoles de modulation sont disponibles (par exemple codage sur 1300 et 2100 Hz tel que dni dans ITU-
V.2316), nous avons choisi dappliquer des ltres large bande coupant autour de 1700 Hz, garantissant ainsi une compatibilit avec peu prs tous les cas dcrits sur le
Web.

Le script GNU/Octave ci-dessous introduit les premiers pas pour le traitement des signaux enregistrs par gnuradio aprs dmodulation FM en bande troite (NFM)
en vue den extraire les valeurs des bits successifs. Lapproche slectionne consiste en une paire de ltres passe-bande autour des deux frquences supposes coder
les deux tats transmis, et est donc souple demploi pour sadapter diverses valeurs de frquences audio.

fe=48000
deb=338100
fin=488000
SEUIL=200
f=fopen(filename='120723_ginko.wav')d=fread(f,inf,'uint8')
d=d(deb:fin)N=fin(m)deb(m)
f=linspace(0,fe,N)
d=dmean(d)

Initialisation des variables - en partie de la frquence dchantillonnage fe, et lecture dun segment de donnes dans un chier enregistr par la fonction wav de
gnuradiocompanion (8 bits/chantillon, une voie).
c=ones(30,1)/30
h=firls(42,[0500100015001900fe/2]/fe*2,[001100])
[H,freq]=freqz(h,1,512,fe)
y12=filter(h,1,d(1:N))
yc12=conv(abs(y12),c)yc12=yc12(15:end15)plot(yc12,'c')holdon

Nous dnissons un ltre de rponse impulsionnelle nie (FIR) dont le gabarit est dni par les amplitudes du second vecteur pour les frquences du premier
vecteur. Dans ce cas, nous laissons passer lnergie entre 1000 et 1500 Hz (amplitude de 1) et coupons en dehors de ces frquences. Un ltre numrique est toujours
dni pour des frquences normalises par rapport la frquence dchantillonnage. Finalement, aprs ltrage, un ltre passe-bas est appliqu sous forme de
convolution avec une fentre rectangulaire de 30 lments de long.

h=firls(42,[01700200026004600fe/2]/fe*2,[001100])
y24=filter(h,1,d(1:N))
yc24=conv(abs(y24),c)yc24=yc24(15:end15)plot(yc24,'m')

La procdure est ritre pour un ltre passe-bande entre 2000 et 2600 Hz.

ind=[9160:40:48000]%http://wiki.ham.fi/AFSK.en
v1=find(yc12(ind)>yc24(ind))tout(v1)=1%1300Hz=1=mark
v2=find(yc12(ind)<=yc24(ind))tout(v2)=0%2400Hz=0=space
res(1)=0
fork=1:length(tout)
if(tout(k)==0)res(k+1)=1res(k)elseres(k+1)=res(k)end
end
plot(ind,tout,'o')

v1 et v2 dnissent ltat de bit le plus probable en comparant la puissance en sortie des deux ltres passe-bande. Tel que dcrit http://n1vg.net/packet/index.php
(http://n1vg.net/packet/index.php), un 0 (2400 Hz) encode un changement dtat du bit par rapport la valeur prcdente, et un 1 (1300 Hz) la reconduction de ltat
prcdent inchang. Le choix de ne prendre qu'un point sur 40 est impos par le dbit suppos de 1200 bits/seconde sur des donnes chantillonnes 48 kHz.

binaire=reshape(tout(1:floor(length(tout)/8)*8),8,floor(length(tout)/8))'
code_asc=binaire(:,1)+binaire(:,2)*2+binaire(:,3)*4+binaire(:,4)*8+binaire(:,5)*16+binaire(:,6)*32+binaire(:,7)*64%
+binaire(:,8)*128
printf('%02x',code_asc)
printf('\n')

Finalement, les donnes sont rorganises en paquets en faisant lhypothse dun octet pour 8 bits, et le rsultat ach sous forme dune squence de valeurs
hexadcimales (%02x) ou de caractres ASCII.

Figure 9 : Rsultat du dcodage, avec application de deux


ltres passe-bande sur les signaux bruts issus du rcepteur
radiofrquence aprs dmodulation en NFM (Narrow FM). Les
bits successifs sont clairement visibles, compatibles avec un
ux de donnes en 1200 bits/s.

Lobtention de la squence de bits nest que le dbut de laventure : il faut maintenant tre capable den extraire une information pertinente, et ce en identiant le
baud rate (les protocoles associs au packet nous laissent penser quun ux de 1200 bits/s est le plus probable, en accord avec nos observations sur la Figure 9), le
nombre de bits/donnes et lventuel bit de parit, et nalement la signication de chaque octet dcod. Ces points nont pas encore t lucids.

4.4 CAS DE LAM ET LE PROTOCOLE ACARS


ACARS est un protocole de communication utilis en aronautique lchelle internationale pour transfrer diverses informations au cours du vol dun aronef, que
ce soit de faon automatique au cours de phases du vol bien dnies (taxi avec des informations de type quantit dessence, en cours de vol avec par exemple
lhoraire darrive prvu et des informations mtorologiques, en approche avec les portes de dbarquement et ltat des racteurs, aprs atterrissage avec le volume
dessence restant, des informations sur lquipage ou des dysfonctionnements informatiques).

La communication numrique en Europe suivant le protocole ACARS se fait sur la frquence de 131,725 MHz, ou accessoirement sur 131,525 MHz et 131,550 MHz.
Compte tenu de la bande passante de la dmodulation par gnuradio, toutes ces frquences peuvent tre analyses simultanment. Pour des raisons que nous ne
saurions expliquer, toutes les communications lies laronautique sont modules en amplitude (AM).

ACARS est un protocole ancien et simple dcoder, bien document dans http://les.radioscanner.ru/les/download/le4094/acars.pdf et
http://www.tapr.org/aprsdoc/ACARS.TXT (http://les.radioscanner.ru/les/download/le4094/acars.pdf et http://www.tapr.org/aprsdoc/ACARS.TXT). Nous y
apprenons que deux frquences encodent les deux tats binaires possibles de linformation transmise : les frquences de 1200 et 2400 Hz sont utilises pour
transmettre des informations 2400 bits/seconde.

Il existe peu dimplmentations libres : acarsd http://www.acarsd.org/ (acarsd http://www.acarsd.org/) est gratuit mais ne diuse pas ses sources, tandis que
acarsdec http://sourceforge.net/projects/acarsdec/ (http://sourceforge.net/projects/acarsdec/) puis http://www.r-36.net/src/acarsdec/ (http://www.r-
36.net/src/acarsdec/) semble stre arrt ltat de prototype qui na plus volu depuis 2007 (ce qui ne retire rien son intrt pdagogique, mais lexemple fourni
nest plus fonctionnel et lhbergeur actuel du code nen connat pas le fonctionnement).
Figure 10 : Spectres dans la bande arienne de 108 137 MHz, o toute
communication se fait en modulation damplitude (AM).

Le choix des frquences de modulation (1200 et 2400 Hz) relativement au dbit (2400 bits/seconde) peut paratre surprenant tant que nous navons pas mis en uvre
un dcodeur de ce protocole : la premire approche nave (que nous avons utilise suite aux exprimentations dcrites auparavant sur le packet) consiste rpartir
des ltres passe-bande rponse impulsionnelle nie (FIR) et ltrer les deux bandes de 1200 et 2400 Hz. Cependant, cette approche ncessite un chantillonnage
rapide du signal, car pour une frquence de 48 kHz dchantillonnage (compatible avec une sortie sur carte son), une priode de signal 2400 Hz ne comporte que 20
points, un nombre rduit pour dnir un ltre passe-bande ecace (et notamment prsentant un coecient nul la frquence nulle pour liminer la composante DC
qui rend les seuils diciles tablir sinon). Cette approche fonctionne, mais ne tire pas parti du choix judicieux des paramtres que nous venons de citer selon les
considrations suivantes :

1. La proportionnalit du dbit (bitrate) et des deux frquences utilises pour coder linformation garantit la continuit de la phase entre bits successifs. En eet, une
fois que la porte de dcoupe des bits est synchronise sur loscillateur gnrant les signaux audio, nous sommes certains que la sinusode du signal audio passe
toujours par 0 un changement de bit.

2. Le fait de coder un bit par une demi priode audio et lautre bit par une priode complte exploite pleinement la capacit de lintercorrlation identier la nature
du bit encod.

Nous allons dvelopper ce dernier point qui est au cur dun dcodeur plus ecace que la simple convolution dun ltre passe-bande sur lensemble des donnes
acquises. Notons dans un premier temps les relations suivantes, qui permettent de valider que la dtection du mauvais tat dun bit se traduit par un signal de valeur
moyenne nulle (intgrale sur la longueur dun bit, soit 1/2400 s) tandis que la dtection du bon bit se traduit par une valeur moyenne non nulle et gale pour les deux
valeurs de bits dtects :

Pour ceux qui ont oubli leur table de trigonomtrie, il sagit dune excellente occasion de tester le site de Wolfram http://www.wolframalpha.com/
(http://www.wolframalpha.com/) en lui demandant de calculer int_0^1sin^2(pi*x)dx. Noter par ailleurs quil est relativement trivial dintuiter que lintgrale sur
une priode dune fonction paire par une fonction impaire de valeur moyenne nulle est nulle, et que lintgrale du carr dune fonction (donc dont toutes les valeurs
sont positives) est non nulle (gure de droite).

Nous constatons donc que le choix de moduler fm=1200 Hz un tat des donnes et 2fm=2400 Hz lautre tat rpond un souci decacit du dcodage : la
convolution du signal acquis avec sin(2 fm t) donne une valeur moyenne nulle si le segment de signal ne code pas le bon tat et donne 1/2 si ltat recherch est
prsent. Ainsi, il sut dinitialement se synchroniser sur le ux de donnes - rle des 16 premiers octets qui oscillent 2400 Hz, puis eectuer deux produits des
squences suivantes avec sin(2 fm t) et sin( fm t) pour retrouver ltat des bits successifs (Fig. 11).
Figure 11 : Signaux issu dun signal audio enregistr lors dune
transmission ACARS sur 131,725 MHz avec application des
algorithmes de ltrage 1200 et 2400 Hz tel que dcrit dans le
texte. Insr droite, un zoom sur les premiers signaux
exploitables en n de synchronisation du rcepteur sur
lmetteur (squence de plusieurs priodes 2400 Hz) :
lidentication de ce point de dpart est un lment cl du bon
dcodage de la suite de la trame car dnit le premier bit du
premier octet sur lequel tout le reste du dcodage se base.

Finalement, ayant obtenu un ux de bits, il reste en interprter le contenu : ACARS exploite un codage dans lequel les transitions dun bit au suivant sont noties,
au lieu de coder directement ltat des bits eux-mmes. Ainsi, un signal 1200 Hz indique un changement dtat par rapport au bit prcdent, alors que 2400 Hz code

le maintien de ltat prcdent17.

Un exemple de mise en uvre par prototypage sous GNU/Octave propose limplmentation suivante :

functionbinaire=fft_decod(filename,deb,fin,seuil)
jmfdebug=0
fe=48000
f=fopen(filename)
d=fread(f,inf,'uint8')
d=d(deb:fin)
N=findeb

Nous lisons le segment de donnes compris entre les indices deb et fin dans le chier filename,

c=ones(60,1)/60
dm=conv(d,c)dm=dm(60/2:end60/2)
d=ddm%retranchemoyenneglissantesur3periodes

application dune moyenne glissante (fentre rectangulaire de 60 points de longueur, soit 1,25 ms fe de 48 kHz),

t=[0:519]%2400Hzdans48kHz=20points/periode*26
c2400x13=exp(i*t*2400/fe*2*pi)%recherchedumaxdes13periodesa2400Hz
s=conv(c2400x13,d)
s=s(length(t)/2:endlength(t)/2)
[a,b]=max(real(s))%maxderessemblancepourdecallagedeb
%plot(d(b260:b+260)/120,'g')holdonplot(real(c2400x13),'r')

le point cl de lalgorithme est de synchroniser le rcepteur sur les oscillations de lmetteur, et pour ce faire nous devons trouver le maximum de lintercorrlation
entre la squence des signaux 2400 Hz mis par ACARS dans ce but de synchronisation. Nous gnrons donc un vecteur c2400x13 qui contient les valeurs dune
sinusode chantillonne fe et de frquence 2400 Hz, et recherchons le maximum dintercorrlation qui, pour un signal rel, revient une convolution.

b=mod(b,20)+5%revientaudebutparpasde2pi
d=d(b+400:end)%biensecalerestfondamentalpourlasuite
%estiljudicieuxd'essayera+/1?

Ayant identi le point de mesure permettant de synchroniser les sinusodes synthtises de faon logicielle et les donnes acquises, nous avons choisi de replacer le
curseur au dbut de la squence de mesure en nous dplaant par pas de 20 chantillons, soit une priode (48000/2400) de sinusode 2400 Hz. Cette tape est peut-
tre inutile, mais vite de risquer de saccrocher sur une squence longue de signaux 2400 Hz se trouvant au milieu du message ACARS transmis :

t=[0:19]%2400Hzdans48kHz=20points/periode
c2400=exp(i*t*2400/fe*2*pi)
c1200=exp(i*t*1200/fe*2*pi)
s12=conv(c1200,d)
s24=conv(c2400,d)
%plot(d)holdonplot(real(s12),'r')plot(real(s24),'r')

Nous recherchons dsormais les bits individuels, cods soit par une priode de 2400 Hz, soit une demi priode de 1200 Hz, soit dans tous les cas 20 chantillons,

t=[0:19]%2400Hzdans48kHz=20points/periode
fin20=floor(length(s12)/20)*20
s12=s12(1:fin20)s24=s24(1:fin20)
rs12=reshape(abs(s12),20,length(s12)/20)
rs24=reshape(abs(s24),20,length(s24)/20)
rs12=sum(rs12)
rs24=sum(rs24)

contrairement au cas prcdent du XE1203F o nous nous tions contents de prendre un point sur 40 pour tenir compte de la frquence de bits transmis, cette fois
nous allons moyenner les valeurs des chantillons au sein de chaque bit pour amliorer le rapport signal bruit (et donc la capacit de dcodage du message en milieu
bruit). Pour ce faire, nous rorganisons les deux vecteurs de mesures ltres par les squences de sinusodes 1200 et 2400 Hz sous forme dune matrice de 20
points de large (la longueur en chantillons dun bit), et allons sommer les lments pour eectuer la moyenne. rs12 et rs24 contiennent les informations
permettant didentier si un bit est plus problement 1 ou 0 et mrite dtre aches dans une phase prliminaire de dverminage (Fig. 11).

if(jmfdebug==1)plot(rs12,'bo')end
if(jmfdebug==1)holdonplot(rs24,'ro')legend('1200','2400')end
seuil=max(rs24)*0.55
l0=find((rs24+rs12)>seuil)%onnegardequelespointsutiles
rs12=rs12(l0)rs24=rs24(l0)
ll=find(rs24>seuil)ll=ll(1)
rs12=rs12(ll:end)
rs24=rs24(ll:end)

Finalement, la squence dchantillons est traite pour la convertir en valeurs binaires : nous recherchons, par critre de seuil, les valeurs pertinentes (signal au-
dessus du bruit, ci-dessus) et les valeurs des bits par comparaison des sorties des deux ltres (convolutions, ci-dessous).

l=find(rs12>rs24)l=l(1)
rs12=rs12(l:end)
rs24=rs24(l:end)
pos12=find(rs12>rs24)
pos24=find(rs24>rs12)
toutd(pos12)=0
toutd(pos24)=1

Les valeurs binaires sont nalement rorganises en octets, selon la mthode vue auparavant sur le radiomodem, avec la valeur du bit codant la transition dtat ou le
maintien de la valeur par rapport la valeur courante du bit.

n=1
tout(n)=1n=n+1%lesdeuxpremiers1sontoublie'scaronsesyncsur1200
tout(n)=1n=n+1
fork=1:length(toutd)
if(toutd(k)==0)tout(n)=1tout(n1)elsetout(n)=tout(n1)endif
n=n+1
end
binaire=reshape(tout(1:floor(length(tout)/8)*8),8,floor(length(tout)/8))'
code_asc=binaire(:,1)+binaire(:,2)*2+binaire(:,3)*4+binaire(:,4)*8+binaire(:,5)*16+binaire(:,6)*32+binaire(:,7)*64
checksomme=1mod(sum(binaire(:,1:7)')',2)%verification
printf('%02x',code_asc)printf('\n')
printf('%c',code_asc)printf('\nCRC:')printf('%d',checksommebinaire(:,8))printf('\n')

Les valeurs sont aches sous forme hexadcimale, code ASCII correspondant, et validation du bit de parit.

En rsum, ce code exploite la trame ACARS de la faon suivante :

1. Identication de loccurrence du dbut de trame sous forme de plusieurs oscillations 2400 Hz : nous nous sommes imposs de trouver au moins 13 priodes du
signal 2400 Hz pour dnir le dbut de trame et synchroniser notre traitement sur la phase du signal acquis.

2. Identication des segments de 1 (2400 Hz) et de 0 (1200 Hz) par convolution dune priode de sinusode de chacune des frquences avec le signal traiter. Seule
une unique convolution est utile car lincertitude sur la phase (qui ncessiterait par exemple 20 convolutions pour le signal 2400 Hz pour identier la phase parmi
les 20 valeurs possibles qui maximisent lintercorrlation) a dj t rsolue lors de ltape prcdente.

3. Le codage des informations reprsentant une transition dun tat un autre et non ltat lui-mme, il reste convertir la squence de bits issue de la convolution
en des valeurs interprtables en ASCII. Noter en particulier que la documentation http://www.pervisell.com/ham/raftmode.htm#I76
(http://www.pervisell.com/ham/raftmode.htm#I76) est errone concernant la parit du ux de donnes. Il est par ailleurs remarquable denn comprendre la
signication dentres tranges de la table ASCII (man ascii), telles que le caractre 01 (dbut den-tte), 02 (dbut de texte) ou 03 (n du texte) qui sont exploites
par ACARS. Par ailleurs, le fait de coder la transition induit que ds la premire erreur de dcodage, tout le reste du message sera illisible. Ainsi, nous aurons souvent
lidentiant de lavion mettant le message, mais obtenir tout le contenu du message lui-mme est dicile car dpendant de labsence derreur de traitement des
bits tout au long du message.

Lapplication dune convolution entre deux sries de donnes de longueur respective M et N pose toujours un problme de dnition de lorigine. En eet, la version
numrique (discrte) de la convolution c entre ui, i[1..M] et vj, j[1..N], est

avec u et v gaux 0 en dehors des intervalles cits ci-dessus. Dans le cas du passage dans le domaine de Fourier, les squences u ou v sont compltes de 0 (zero
padding) pour avoir la mme taille (et sapprocher de la puissance de 2 suprieure la plus proche dans le cas de la transforme de Fourier rapide).

Dans lquation ci-dessus, lintgrale dont les bornes sont +/- peut en pratique tre longue calculer, linni tant dicile atteindre. On intgrera donc, pour
deux sries de points de longueurs M et N, soit entre max(M,N) si nous faisons glisser la srie des u sur les v pour gnrer ainsi un total de max(M,N) points, ou
alternativement une srie de M+N points si nous compltons une des deux sries par des 0 pour galer la longueur des deux sries. Cette approche est par exemple
celle propose dans le code traduit en C que nous dvelopperons ci-dessous (section 5.2), puisque le passage par Fourier impose de multiplier point par point deux
squences de longueurs gales. Le problme de la position de lorigine se pose donc selon le formalisme slectionn, et la principale dicult rencontre dans la
conversion du code GNU/Octave vers C se trouve ce niveau (sans compter les conventions de normalisation de la transforme de Fourier qui imposent de recalculer
les seuils dans la nouvelle implmentation).

Le programme GNU/Octave ci-dessus identie le dbut de trame (srie doscillations 2400 Hz), ache la squence des valeurs hexadcimales dcodes, leur
interprtation dans le code ASCII, et lapplication du bit de parit la squence ainsi dcode. Dans le rsultat ci-dessous, nous constatons que toutes les valeurs ont
t convenablement dcodes, sauf les 9 dernires, probablement sans importance car situes aprs le caractre ASCII 0x03 (n de la chane de texte).

Nous achons ci-dessous dans un premier temps les valeurs hexadcimales des octets dcods (commenant toujours par la squence de synchronisation 0x2b 0x2a
0x16 0x16 si le dcodage est eectu correctement), linterprtation selon le code ASCII si le caractre est achable, et nalement ladquation avec le bit de parit
(0 pour la cohrence avec ce bit, +/-1 sil y a erreur) :

binaire=fft_decod('acars_orleans.wav',101001+2.15e6,101001+2.15e6+40000,7000)
2b2a161601582e472d4555554715483139024330334142413932313623434642
57524e2f574e31323036333030383333303033343030303030364e415620494c
532032204641554c542020202020202020200d036d1d7f7f7f7f7f7f7f
m*X.GEUUGH19C03ABA9216#CFBWRN/WN12063008330034000006NAVILS2FAULT
CRC:000000000000000000000000000000000000000000000000000000000000000000000000000000000000100111111

Il est toujours intressant de savoir quun avion - ici G-EUUG qui est un Airbus A320 de British Airways18 allant de Londres lItalie au cours du vol BA9216 - est en

train de voler avec un dfaut sur son instrumentation secondaire datterissage19.

Les abrviations des messages sont dcrites http://www.angelre.com/sc/scannerpost/acars.html (http://www.angelre.com/sc/scannerpost/acars.html).


5. DU PROTOTYPAGE LEXPLOITATION SOUS GNURADIO
Gnuradio-companion convertit un schma de traitement dni de faon graphique en script Python, faisant appel aux fonctions correspondantes. Cependant, les
donnes qui transitent entre les blocs, i.e. le ux issu des dmodulateurs I/Q, ne passent que dun bloc lautre sans tre accessibles depuis le script Python (code 1,

correspondant au schma graphique de la Figure 8). Chacun de ces blocs est lui-mme cod en Python ou C(++), suivant un protocole dchange de donnes20. Nous
allons donc traduire le code C dexemple de dcodage des trames FSK pour respecter les conventions de blocs gnuradio-companion et ainsi eectuer le traitement en
temps rel (au lieu denregistrer les informations dans un chier binaire en vue de son post-traitement).

self.wxgui_scopesink2_0=scopesink2.scope_sink_f(
self.GetWin(),
title="ScopePlot",
[...]
)
self.Add(self.wxgui_scopesink2_0.win)
self.gr_throttle_0=gr.throttle(gr.sizeof_float*1,samp_rate)
self.gr_file_source_0=gr.file_source(gr.sizeof_char*1,"nom_du_fichier.wav",True)
self.gr_char_to_float_0=gr.char_to_float(1,1)
self.connect((self.gr_throttle_0,0),(self.wxgui_scopesink2_0,0))
self.connect((self.gr_char_to_float_0,0),(self.gr_throttle_0,0))
self.connect((self.gr_file_source_0,0),(self.gr_char_to_float_0,0))
tb=top_block()

tb.Run(True)

Tableau 1 : Le code Python gnr par gnuradio-companion ne donne pas accs au ux de donnes radiofrquences mais ne fait que dnir des blocs et les
connecter entre eux pour router les informations dune unit de traitement la suivante.

Le dveloppement de blocs pour la gnuradio ncessite lutilisation dun environnement particulier constitu dun rpertoire contenant lui-mme des sous-
rpertoires dans lesquels seront stocks les dirents chiers ncessaires lexploitation du bloc.

La premire tape pour la cration dun (ou plusieurs) bloc(s) est donc de disposer de cet environnement de dveloppement. Toutefois, an dviter ltape
fastidieuse de la cration manuelle de larborescence, nous allons utiliser le script grmodtool.py21. Cet outil sert la fois gnrer le squelette du rpertoire et de
ses sous-rpertoires, mais galement de le peupler.

La cration du projet se fait avec la commande suivante :

gr_modtool.pycreateplop

lissue de cette commande, un rpertoire grnomduprojet apparat dans le rpertoire courant et comporte (entre autres) les rpertoires :

- grc pour les chiers de descriptions utiliss par grcompanion ;

- include pour les en-ttes ;

- lib pour les chiers sources C++ dextension .cc.

Lajout dun bloc de traitement du signal numrique dans le projet se fait avec la commande (il faut se trouver dans le rpertoire du projet) :

gr_modtool.pyaddtgeneralplup

Largument t spcie le type de bloc, dans le cas prsent nous demandons un type gnrique mais il existe dautres types tels que des sinks, des sources, des
dcimateurs, ... Comme nous le verrons un peu plus bas, le type va impacter sur la signature de certaines mthodes.

Entervalidargumentlist,includingdefaultarguments:

AddPythonQAcode?[Y/n]

AddC++QAcode?[Y/n]

La premire ligne permet de directement spcier les paramtres que le bloc recevra au moment de son instanciation (type de donne, gain, seuil, ...). Les deux lignes
suivantes correspondent lajout (ou pas) de test-unitaire pour le bloc.

lissue de cette tape, les rpertoires ont t peupls avec les chiers ncessaires et ceux-ci partiellement remplis.

Trois chiers retiendront principalement notre attention :

- grc/nomDuProjet_nomDuBloc.xml : ce chier fournit la description du bloc gnuradiocompanion. Il stipule, entre autres, le nom du bloc (balise name), dans
quelle catgorie il doit tre rang (balise category), les paramtres (balise param) ainsi que leurs noms, type et variables correspondantes, et les entres (sink) et les
sorties (source). Un exemple dun tel chier qui passe un paramtre (valeur relle seuil) la mthode de traitement des donnes decodeur de la classe acars est :

<?xmlversion="1.0"?>
<block>
<name>decodeur</name>
<key>acars_decodeur</key>
<category>acars</category>
<import>importacars</import>
<make>acars.decodeur($seuil)</make>
<param>
<name>Threshold</name>
<key>seuil</key>
<type>real</type>
</param>
<sink>
<name>in</name>
<type>float</type>
</sink>
</block>

- include/nomDuProjet_nomDuBloc.h et lib/nomDuProjet_nomDuBloc.cc : la classe et son implmentation. Par dfaut, ils contiennent :


- un constructeur priv,

- un destructeur public,

- une fonction nomDuProjet_make_nomDuBloc dnie comme friend vis--vis de la classe (donc pouvant accder au constructeur) et dont le rle est de retourner
une instance de la classe,

- une mthode publique general_work.

Ces concepts abstraits de larborescence seront illustrs par des bouts de code plus loin dans ce document (section 5.3), et le lecteur est encourag consulter le code
dexemple disponible http://jmfriedt.free.fr/gr-acars.tar.gz (http://jmfriedt.free.fr/gr-acars.tar.gz) ou sur le site de CGRAN www.cgran.org/wiki/ACARS
(www.cgran.org/wiki/ACARS).

La dernire mthode peut galement sappeler work selon le type du bloc. Cette mthode est sans doute la plus importante car cest elle qui reoit le ux venant du
bloc prcdent dans la chane, ralise le traitement et fournit les nouvelles donnes. Sa signature est la suivante :

intplop_plup::general_work(intnoutput_items,
gr_vector_int&ninput_items,
gr_vector_const_void_star&input_items,
gr_vector_void_star&output_items)

avec noutput_items qui comme son nom ne lindique pas, donne le nombre dinformations reues, input_items un tableau contenant les donnes entrantes et qui
doit tre recast dans le bon type, output_items le tableau que le bloc doit remplir avec les donnes traites. ninput_items peut ne pas exister, selon le type du
bloc, et semble ne pas servir grand chose.

An de compiler notre application, nous oprons comme avec toute archive rencontre jusquici pour gnuradio : cration dun sous-rpertoire build dans
larborescence des sources du module compiler, excuter cmake../ aprs tre rentr dans ce rpertoire, puis makeVERBOSE=1&&makeinstall. Noter qu'une
fois le bloc nouvellement cr dans gnuradiocompanion (dans la liste des menus de la colonne de droite), il est inutile de relancer linterface graphique suite
chaque recompilation. En eet, le code Python qui est excut en pratique est rgnr chaque fois que nous cliquons sur licne avec des engrenages, et le module
nouvellement compil recharg. Nous aurons donc toujours la dernire version du module compil et install par makeinstall disponible lors de lexcution de la
chane de traitement (Fig.12).

5.1 CAS DU RADIOMODEM XE1203F


Ayant prototyp les mthodes de ltrage sous GNU/Octave, nous dsirons pouvoir acher les donnes dcodes en temps rel. Les tapes de ce portage se font en 3
tapes :

1. Conversion dun script GNU/Octave en C et vrication de toutes ses fonctionnalits en lisant un enregistrement dun chier audio (ou binaire si sa frquence
dchantillonnage nest pas compatible avec celle de la carte son) et application des ltres implments en C. Cette tape a encore lavantage de pouvoir traiter
lintgralit des donnes contenues dans le chier (code 2).

2. Conversion du programme cit ci-dessus pour travailler sur des segments de donnes de taille alatoire (Fig. 14), reprsentatives des bouts de donnes qui seront
fournis par les blocs de dmodulation et de ltrage de gnuradio.

3. Intgration du code C(++) ainsi gnr dans le formalisme dun bloc gnuradio.

Figure 12 : Dcodage du ux dinformations issu dun radiomodem XE1203F


par traitement logiciel des donnes I et Q pour en extraire linformation
numrique mise, dans un premier temps enregistr dans un chier binaire
(.wav) et restitu pour valider le bon fonctionnement du bloc (nomm
square). Noter, en bas du menu droite, lajout dune entre HOWTO avec le
module square, qui correspond au rsultat de la compilation de notre module
de traitement. Il est inutile de relancer gnuradio-companion lors de
modications des fonctions de square : le bloc est recharg lors de la
gnration du code Python chaque nouvelle excution de la squence de
traitements.

#defineMAXSIZE100000
#defineNSEARCH260//13periods*20pts/period
voidconv1(unsignedchar*in,int*out,intN,intlen)
{intsomme=0,k
for(k=0k<lenk++)somme+=(int)in[k]//moyenneglissantesurlenpoints
for(k=lenk<Nk++){somme=sommein[klen]+in[k]out[klen]=somme/len}
}
#definesegment8192
intmain(intargc,char**argv)
{charfilename[255]
intdeb,seuil,courant
intk,i,fe=192000,f,N
intdm[MAXSIZE]
unsignedchard[MAXSIZE],code_asc
intb=0,l0=0,pos=0
if(argc<4)printf("%sfilenamedebseuil\n",argv[0])else
{sprintf(filename,"%s",argv[1])deb=atoi(argv[2])seuil=atoi(argv[3])}
deb=0
do{
f=open(filename,O_RDONLY)//lecturedesegmentdonneesdanslefichierdepoints
k=segment
i=lseek(f,deb,SEEK_SET)
if(i!=deb)fprintf(stderr,"lseekerror%d\n",k)
N=read(f,&d[pos],k)printf("\nN=%d\n",N)
close(f)
conv1(d,dm,N,20)//c=ones(20,1)/20dm=conv(d,c)dm=dm(20/2:end20/2)
for(k=0k<Nk++)if(dm[k]<seuil)dm[k]=1elsedm[k]=0
//k=find(dm<100)dm(k)=0k=find(dm>=100)dm(k)=1dm=1dm
//%etataureposest1,startbitestpassagea0
courant=0
while(courant<(N+pos380)){//k=find(dm(courant:end)<1)dm=dm(k(1)+courant1:end)
do{courant++}while((dm[courant]==1)&&(courant<(N+pos380)))
if(courant<(N+pos380))//db=dm(20:40:20+40*9)%10bits=START+9,40points/bit
{code_asc=dm[courant+60]+dm[courant+100]*2+dm[courant+140]*4+dm[courant+180]*8+
dm[courant+220]*16+dm[courant+260]*32+dm[courant+300]*64+dm[courant+340]*128
if(code_asc>0){
if(dm[courant+380]==0){}//printf("err")//stopbiterror
else
{if(((code_asc>=32)&&(code_asc<128))||(code_asc=='\n')||(code_asc=='\r'))
printf("%c",code_asc)
elseprintf("\\%x",code_asc)
}
}
courant+=380//milieudustopbitdel'octetquivientd'etretraite'
}
}
memcpy(d,&d[courant],N+poscourant)//copiecequirestededonnees
pos=N+poscourant
deb+=segment
}while(N==segment)//bouclesurdebpoursimulerblocsgrc
printf("\n")
}

Tableau 2 : Traduction en C du code prototyp sous GNU/Octave pour le dcodage des transmissions dun radiomodem XE1203F modul en frquence (FSK) pour
une transmission numrique de donnes 4800 bits/s. Nous avons laiss en commentaires les principales squences du code pour GNU/Octave que nous avons
traduites. Noter la lecture du chier par segments de segment lments, et concatnation des valeurs qui nont pu tre traites car ne formant pas un bit
dinformation complet, reprsentatif du ux de donnes que nous fournira gnuradio lors dun dcodage en temps rel.

Le problme de la gestion de la taille des donnes traiter est rsolu de la faon suivante : nous savons quun octet complet tient sur 10 bits (start, 8 bits de donnes,
stop) donc 400 chantillons pour un signal chantillonn 192000 Hz et transmis 4800 bits/s (192000/480010=400). Nous allons donc tout dabord rechercher

loccurrence dun start bit (passage de 1 - tat au repos - 0 - tat du start bit22), et si la masse de donnes traiter dpasse 400 bits, nous continuons le traitement
consistant tester la valeur du bit tous les 40 chantillons (puisque 192000/4800=40). Comme dans toute communication asynchrone, le start bit permet de se
resynchroniser pour les 9 bits qui vont suivre : nous vrions que le stop bit est bien 1, et recherchons chantillon par chantillon loccurrence du prochain passage
0 pour relancer un dcodage. Si la quantit de donnes restant traiter aprs dtection dun start bit est infrieure 400, alors nous copions en dbut de tableau les
donnes restantes, et concatnons les nouvelles donnes pour relancer le traitement sur un jeu de donnes complet. Si aucune transmission nest dtecte sur les
donnes acquises, la recherche de la transition du start bit atteint la n du tableau et nous pouvons sereinement traiter le nouveau paquet de donnes sans craindre
davoir coup une transmission en cours. Le rsultat de cette implmentation (Fig. 13) est visible sur la table 3.

Figure 13 : Gauche : schma bloc de gnuradio-companion pour le dcodage des trames acquises par
EZCAP et fournies aprs dmodulation au bloc de traitement que nous avons dvelopp et test sur carte
son. Noter le gain important (environ 3700) et le biais (128) quil faut ajouter pour ajuster la gamme des
donnes issues du bloc de dmodulation aux valeurs lues dans le chier .wav exploit pour les
traitements. Droite : montage exprimental, avec le radiomodem XE1203F command par un
microcontrleur STM32, et le module EZCAP pour lcoute du ux de donnes mis.

N=1361
N=5444
N=6805\fcUUUU\bc\e7\93\2
N=13612.
N=6820
N=1361000
N=136104\fe
N=136163
N=136114\fd
N=408303101138
N=5444*7C12188
N=5444
N=1361\f0
N=1361\f0
N=1361
N=2722
N=1361
N=1361
N=5444\10\fc
N=6805UUUU\bc\e7\93\822

Figure 14 : Le bloc compatible gnuradio quip, pour le dverminage, de lachage dune variable N contenant le nombre de donnes fournies par le bloc de
dmodulation : nous constatons que cette valeur volue de faon plus ou moins alatoire, et quil est donc impossible de faire une hypothse sur la taille des
donnes traiter. La solution propose est dcrite dans le texte.

UUUU\bc\e7\fb\822.0\fc000465315346002109
\c\f8\e0UUU\bc\e7\93\82\fe.000\fc055831500702110
\fc\c0UUU\bc\e7\93\822000005953116\f9802110
U\e0UUUU\bc\93\822.0\fc00006\ff731426902110
\ff\b0E\e0UUUU\bc\e7\93\fe2.00T0022531374100210
\fc\f0UUUU\bc\e7\93\82\fe.000033331241202110
\ff\ff\e0\c1UUU\bc\e7\93\822.00\bc00203\bc314191302111
\ff\5\ff\f8\c0U5UU\bc\e7\93\822.000\e40367\e712461402111
\f8\f0\e0UUU\bc\e7\93\822.0000\941953\952961502111
\f8\f0UUUU\bc\e7\93\822\fe00000\fc2843130\fd1702111
\ff\e0\5\f0\f0\e0UUUU\bc\e7\93\822.00000\d02\f0931311\85902112
\ff\e0\f0\f0\e8\e0UUUU\bc\e7\93\822.0000033631\e74120021\e52
2.0000046531534602109
2.0000055831500702110
2.0000059531169802110
2.0000063731426902110
2.00000225313741002110
2.00000333313241202110
2.00000203314191302111
2.00000367312461402111
2.00000195312961502111
2.00000284313051702111
>2.00000201313251802112
2.00000209313111902112

2.00000336313412002112

Tableau 3 : Comparaison des trames issues du dcodage par gnuradio des signaux reus par rcepteur EZCAP (gauche), et les trames mises par le radiomodem. Les
trames de gauche commencent par le signal de synchronisation UUUU, suivi dun identiant du modem metteur, suivi de la trame. Bien que la conversion ne soit
pas parfaite, la majorit des trames mises (droite) se retrouve dans les signaux dcods (gauche). Nous avons indiqu dans la table de droite une ligne prxe par
une che qui a compltement t omise lors du dcodage par chec du dcodage de la trame UUUU dinitialisation de la transmission.

5.2 CAS DE LACARS - ATTENTION, PARAGRAPHE ADDICTIF


La philosophie que nous avons adopte ici pour convertir le code de traitement prototyp sous GNU/Octave vers un ux de donnes de taille alatoire consiste
concatner les donnes reues pour former un bloc contenant lintgralit des donnes, et de nappliquer la phase de dcodage que sur lintgralit de ce bloc, pour
revenir aux conditions dj connues sous GNU/Octave. Lintrt dun bloc est dtermin par la convolution entre le signal acquis et un ltre centr sur 2400 Hz. Nous
avons dj vu que toute communication ACARS sinitie avec plusieurs priodes dun signal 2400 Hz pour laisser le temps au contrle de gain automatique du
rcepteur radiofrquence de se stabiliser et synchroniser lhorloge du rcepteur avec celle de lavion. Ce signal sert donc identier le dbut dun message. Ensuite,
nous concatnons les donnes pour atteindre la taille maximale que pourrait atteindre un message ACARS (nous avions tent de concatner tant que la puissance du
signal reu dpasse un seuil prdtermin, mais cette approche savre trs sensible la valeur du seuil de dtection), soit 258 caractres compte tenu de la taille de
texte la plus longue admissible.

La traduction du code GNU/Octave en C se fait alors sans trop de problme si ce nest pour la convolution qui nest ecacement implmente que par le passage dans
le domaine de Fourier. Heureusement, une bibliothque vient notre secours pour viter de rimplmenter ces fonctions : libtw3.

Note

gnuradio exploite un environnement de compilation visant tre portable entre un*x, MacOS X, et MS-Windows, cmake, ou le Cross Platform Make
(www.cmake.org (www.cmake.org)). Alors qu'ajouter une bibliothque dans un classique Makefile se rsumait ajouter le nom de la bibliothque prcd de l,
cmake a pour ambition de trouver tout seul les bonnes bibliothques aux bons emplacements, et ce quel que soit lenvironnement de dveloppement. Pour ajouter
libfftw3, nous avons d piocher dans le script de recherche de larborescence disponible
http://code.google.com/p/qmcpack/source/browse/trunk/CMake/FindFFTW.cmake
(http://code.google.com/p/qmcpack/source/browse/trunk/CMake/FindFFTW.cmake), et complter le CMakeLists.txt (pendant du classique Makefile de notre
enfance) par find_package(FFTW) et INCLUDE_DIRECTORIES($FFTW_INCLUDE_DIR) pour la recherche den-tte et LINK_LIBRARIES($FFTW_LIBRARIES) pour
la portabilit des bibliothques.

#include<fftw3.h>
#defineMAXSIZE1000000
#defineNSEARCH260//13periods*20pts/period
voidremove_avg(unsignedchar*d,int*out,inttot_len,intfil_len)
{inttmp,k,avg=0
for(k=0k<fil_lenk++)avg+=d[k]//initialisemoyenneglissante
for(k=0k<tot_lenfil_lenk++){out[k]=d[k]avg/fil_lenavg=d[k]avg+=d[k+fil_len]}
for(k=tot_lenfil_lenk<tot_lenk++)out[k]=d[k]avg/fil_len
}

Cette premire fonction de retrait de la valeur moyenne - rappelons que lintercorrlation qui sera utilise pour trouver la squence de sinusodes 2400 Hz suppose
un signal de valeur moyenne nulle - retire le rsultat dune fentre glissante de fil_len lments du tableau d pour gnrer out. Ce pr-traitement est fondamental
pour toute la suite des oprations.

intmain(intargc,char**argv)
{charfilename[255]
intdeb,fin,seuil,k,i,fe=48000,f,N,t,*out,n,b=0,l0=0
unsignedchard[MAXSIZE],*toutd,*tout
doublea=0.,*rs12,*rs24,*rc12,*rc24,c2400[20],c1200[20],s2400[20],s1200[20]
fftw_complex*c2400x13,*fc2400x13,*fd,*s,mul,*ss
fftw_planplan_a,plan_b,plan_R
if(argc<5)printf("%sfilenamedebfinseuil\n",argv[0])else
{sprintf(filename,"%s",argv[1])deb=atoi(argv[2])fin=atoi(argv[3])seuil=atoi(argv[4])}
if((findeb)>MAXSIZE){fin=deb+MAXSIZEfprintf(stderr,"deb=%dfin=%d\n",deb,fin)}
f=open(filename,O_RDONLY)if(f<0)fprintf(stderr,"openerror%d\n",f)
k=lseek(f,deb,SEEK_SET)if(k!=deb)fprintf(stderr,"lseekerror%d\n",k)
N=read(f,d,findeb)close(f)//d=d(deb:fin)N=findeb
out=(int*)malloc(sizeof(int)*N)
remove_avg(d,out,N,60)//c=ones(60,1)/60dm=conv(d,c)dm=dm(60/2:end60/2)d=ddm

La lecture du chier de points acquis par gnuradiocompanion est triviale - un octet par donne qui ne pose donc pas de problme dendianness - et lindice de
dbut de la squence analyse dans le chier va nous servir par la suite simuler le fait que le ux de donnes issu des dmodulateurs de gnuradio peut avoir des
tailles variables.

c2400x13=(fftw_complex*)fftw_malloc(sizeof(fftw_complex)*N)
[...idempourinitialiserfc2400x13,fd,s,ss...]
for(t=0t<520t++)//t=[0:520]c2400x13=exp(i*t*2400/fe*2*pi)
{c2400x13[t][0]=cos((double)t*2400./fe*2*M_PI)
c2400x13[t][1]=sin((double)t*2400./fe*2*M_PI)
}
for(t=520t<Nt++){c2400x13[t][0]=0c2400x13[t][1]=0}//13periodes2400Hz
for(k=0k<Nk++){s[k][0]=(double)out[k]s[k][1]=0.}
plan_a=fftw_plan_dft_1d(N,c2400x13,fc2400x13,FFTW_FORWARD,FFTW_ESTIMATE)
plan_b=fftw_plan_dft_1d(N,s,fd,FFTW_FORWARD,FFTW_ESTIMATE)
plan_R=fftw_plan_dft_1d(N,fd,ss,FFTW_BACKWARD,FFTW_ESTIMATE)
fftw_execute(plan_a)fftw_execute(plan_b)
for(k=0k<Nk++)//produitdestransformeesdeFourierpourintercorrelation
{mul[0]=fc2400x13[k][0]*fd[k][0]fc2400x13[k][1]*fd[k][1]
mul[1]=fc2400x13[k][1]*fd[k][0]+fc2400x13[k][0]*fd[k][1]
fd[k][0]=mul[0]/(float)N
fd[k][1]=mul[1]/(float)N
}
fftw_execute(plan_R)//puisretourdansledomainereelparFFTinverse
fftw_destroy_plan(plan_a)fftw_destroy_plan(plan_b)fftw_destroy_plan(plan_R)//s=conv(c2400x13,d)

Lappel aux fonctions de transforme de Fourier proposes par fftw3, opration fastidieuse implmenter par ailleurs, passe par lallocation de mmoire des divers
tableaux exploits par les tapes intermdiaires de calcul de lintercorrlation en passant dans le domaine de Fourier (pour rappel, nous avions dj explicit dans ces
pages [13] le gain en temps de calcul - de N2 Nln(N) - lors de la recherche dun motif dans une squence de points de taille N par intercorrlation). Les motifs
recherchs sont dnis sous forme de segments de sinusodes normaliss par la frquence dchantillonnage fe=48000Hz.

for(k=0k<NNSEARCHk++)if(ss[k+NSEARCH2][0]>a){a=ss[k+NSEARCH2][0]b=k}//[a,b]=max(real(s))
printf("a=%fb=%d\n",a,b)
b=b%20

Le maximum dintercorrlation identie lindice, dans le temps, pour lequel le motif des sinusodes 2400 Hz a t identi dans la squence de points
exprimentaux. Cette identication est un point cl pour optimiser la suite des oprations car rsout lincertitude sur la phase. En eet, nous avons vu dans la
prsentation des squences I et Q issues des mlangeurs que deux paramtres inconnus sont lamplitude et la phase du signal. Lintercorrlation permet didentier
les deux paramtres, mais au prix dun calcul lourd. Si la phase est connue, alors il ne reste que lamplitude identier, et ceci ne ncessite que N multiplications en
faisant glisser le motif dune priode de sinusode sur les points exprimentaux par pas dune priode (et non plus par pas dun point dchantillonnage). Cest ce que
nous allons faire ci-dessous avec une priode de sinusode 2400 Hz et une demi-priode 1200 Hz, chacune encodant un tat du ux de donnes numriques. Nous
prendrons ensuite le module du produit de convolution pour viter le cas de lopposition de phase qui donnerait un rsultat de magnitude leve mais ngatif.

for(t=0t<20t++)//t=[0:520]c2400x13=exp(i*t*2400/fe*2*pi)
{c2400[t]=cos((double)t*2400./fe*2*M_PI)//t=[0:20]%2400Hzdans48kHz=20points/periode
s2400[t]=sin((double)t*2400./fe*2*M_PI)//c2400=exp(i*t*2400/fe*2*pi)
c1200[t]=cos((double)t*1200./fe*2*M_PI)//c1200=exp(i*t*1200/fe*2*pi)
s1200[t]=sin((double)t*1200./fe*2*M_PI)
}
rs12=(double*)malloc(sizeof(double)*(Nb)/20)//fin20=floor(length(s12)/20)*20
[...idempourrs24,rc12,rc24...]
l0=0
for(k=bk<N20k+=20)
{rs12[l0]=0.rs24[l0]=0.rc12[l0]=0.rc24[l0]=0.
for(t=0t<20t++)
{rs24[l0]+=((double)out[k+t]*s2400[t])rc24[l0]+=((double)out[k+t]*c2400[t])
rs12[l0]+=((double)out[k+t]*s1200[t])rc12[l0]+=((double)out[k+t]*c1200[t])
}
rs12[l0]=sqrt(rs12[l0]*rs12[l0]+rc12[l0]*rc12[l0])rs24[l0]=sqrt(rs24[l0]*rs24[l0]+rc24[l0]*rc24[l0])
l0++
}
Les donnes brutes sont passes dans le ltre quest la convolution, il ne reste plus maintenant qu comparer les amplitudes des signaux issus de chaque ltre pour
estimer si le bit est plus probablement un 1 ou un 0 :

l0=0//ilfautliberertouteslesallocationsdememoire(malloc)parfree...omisici
dol0++while((rs24[l0]+rs12[l0])<2*seuil)//cherchedebut
dol0++while((rs24[l0]+rs12[l0])>2*seuil)//cherchefin
fin=l0
l0=0
dol0++while(rs24[l0]<seuil)//ll=find(rs24>seuil)ll=ll(1)rs12=rs12(ll:end)rs24=rs24(ll:end)
dol0++while(rs12[l0]<rs24[l0])//l=find(rs12>rs24)l=l(1)rs12=rs12(l:end)rs24=rs24(l:end)
toutd=(char*)malloc(finl0)
tout=(char*)malloc(finl0+2)
for(k=l0k<fink++)//pos12=find(rs12>rs24)pos24=find(rs24>rs12)toutd(pos12)=0toutd(pos24)=1
if(rs24[k]>rs12[k])toutd[kl0]=1elsetoutd[kl0]=0

et ayant un ux de donnes binaires contenu dans toutd, nous achevons le dcodage en inversant ltat courant des bits selon les valeurs de toutd et achons dans
un premier temps les valeurs hexadcimales des octets dcods - une trame ACARS devant commencer par 2B2A161601 - puis la squence des caractres
achables en les interprtant par leur code ASCII.

n=0tout[n]=1n++tout[n]=1n++//lesdeuxpremiers1sontoublie'scaronsesyncsur1200
for(k=0k<finl0k++){if(toutd[k]==0)tout[n]=1tout[n1]elsetout[n]=tout[n1]
n=n+1
}
for(k=0k<finl0k+=8)
printf("%02x",tout[k]+tout[k+1]*2+tout[k+2]*4+tout[k+3]*8+tout[k+4]*16+tout[k+5]*32+tout[k+6]*64)
printf("\n")
for(k=0k<finl0k+=8)
printf("%c",tout[k]+tout[k+1]*2+tout[k+2]*4+tout[k+3]*8+tout[k+4]*16+tout[k+5]*32+tout[k+6]*64)
}//checksomme=1mod(sum(binaire(:,1:7)')',2)%verification

Nous avons omis le calcul du bit de parit qui ne nous aide de toute faon pas retrouver la valeur initiale de loctet corrompu lors de la transmission, les codes
correcteurs permettant ce genre de manipulation tant bien plus complexes quun simple bit en n de chaque octet.

Ayant valid que le code en C fournit des rsultats cohrents avec le script GNU/Octave observ initialement, nous incluons ce programme dans lenvironnement C++
impos par gnuradiocompanion tel que vu auparavant. La FFT ncessitant un nombre minimum de donnes traiter, nous avons fait le choix de, plutt que
concatner juste le morceau nal de donnes qui na pu tre dcod tel que nous lavions vu pour la radiomodem XE1203, accumuler autant de points que le nombre
maximum de caractres que peut contenir un message ACARS, savoir 258 caractres. Le dcodage des 13 squences adjacentes doscillations 2400 Hz se fait en
continu sur le ux de donnes acquis (avec ici la contrainte dun nombre minimum de 20 points/priode13 priodes=260 points), et lorsquune condition de seuil est
atteinte (signiant un dbut de trame), nous accumulons 40 points/bit8 bit/caractre258 caractres, soit environ 83000 points. Lalgorithme de dcodage que nous
avons implment en C sapplique alors ces 83000 points comme sils avaient t lus dans un chier (Fig. 15). Nous avons cependant observ une trs grande
sensibilit du dcodage aux valeurs de seuils slectionns, un point peu satisfaisant qui mrite tre amlior par lutilisation de contrles de gains automatiques. Le
message dcod dire lgrement de ce qui est obtenu avec le programme en C ci-dessus et contient :

+*2.HBJZTH2M10DDS39AZ0GN47307E0060672854M380240049GN47317E0060012986M410240050G
N47333E005JLGLOHLrTLMMLFOJN8____1KHLJ2EPOJKHIL.50145524@O%0G____1K0381E00JKNGLML[2KHZ=C+05O8
N4H+AJ9OO53&4LC12MT&2""80:*8_N$4DK7E@_Z31J@

mis par un Airbus A319 (HB-JZT) de EasyJet suisse (cohrent pour une coute eectue Besanon) et semble contenir des transmission de coordonnes (47,307 N,
6.607 E correspond bien au Nord-Est de la Franche-Comt) dont nous ne connaissons pas la signication. La n du message est probablement corrompue.

Figure 15 : Dcodage par un bloc gnuradio-companion implmentant les


algorithmes de dcodage dcrits dans le texte dune trame ACARS
enregistre dans un chier audio chantillonn 48 kchantillons/s.
Remplacer le chier audio par la sortie du bloc osmosdr pour un
traitement en temps rel (blocs en gris fonc) des donnes permet de
bien identier le dbut de transmission, mais le dcodage du message
choue souvent, probablement du fait dun mauvais ajustement des
seuils.

Un exemple de dcodage en temps rel du ux de donnes transmis par le bloc dcrit dans ce paragraphe est (tout dabord la valeur des octets reus, puis leur
interprtation dans le code ASCII pour les caractres achables) :

63705c72277d04095c4243267e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
2b2a161601472e45492d44544e154831350244353343415a3032343323444642332c33
392c3035392c30343539392c303133362f563130322c31322c3232322c3239322c3033
2c30312c30303030302f563230322c30382c3038312c3036392c30302c30302c303030
30302f563330322c30362c3134362c3331322c303632322f563431302c30362c323233
2c3032352c303632312f563530302c30302c3030302c3030302c303030302f56363030
2c30302c3030302c3030302c303030302f56373034312c3038372c30303036312c3232
3232323232323232324731312f56383034312c3038362c303030383117243e7f
cp\r'}\BC&~+*G.EIDTNH15D53CAZ0243#DFB3,39,059,04599,0136/V102,12,222,292,03,01,00000/V202,08,081,069,00,
00,00000/V302,06,146,312,0622/V410,06,223,025,0621/V500,00,000,000,0000/V600,00,000,000,0000/V7041,087,00
061,22222222222G11/V8041,086,00081$>

Nous constatons que la squence acquise est trop longue avant le prambule de 0x2b 0x2a 0x16 0x16, avec la squence des 0x7f qui correspond aux octets 2400 Hz
pour la synchronisation du rcepteur avec lmetteur. Nanmoins, le dcodage seectue bien, avec lidentication dune trame mise par EI-DTN, un A320 de
Alitalia qui cette fois volait au cours du trajet AZ0243 entre Londres et Milan (cohrent avec une rception depuis Paris vers 21h15 alors que cet avion est suppos
partir, en labsence de retard, de Londres 19h50 pour arriver Milan vers 21h45). Ici encore, le contenu du message semble cohrent mais incomprhensible.

Ainsi, sans tre parfaite, notre implmentation du dcodage en temps rel des trames ACARS sous gnuradiocompanion permet dobtenir lidentication de la
majorit des avions passant proximit du rcepteur, et dans certains cas des messages aussi longs que :

+*R.OOSNBH19C00ASN07LR#CFBFLR/FR12081915430036110006PRESSREGV4001HA1ORSOL10HA1
ORSENSELINE/IDBMC1!

Nous ne savons pas ce que appuyer sur le bouton REG-V eectue (apparemment une histoire de valve de rgulation de la pression de la cabine), mais cela semble
important pour que le pilote en informe le sol, et est un message rcurent que nous retrouvons dans diverses archives de messages ACARS sur le Web ! Ces rsultats
ne semblent pas signicativement plus mauvais que les dcodeurs exploitant lacquisition par carte son de la sortie dun scanner radiofrquence que nous avons test

(le maintenant dfunt KRACARS23 notamment, pour DOS).

Les perspectives damliorations du rcepteur de mode numrique ACARS tiennent probablement en une dtection automatique dun paramtre de seuil qui nous sert
identier le premier bit du premier octet, dont toute la suite du message dcoule. Ce seuil est actuellement dni de faon statique, une faon peu apte sadapter
aux vastes gammes de conditions de rception radiofrquence rencontres en pratique. Par ailleurs, la dcoupe des trames (identiant de lavion, identiant du vol,
texte transmis) est actuellement embryonnaire et na que pour vocation de faciliter la prise en main du logiciel de dcodage par lutilisateur nophyte qui pourrait
tre rebut par la lecture des squences brutes doctets. Toujours suivant les prconisations de http://www.scancat.com/Code-30_html_Source/acars.html
(http://www.scancat.com/Code-30_html_Source/acars.html), aprs avoir valid les 5 octets de synchronisation et den-tte (SOH, ASCII 0x01) en dbut de trame,
nous extrayons lidentiant de lavion (octets 6 12), lidentiant de dbut de texte (STX, code ASCII 0x03) avant de rechercher lidentiant du vol (octets 22 27),
qui sont les informations les plus utiles. Ensuite, dans le meilleur des cas, si le message est dcodable, les caractres ASCII achables au-del du 28me octet sont
fournis.

Ainsi, le message brut :

2b2a161601322e2e48424a4b4c15313730024d333341475330383731504f41303147533038
37312f32373237313933344c534747454e5a562f4e34372031372e312f4520203620312e35
202f3236322f2034332f3330322f2d2033392f4155544f52502f313503436a7f
+*2..HBJKL170M33AGS0871POA01GS0871/27271934LSGGENZV/N4717.1/E61.5/262/43/302/39/AUTORP/15Cj

se traduit en :

Aircraft=..HBJKL
STX
Seq.No=4d333341M33A
Flight=GS0871
POA01GS0871/27271934LSGGENZV/N4717.1/E61.5/262/43/302/39/AUTORP/15ETX

soit un Falcon 2000 rpertori par les autorits suisses24 comme bas Genve, entendu vers 21h45 depuis Besanon, avec lidentiant de vol GS0871, de nouveau
fournissant des coordonnes GPS en accord avec la localisation du rcepteur. Le lecteur possdant entre 15 et 20 millions de dollars pourra considrer de sacheter ce
jouet doccasion. Dun autre ct, un tel investissement permet de raliser une matrice de 1000*1000 rcepteurs EZCAP et ainsi de former un rcepteur RADAR
balayage de faisceau (http://www.haarp.alaska.edu/ (http://www.haarp.alaska.edu/)), autrement plus intressant quune bote de conserve volante.

Par ailleurs, on notera une certaine cohrence dans la squence des messages :

MonAug2722:03:312012
Aircraft=.PHXRX
STX
Seq.No=53353241S52A
Flight=HV5078
ETX
MonAug2722:04:302012
Aircraft=.PHXRX
STX
Seq.No=53353341S53A
Flight=HV5078
ETX
MonAug2722:09:002012
Aircraft=.PHXRX
STX
Seq.No=53353541S55A
Flight=HV5OHG
...

indiquant que cette information (S52A, S53A, S55A) est convenablement dcode.

Si le lecteur, en lisant ce code et en le mettant en uvre, laisse tourner son PC la nuit dans lespoir de recevoir le message dun avion excessivement en retard, ou se
rveille le matin en sursaut pour savoir combien de passages daronefs il a enregistr - le mal est fait, le virus de la rception de signaux radiofrquences a infect
une nouvelle cible, le seul remde est de... lire le code pour lamliorer et augmenter ses performances de dcodage.

5.3 PASSAGE DE PARAMTRES LINSTANCIATION


Le dernier point qui peut faciliter la vie du dveloppeur est de pouvoir changer, en remplissant le champ correspondant dans le bloc gnuradiocompanion, des
paramtres des blocs utiliss dans lapplication, sans tre oblig de recompiler la bibliothque correspondante. Nous constatons que de nombreux blocs acceptent des
arguments (valeurs numriques, chanes de caractres) et nous dsirons exploiter cette possibilit. Tout commence par la dnition des arguments et lajout des
prototypes associs dans linterface graphique (rpertoire grc), i.e. le chier XML descriptif du bloc. Les balises dnissant un passage de variable sont <param>...
</param> qui prennent comme champs le nom de la variable associe <key> et la nature de cette variable, par exemple un ottant <type>real</type>. Cette
dclaration de variable doit imprativement se situer avant le paramtre <sink> sous peine dobtenir un message derreur (cryptique) au chargement du bloc. Il reste
dans le chier XML passer la variable au programme C++ en compltant la mthode <make> par le paramtre, dans notre cas acars.decodeur($seuil) (avec seuil
le nom de la variable tel que dnit dans key).

Du point de vue de la dclaration de la classe (rpertoire include), la signature de la fonction dentre ainsi que celle du constructeur de la classe doivent tre
adaptes pour contenir largument acars_make_decodeur(floatseuil1) dans toutes ses occurrences. Finalement, le constructeur, au niveau de
limplmentation de la classe C++ elle-mme (rpertoire lib), reoit largument sous forme de acars_decodeur::acars_decodeur(floatseuil1). Dans notre
cas, une consigne de seuillage est ainsi transfre depuis linterface graphique de gnuradiocompanion vers la classe C++ sans ncessiter de recompilation de la
bibliothque (bloc).

Un exemple simple de passage dun unique paramtre est facilement accessible dans larchive de gnuradio sous gnuradio/gr
digital/*/digital_diff_decoder_bb.* : la recherche de loccurrence du terme modulus permet de se retrouver dans le cheminement de la variable entre les
divers chiers dnissant le bloc, et de sen inspirer pour notre propre application (Fig. 16).

Figure 16 : Le bloc complt par le passage de deux arguments que sont


une valeur de seuil (ottant) et le nom de chier denregistrement des
donnes acquises (chane de caractres). Nous constatons dans lxterm
que les donnes sont bien stockes dans lemplacement annonc, et les
valeurs sont cohrentes avec celles aches par gnuradio-companion.

5.4 PASSAGE DYNAMIQUE DE PARAMTRES


Le passage de paramtres selon la mthode propose ci-dessus dnit la valeur de largument (seuil) au moment du lancement de lapplication gnuradio
companion par passage de paramtres au constructeur de la classe associe au bloc. Une fois ce paramtre fourni, il est impossible de le modier depuis lapplication
en cours dexcution. Cependant, de nombreux blocs permettent de faire varier des variables depuis des composants graphiques reprsentant des ascenceurs (sliders)
: comment font-ils ?

Un argument additionnel la dclaration du bloc dans le chier XML permet de dnir une mthode pour mettre jour une variable membre lorsque le paramtre qui
lui est associ dans linterface graphique change de valeur : dans le chier contenu dans le rpertoire grc, nous compltons la dnition du bloc par le nom de la
mthode appele pour la mise jour du paramtre (argument callback)

<make>acars.decodeur($seuil,$filename)</make>
<callback>set_seuil($seuil)</callback>
<param>
<name>Threshold</name>
<key>seuil</key>
<type>real</type>
</param>

dont la signature associe est dclare dans le chier de dnition de linterface de la classe (rpertoire include) :

public:
~acars_decodeur()
voidset_seuil(floatseuil1)

et nalement, dans la bibliothque, nous implmentons la mthode (setter) qui modie le contenu de la variable membre (prive) :

voidacars_decodeur::set_seuil(floatseuil1)
{printf("newthreshold:%f\n",seuil1)fflush(stdout)_seuil=seuil1}
Figure 17 : Le bloc de dcodage des trames ACARS accepte dsormais la
dnition du paramtre seuil au moyen dun ascenceur (bloc slider) avec
modication de la valeur en cours dexcution. Dans cet exemple, nous
constatons quun ascenceur associ la variable threshold a t dni avec
une valeur par dfaut de 150 (tel qu'annonc dans le terminal en bas de
gnuradio-companion), et changer la valeur dans longlet associ de
linterface graphique change bien la valeur du paramtre exploit lors du
dcodage des trames.

Ainsi, nous vrierons que chaque fois que la valeur du paramtre seuil est modie en faisant glisser un ascenceur dans linterface graphique, la valeur est bien
modie dans le bloc de traitement de linformation correspondant (Fig. 17).

Figure 18 : Exemple de trames


ACARS acquises au moyen
dun rcepteur EZCAP muni
dune antenne forme dun
bout de l de cuivre maill de
=~50 cm de longueur. Cette
activit rend les heures
dattente dans les aroports
beaucoup plus ludiques, ici
Athnes (Grce).

Larchive nale de ce dveloppement (Fig. 18 et 19), incluant tous les concepts dvelopps dans cet article, est disponible http://jmfriedt.free.fr/gr-acars.tar.gz
(http://jmfriedt.free.fr/gr-acars.tar.gz) ou sur le site de CGRAN www.cgran.org/wiki/ACARS (www.cgran.org/wiki/ACARS).

Figure 19 : Analyse des trames ACARS obtenues en temps rel par notre module gr-acars : le site
web radarvirtuel.com/index-fr.html valide la prsence, proximit de Besanon (position de
lantenne rceptrice), dun avion de Transavia, tandis que le site airliners.net associe une
immatriculation davion (PH-RXA) un exploitant. Les informations acquises par ACARS sont
donc cohrentes avec les autres donnes disponibles sur les sites web associs au suivi du trac
arien, et fournissent un complment idal au dcodeur ADS-B prsent au dbut de ce
document.

CONCLUSION
Nous nous sommes eorcs de proposer une dmarche de travail pour exploiter un rcepteur radiofrquence fournissant un ux de donnes I et Q en vue de dcoder
des trames numriques. Nous nous sommes en particulier concentrs sur les priphriques faible cot centrs sur le composant E4000 coupl au convertisseur
analogique-numrique RTL2832U.

Au-del de la simple utilisation des blocs de traitement de signaux fournis avec loutil gnuradio, nous avons identi le cheminement du ux de donnes an de
dvelopper nos propres blocs de traitement. Nous avons dmontr la capacit implmenter des traitements en temps rel sur le ux dinformations issu du
rcepteur en prototypant dans un premier temps sous GNU/Octave sur des enregistrements, avant de convertir lalgorithme en C pour inclusion dans gnuradio.

Parmi les perspectives, lexploitation sur des signaux plus intressants que sont le GPS25 ou le GSM serait ambitieuse, mais certainement source de nombreuses
dcouvertes.
Sans relation directe avec cette prsentation, un collgue dun des auteurs (JMF) nous faisait remarquer rcemment comment lpoque de Capitaine Crunch et de la
naissance dApple devait tre une poque bnie du hack. Nous protons de ces pages pour exprimer notre dsaccord avec cette nostalgie : la disponibilit de
puissances de calcul quasi-innies, pour un cot abordable pour une majorit de la population dEurope occidentale et dAmrique du Nord, un mode de
communication rapide et sans censure pour les domaines et les rgions qui nous concernent, et des documentations ou chantillons de composants lectroniques
facilement disponibles, font de lpoque actuelle une priode au moins aussi excitante pour le hack que lpoque des blue box et autres activits de phreaking [14],
comme nous avons tent de le dmontrer dans cet expos. La lgende du dtournement dun siet pour communiquer avec les routeurs tlphoniques est certes
attractive, mais il ny a aucun doute que cette dcouverte fortuite tait prcde dheures danalyses des protocoles de communication et dtudes fastidieuses des
conventions de communication des rseaux tlphoniques dantan (John Draper ntait-il pas ingnieur en dehors de ses activits de comprhension des systmes
tlphoniques) : un bon hack est impossible sans une comprhension dtaille de la technologie sous-jacente. Nous osons copier ici les paroles reproduites du site de
Wikipdia26, sans en vrier lorigine, pour leur sagesse27 :

I dont do that. I dont do that anymore at all. And if I do it, I do it for one reason and one reason only. Im learning about a system. The phone company is a System.
A computer is a System, do you understand? If I do what I do, it is only to explore a system. Computers, systems, thats my bag. The phone company is nothing but a
computer.

REMERCIEMENTS
D. Bodor nous a informs de lexistence des rcepteurs DVB base de E4000+RTL2832U et de lengouement quils ont suscit dans la communaut des dveloppeurs
de SDR. Les interlocuteurs de la mailing list osmocomsdr ont lev un certain nombre dincertitudes sur les donnes techniques des rcepteurs radiofrquences base
de RTL2832U et E4000. Le gouvernement quatorien mrite toute notre gratitude, ne serait-ce que pour son hbergement de http://gen.lib.rus.ec/
(http://gen.lib.rus.ec/), o nous obtenons la majorit des documents de la bibliographie, et autres actions politiques qui dpassent le cadre de cet article. J. Boibessot
(Armadeus Systems) et E. Carry (FEMTO-ST) ont, par leurs corrections lors dune relecture, amlior le manuscrit.

RFRENCES
[1] K. Borre, D.M. Akos, N. Bertelsen, P. Rinder & S.H. Jensen, A Software-Dened GPS and Galileo Receiver: A Single-Frequency Approach, Birkhuser Boston (2007)
ainsi que les transparents http://kom.aau.dk/project/softgps/ et en particulier http://kom.aau.dk/project/softgps/GNSS_SummerSchool_DGC.pdf
(http://kom.aau.dk/project/softgps/ et en particulier http://kom.aau.dk/project/softgps/GNSS_SummerSchool_DGC.pdf)

[2] J. Hamkins & M.K. Simon, Autonomous Software-Dened Radio Receivers for Deep Space Applications, Deep Space Communications and Navigation Series Vol. 9,
disponible http://descanso.jpl.nasa.gov/Monograph/series9/Descanso9_Full_rev2.pdf (http://descanso.jpl.nasa.gov/Monograph/series9/Descanso9_Full_rev2.pdf)

[3] P.B. Kenington RF and baseband techniques for software dened radio Artech House (2005)

[4] La littrature sur SDR pullule douvrages plus ou moins intressants. Parmi ceux que nous avons trouv de peu dintrt car loin de la pratique, W. Tuttlebee,
software dened radio - enabling technologies Wiley (2002), ou encore M. Dillinger, K. Madani, N. Alonistioti, Software Dened Radio - Architectures, Systems and
Functions Wiley (2003), que le lecteur pourra viter sans craindre de rater trop dinformations.

[5] J.-M Friedt & S. Guinot, La rception dimages mtorologiques issues de satellites : principes de base, GNU/Linux Magazine France, Hors-Srie 24 (Fvrier
2006), disponible http://jmfriedt.free.fr/LM_sat1.pdf (http://jmfriedt.free.fr/LM_sat1.pdf)

[6] Note dapplication AN2668, Improving STM32F101xx and STM32F103xx ADC resolution by oversampling, ST Microelectronics, 2008

[7] D.J. Mudgway, Uplink-Downlink - A History of the Deep Space Network, 1957-1997, NASA SP-2001-4227, The NASA History Series (2001), disponible partir de
history.nasa.gov/SP-4227/Uplink-Downlink.pdf (history.nasa.gov/SP-4227/Uplink-Downlink.pdf)

[8] M.K. Simon, Bandwidth-Ecient Digital Modulation with Application to Deep-Space Communications, Deep Space Communications and Navigation Series Vol. 3,
disponible http://descanso.jpl.nasa.gov/Monograph/series3/complete1.pdf (http://descanso.jpl.nasa.gov/Monograph/series3/complete1.pdf)

[9] T.G. Thomas & S. Chandra Sekhar, Communication Theory, Tata Mcgraw Hill Publishing (2006)

[10] N. Foster, Tracking Aircraft With GNU Radio, GNU Radio Conference (2011), disponible http://gnuradio.org/redmine/attachments/download/246/06-foster-
adsb.pdf (http://gnuradio.org/redmine/attachments/download/246/06-foster-adsb.pdf)

[11] T. McDermott, Wireless Digital Communications: Design and Theory 2nd Ed., Tucson Amateur Packet Radio Corporation - TAPR (1998)

[12] Agilent, Digital Modulation in Communications Systems - An Introduction, Application Note 1298 disponible cp.literature.agilent.com/litweb/pdf/5965-
7160E.pdf, ou M. Steer, Microwave and RF design - a systems approach, SciTech Publishing, Inc (2010) dont le premier chapitre est disponible
http://www.ece.ucsb.edu/yuegroup/Teaching/ECE594BB/Lectures/steer_rf_chapter1.pdf
(http://www.ece.ucsb.edu/yuegroup/Teaching/ECE594BB/Lectures/steer_rf_chapter1.pdf)

[13] J.-M Friedt, Auto et intercorrlation, recherche de ressemblance dans les signaux : application lidentication dimages outes, GNU/Linux Magazine France
139 (Juin 2011), disponible http://jmfriedt.free.fr/ (http://jmfriedt.free.fr/)

[14] S. Wozniak & G. Smith, iWoz: Computer Geek to Cult Icon: How I Invented the Personal Computer, Co-Founded Apple, and Had Fun Doing It, W. W. Norton &
Company (2007)

1
http://www.baycom.org/~tom/ham/linux/multimon.html (http://www.baycom.org/~tom/ham/linux/multimon.html) dcode un certain nombre de modes
numriques partir des signaux sonores issus dun rcepteur radio et numriss par carte son

2
gnuradio.org (gnuradio.org)

3
http://www.joshknows.com/grc (http://www.joshknows.com/grc)

4
http://www.ettus.com/ (http://www.ettus.com/)

5
nous avions dj expos dans ces pages le principe du mlangeur qui transpose une frquence incidente f et une frquence de rfrence f0 pour gnrer f+/- f, la
composante somme des frquences tant limine par un ltre passe-bas.

6
http://tetra.osmocom.org/trac/wiki/Funcube_Dongle (http://tetra.osmocom.org/trac/wiki/Funcube_Dongle) et http://www.funcubedongle.com/
(http://www.funcubedongle.com/)
7
sdr.osmocom.org (sdr.osmocom.org)

8
https://har2009.org/program/speakers/253.en.html (https://har2009.org/program/speakers/253.en.html)

9
http://en.wikipedia.org/wiki/Softmodem (http://en.wikipedia.org/wiki/Softmodem)

10
https://cgran.org/wiki/RDS (https://cgran.org/wiki/RDS) : noter que, apparemment, pour un dysfonctionnement de loption -fvartrackingassignement des
versions rcentes de GCC, nous avons t obligs de dsactiver les options gO2 de la compilation (i.e. rester en O0), faute de quoi la compilation choue aprs
avoir occup toute la mmoire disponible.

11
http://rof.li/pic/groundplane/ (http://rof.li/pic/groundplane/)

12
http://www.oz9aec.net/index.php/gnu-radio/gnu-radio-blog/477-noaa-apt-reception-with-gqrx-and-rtlsdr (http://www.oz9aec.net/index.php/gnu-radio/gnu-
radio-blog/477-noaa-apt-reception-with-gqrx-and-rtlsdr)

13
https://cgran.org (https://cgran.org)

14
http://gnuradio.org/redmine/projects/gnuradio/wiki/OutOfTreeModules (http://gnuradio.org/redmine/projects/gnuradio/wiki/OutOfTreeModules)

15
http://www.semtech.com/apps/ledown/down.php?le=xe1203f.pdf (http://www.semtech.com/apps/ledown/down.php?le=xe1203f.pdf)

16
http://wiki.ham./AFSK.en (http://wiki.ham./AFSK.en)

17
leonardodaga.insyde.it/Corsi/AD/Documenti/ARINCTutorial.pdf (leonardodaga.insyde.it/Corsi/AD/Documenti/ARINCTutorial.pdf)

18
www.planespotters.net (www.planespotters.net)

19
http://www.scancat.com/Code-30_html_Source/acars.html (http://www.scancat.com/Code-30_html_Source/acars.html) pour le contenu des trames et en
particulier de len-tte.

20
http://gnuradio.org/redmine/projects/gnuradio/wiki/BlocksCodingGuide (http://gnuradio.org/redmine/projects/gnuradio/wiki/BlocksCodingGuide)

21
git://github.com/mbant/gr-modtool.git (git://github.com/mbant/gr-modtool.git)

22
http://en.wikipedia.org/wiki/Asynchronous_serial_communication (http://en.wikipedia.org/wiki/Asynchronous_serial_communication)

23
http://www.qsl.net/g4hbt/zips/krcrs12.zip (http://www.qsl.net/g4hbt/zips/krcrs12.zip)

24
http://www.bazl.admin.ch/fachleute/luftfahrzeugregister/index.html?lang=en (http://www.bazl.admin.ch/fachleute/luftfahrzeugregister/index.html?lang=en)

25
http://michelebavaro.blogspot.fr/2012/04/spring-news-in-gnss-and-sdr-domain.html (http://michelebavaro.blogspot.fr/2012/04/spring-news-in-gnss-and-
sdr-domain.html) mais surtout http://www.gnss-sdr.org/documentation/gnss-sdr-operation-realtek-rtl2832u-usb-dongle-dvb-t-receiver (http://www.gnss-
sdr.org/documentation/gnss-sdr-operation-realtek-rtl2832u-usb-dongle-dvb-t-receiver) dmontrent le rsultat impressionnant dutiliser un rcepteur de
tlvision numrique terrestre pour recevoir des signaux issus de satellites situs une distance de 20000 km.

26
http://en.wikipedia.org/wiki/John_Draper (http://en.wikipedia.org/wiki/John_Draper)

27
http://www.slate.com/articles/technology/the_spectator/2011/10/the_article_that_inspired_steve_jobs_secrets_of_the_little_blue_.single.html
(http://www.slate.com/articles/technology/the_spectator/2011/10/the_article_that_inspired_steve_jobs_secrets_of_the_little_blue_.single.html) (lu en
septembre 2012).

Tags:cache(/content/search/?filter[]=attr_tags_lk:"cache"&activeFacets[attr_tags_lk:Tags]=cache),diff(/content/search/?filter[]=attr_tags_lk:"diff"&activeFacets[attr_tags_lk:Tags]=diff),html
(/content/search/?filter[]=attr_tags_lk:"html"&activeFacets[attr_tags_lk:Tags]=html),https(/content/search/?filter[]=attr_tags_lk:"https"&activeFacets[attr_tags_lk:Tags]=https),mate(/content/search/?
filter[]=attr_tags_lk:"mate"&activeFacets[attr_tags_lk:Tags]=mate),php(/content/search/?filter[]=attr_tags_lk:"php"&activeFacets[attr_tags_lk:Tags]=php),python(/content/search/?
filter[]=attr_tags_lk:"python"&activeFacets[attr_tags_lk:Tags]=python),typage(/content/search/?filter[]=attr_tags_lk:"typage"&activeFacets[attr_tags_lk:Tags]=typage),windows(/content/search/?
filter[]=attr_tags_lk:"windows"&activeFacets[attr_tags_lk:Tags]=windows)

0 Jaime Partager 7 Tweeter

SOMMAIRE
1. Introduction la radio dnie par logiciel (SDR)

2. Prsentation du matriel
2.1 Installation des outils gnuradio

2.2 Utilisation en oscilloscope du RTL2832U

3. Premiers pas : utilisation avec gnuradio-companion


3.1 La bande FM commerciale

3.2 ADS-B

3.3 Satellites

4. Dcodage dun mode numrique


4.1 Les modes de modulation et traitement numrique du signal

4.2 Cas de la FSK du Semtech XE1203F

4.3 Cas de lAFSK

4.4 Cas de lAM et le protocole ACARS

5. Du prototypage lexploitation sous gnuradio


5.1 Cas du radiomodem XE1203F

5.2 Cas de lACARS - attention, paragraphe addictif

5.3 Passage de paramtres linstanciation

5.4 Passage dynamique de paramtres

Conclusion

Remerciements

Rfrences

PAR LE MME AUTEUR


INTERFACES MATRIELLES ET OS LIBRES POUR NINTENDO DS: DSLINUX ET RTEMS (/GNU-LINUX-MAGAZINE/GLMFHS-043/INTERFACES-MATERIELLES-ET-OS-
LIBRES-POUR-NINTENDO-DS-DSLINUX-ET-RTEMS)
GNU/LinuxMagazineHSn043|aot2009|JeanMichelFriedt(/auteur/view/9298friedt_jean_michel)GwenhalGOAVECMEROU(/auteur/view/9649goavec_merou_gwenhael)
Administrationrseau (/content/search/?filter[]=attr_category_lk:"administrationrseau"&activeFacets[attr_category_lk:Domaines]=administrationrseau) Administrationsystme (/content/search/?
filter[]=attr_category_lk:"administrationsystme"&activeFacets[attr_category_lk:Domaines]=administrationsystme) Audiovido (/content/search/?filter[]=attr_category_lk:"audio
vido"&activeFacets[attr_category_lk:Domaines]=audiovido) Bureautique (/content/search/?filter[]=attr_category_lk:"bureautique"&activeFacets[attr_category_lk:Domaines]=bureautique) Embarqu
(/content/search/?filter[]=attr_category_lk:"embarqu"&activeFacets[attr_category_lk:Domaines]=embarqu) Programmation (/content/search/?
filter[]=attr_category_lk:"programmation"&activeFacets[attr_category_lk:Domaines]=programmation) Utilitaires (/content/search/?
filter[]=attr_category_lk:"utilitaires"&activeFacets[attr_category_lk:Domaines]=utilitaires) Web (/content/search/?filter[]=attr_category_lk:"web"&activeFacets[attr_category_lk:Domaines]=web)

DVELOPPEMENT POUR IPOD TOUCH SOUS GNU/LINUX: APPLICATION LA COMMUNICATION PAR LIAISON BLUETOOTH (/GNU-LINUX-MAGAZINE/GLMFHS-
051/DEVELOPPEMENT-POUR-IPOD-TOUCH-SOUS-GNU-LINUX-APPLICATION-A-LA-COMMUNICATION-PAR-LIAISON-BLUETOOTH)
GNU/LinuxMagazineHSn051|dcembre2010|GwenhalGOAVECMEROU(/auteur/view/9649goavec_merou_gwenhael)JeanMichelFriedt(/auteur/view/9298friedt_jean_michel)
Administrationrseau (/content/search/?filter[]=attr_category_lk:"administrationrseau"&activeFacets[attr_category_lk:Domaines]=administrationrseau) Administrationsystme (/content/search/?
filter[]=attr_category_lk:"administrationsystme"&activeFacets[attr_category_lk:Domaines]=administrationsystme) Distribution (/content/search/?
filter[]=attr_category_lk:"distribution"&activeFacets[attr_category_lk:Domaines]=distribution) Embarqu (/content/search/?filter[]=attr_category_lk:"embarqu"&activeFacets[attr_category_lk:Domaines]=embarqu)
Environnementdebureau (/content/search/?filter[]=attr_category_lk:"environnementdebureau"&activeFacets[attr_category_lk:Domaines]=environnementdebureau) Programmation (/content/search/?
filter[]=attr_category_lk:"programmation"&activeFacets[attr_category_lk:Domaines]=programmation) Scurit (/content/search/?filter[]=attr_category_lk:"scurit"&activeFacets[attr_category_lk:Domaines]=scurit)
Utilitaires (/content/search/?filter[]=attr_category_lk:"utilitaires"&activeFacets[attr_category_lk:Domaines]=utilitaires) Web (/content/search/?
filter[]=attr_category_lk:"web"&activeFacets[attr_category_lk:Domaines]=web)

TUDE D'UN SYSTME D'EXPLOITATION POUR MICROCONTRLEUR FAIBLE CONSOMMATION (TI MSP430): PILOTE POUR LE STOCKAGE DE MASSE AU FORMAT
FAT SUR CART... (/GNU-LINUX-MAGAZINE/GLMFHS-047/ETUDE-D-UN-SYSTEME-D-EXPLOITATION-POUR-MICROCONTROLEUR-FAIBLE-CONSOMMATION-TI-MSP430-
PILOTE-POUR-LE-STOCKAGE-DE-MASSE-AU-FORMAT-FAT-SUR-CART)
GNU/LinuxMagazineHSn047|avril2010|GwenhalGOAVECMEROU(/auteur/view/9649goavec_merou_gwenhael)JeanMichelFriedt(/auteur/view/9298friedt_jean_michel)
Administrationrseau (/content/search/?filter[]=attr_category_lk:"administrationrseau"&activeFacets[attr_category_lk:Domaines]=administrationrseau) Administrationsystme (/content/search/?
filter[]=attr_category_lk:"administrationsystme"&activeFacets[attr_category_lk:Domaines]=administrationsystme) Audiovido (/content/search/?filter[]=attr_category_lk:"audio
vido"&activeFacets[attr_category_lk:Domaines]=audiovido) Embarqu (/content/search/?filter[]=attr_category_lk:"embarqu"&activeFacets[attr_category_lk:Domaines]=embarqu) Programmation
(/content/search/?filter[]=attr_category_lk:"programmation"&activeFacets[attr_category_lk:Domaines]=programmation) Utilitaires (/content/search/?
filter[]=attr_category_lk:"utilitaires"&activeFacets[attr_category_lk:Domaines]=utilitaires) Web (/content/search/?filter[]=attr_category_lk:"web"&activeFacets[attr_category_lk:Domaines]=web)

D'AUTRES ARTICLES PEUVENT VOUS INTRESSER


Dcompressez un flux de donnes 3R avec un circuit crit en VHDL (/Open-Silicium/OS-018/Decompressez-un-flux-de-donnees-3R-avec-un-circuit-ecrit-en-
VHDL)
OpenSiliciumn18|avril2016|YannGuidon(/auteur/view/9094guidon_yann)
Embarqu (/content/search/?filter[]=attr_category_lk:"embarqu"&activeFacets[attr_category_lk:Domaines]=embarqu) Programmation (/content/search/?
filter[]=attr_category_lk:"programmation"&activeFacets[attr_category_lk:Domaines]=programmation) Web (/content/search/?filter[]=attr_category_lk:"web"&activeFacets[attr_category_lk:Domaines]=web)

Aprs avoir linaris l'algorithme de dcompression 3R (Recursive Range Reduction) [1] et expliqu les paradigmes de programmation et le style...

Lire l'extrait (/Open-Silicium/OS-018/Decompressez-un-flux-de-donnees-3R-avec-un-circuit-ecrit-en-VHDL)

RIOT, le systme d'exploitation libre pour l'Internet des objets (/Open-Silicium/OS-018/RIOT-le-systeme-d-exploitation-libre-pour-l-Internet-des-objets)


OpenSiliciumn18|avril2016|AlexandreAbadie(/auteur/view/66918abadie_alexandre)FranciscoAcostaPadilla(/auteur/view/66921acosta_padilla_francisco)CdricAdjih(/auteur/view/66919adjih_cedric)
EmmanuelBaccelli(/auteur/view/66920baccelli_emmanuel)
Embarqu (/content/search/?filter[]=attr_category_lk:"embarqu"&activeFacets[attr_category_lk:Domaines]=embarqu) Programmation (/content/search/?
filter[]=attr_category_lk:"programmation"&activeFacets[attr_category_lk:Domaines]=programmation) Scurit (/content/search/?filter[]=attr_category_lk:"scurit"&activeFacets[attr_category_lk:Domaines]=scurit)
Utilitaires (/content/search/?filter[]=attr_category_lk:"utilitaires"&activeFacets[attr_category_lk:Domaines]=utilitaires) Web (/content/search/?
filter[]=attr_category_lk:"web"&activeFacets[attr_category_lk:Domaines]=web)

La varit des plateformes matrielles et logicielles pour l'Internet des objets (en anglais: Internet of Things, ou IoT) rend dicile le...

Article gratuit ! (/Open-Silicium/OS-018/RIOT-le-systeme-d-exploitation-libre-pour-l-Internet-des-objets)


Dbogage kernel et applicatif avec Ftrace pour systme gnraliste ou embarqu (/Open-Silicium/OS-018/Debogage-kernel-et-applicatif-avec-Ftrace-pour-
systeme-generaliste-ou-embarque)
OpenSiliciumn18|avril2016|ChristopheBlaess(/auteur/view/9057blaess_christophe)
Embarqu (/content/search/?filter[]=attr_category_lk:"embarqu"&activeFacets[attr_category_lk:Domaines]=embarqu)

Les outils et les mthodes de dbogage pour l'espace applicatif Linux sont plutt bien connus: de Valgrind Strace/Ltrace en passant par GDB...

Lire l'extrait (/Open-Silicium/OS-018/Debogage-kernel-et-applicatif-avec-Ftrace-pour-systeme-generaliste-ou-embarque)

Interview de Cdric Bail (/Open-Silicium/OS-018/Interview-de-Cedric-Bail)


OpenSiliciumn18|avril2016|PierreFicheux(/auteur/view/9084ficheux_pierre)
Web (/content/search/?filter[]=attr_category_lk:"web"&activeFacets[attr_category_lk:Domaines]=web)

Cdric Bail est senior open source developer au centre de recherche et dveloppement SAMSUNG (OSG pour Open Source Group) dans la Silicon...

Lire l'extrait (/Open-Silicium/OS-018/Interview-de-Cedric-Bail)

Mise en uvre de Xenomai sur carte FPGA Zynq ZedBoard (/Open-Silicium/OS-018/Mise-en-aeuvre-de-Xenomai-sur-carte-FPGA-Zynq-ZedBoard)


OpenSiliciumn18|avril2016|PatriceKadionik(/auteur/view/9099kadionik_patrice)
Programmation (/content/search/?filter[]=attr_category_lk:"programmation"&activeFacets[attr_category_lk:Domaines]=programmation)

Cet article prsente la mise en uvre de l'extension Temps Rel dur Xenomai sur la carte ZedBoard qui est base sur la dernire gnration...

Lire l'extrait (/Open-Silicium/OS-018/Mise-en-aeuvre-de-Xenomai-sur-carte-FPGA-Zynq-ZedBoard)

crire un pilote en Userspace pour le FPGA grce au pilote UIO (/Open-Silicium/OS-018/Ecrire-un-pilote-en-Userspace-pour-le-FPGA-grace-au-pilote-UIO)


OpenSiliciumn18|avril2016|FabienMarteau(/auteur/view/65435marteau_fabien)
Programmation (/content/search/?filter[]=attr_category_lk:"programmation"&activeFacets[attr_category_lk:Domaines]=programmation) Sciences (/content/search/?
filter[]=attr_category_lk:"sciences"&activeFacets[attr_category_lk:Domaines]=sciences)

La libration des FPGA passe bien sr d'abord par les outils permettant de gnrer la conguration du composant. Mais elle passe aussi par...

Lire l'extrait (/Open-Silicium/OS-018/Ecrire-un-pilote-en-Userspace-pour-le-FPGA-grace-au-pilote-UIO)

GNU/LINUXMAGAZINE(/GNULINUXMAGAZINE) LINUXPRATIQUE(/LINUXPRATIQUE) LINUXESSENTIEL(/LINUXESSENTIEL) MISC(/MISC)


OPENSILICIUM(/OPENSILICIUM) HACKABLE(/HACKABLE) APROPOS(/APROPOS)

INFOSLGALES(/OUTILS/INFOSLEGALES) CONTACTEZNOUS(/OUTILS/CONTACTEZNOUS)