Analyse spectrale – comparaison “FFT” et “PFB” (polyphase filter bank)

Il existe plusieurs techniques de calcul pour estimer l’occupation spectrale d’un signal radio. Les logiciels utilisent généralement la transformée de Fourrier rapide (FFT – Fast Fourier Transform) qui permet de décomposer un signal temporel en une multitude de “canaux” à bande étroite.

Les applications de radio logicielle exploitent cette méthode pour l’affichage de type “chute d’eau” (waterfall). Il existe plusieurs techniques différentes d’analyse spectrale et la FFT n’est pas toujours la meilleure, comme illustré ici.

L’exemple est construit autour d’un signal reçu sur 115.2 MHz et enregistré avec mon application de radio logicielle “gkSDR”, traité ensuite sous Matlab. Voici à quoi ressemble le signal, visualisé par FFT sur l’interface utilisateur :

gksdr_spectro

Quelques secondes de signaux sont stockées sur disque et analysées sous Matlab. Je commence par calculer le spectrogramme (correspondant à la partie inférieure ‘bleue’ de la capture d’écran). Le signal enregistré sur 20 KHz est traité avec des FFT de 256 points (on a donc une résolution de 20000/256  Hz par point, soit 78.125 Hz).

spectro_fft_mlab

Dans cette image calculée, le temps s’écoule à l’horizontal contrairement au logiciel gkSDR. On voit bien une raie très forte autour de 115.2 MHz et quelques signaux plus faibles de part et d’autre. Si l’on moyenne dans le temps ce spectrogramme, on obtient un “spectre moyen”, correspondant à l’occupation spectrale du signal sur la période enregistrée (ici 8 secondes) :

moyenne_fft_mlab

Notre signal à 115.2 MHz n’est plus “aussi propre” que sur la copie d’écran du haut. Ce n’est pas un problème de bruit du récepteur, mais un problème lié à la méthode de calcul… On aimerait bien pouvoir “regarder” le signal autour de 115.2 pour avoir une idée de la largeur de bande réelle du signal émis. Cet effet de “fuites” est en réalité inhérent à la transformée de Fourier, il peut être compensé par l’utilisation d’une “fenêtre” (Blackmann, Hamming etc – voir Wikipedia pour plus de détails). Notre FFT a une résolution de 78.125 Hz… si un signal est “entre deux”, il s’étale …

Ce site donne un exemple de l’effet de “fuite” sur un simple signal sinusoïdal :

sineWave_FFT_spectral_leakage

 

Dans le domaine temporel (à gauche) on a bien un signal “propre”, sinusoïdal, alors que le spectre obtenu par transformée de Fourier à droite ne comporte pas qu’une seule “raie” comme on s’y attendrait.

Comment faire pour retrouver un spectre “comme on voudrait” ? et bien en faisant comme dans un analyseur de spectre analogique, en faisant une batterie de filtres passe-bande très étroits suivis d’un simple détecteur d’énergie (diode ;-) ). L’algorithme employé s’appelle “filtrage polyphase” (polyphase filter bank – pfb) et permet de décomposer un signal temporel “large bande” en une série de signaux temporel “bande étroite”, comme si on avait divisé notre signal d’entrée pour alimenter une série de filtres ne se recouvrant pas et très sélectifs.

Toujours grâce à Matlab, les signaux traités précédemment sont maintenant analysés avec un filtre polyphase comportant 256 bandes de filtres pour rester dans les mêmes conditions.

polyphase

L’échelle de couleurs est un peu différente mais on reconnaît bien notre signal d’origine et les niveaux relatifs des différentes traces semblent plus en accord avec notre visualisation “temps réel chute d’eau” du début. On remarque également une petite bande bleue à gauche du graphique, elle est la conséquence des retards introduits par nos 256 filtres bande étroite. Regardons maintenant le spectre résultant, moyenné sur la totalité, comme dans l’exemple de la FFT:

moyenne_pft_mlab

L’effet de “fuites” a disparu, on voit d’ailleurs apparaître un signal faible qui était masqué dans le spectre FFT moyen…

Le filtrage polyphase est la base du traitement d’imagerie en radio astronomie, à suivre dans un prochain épisode…

Pour aller plus loin, lire Wikipedia (anglais)

 

 

gkSDR – Fréquence et localisation des aéroports et aérodromes français

En préparation de la version 0.15, j’ai intégré dans le logiciel gkSDR la liste de tous les aéroports Français (métropole) avec:

  • Les coordonnées de la station (tour de contrôle, équipement de radionavigation etc.)
  • La fréquence utilisée

Il va visiblement falloir rajouter des modalités de filtrage un peu plus élaborées que “par fréquence” … l’écran est tout simplement illisible !

gkSDR affiche les aéroports de france

Le VFO est tout aussi pollué, car plusieurs émetteurs sont alloués sur les mêmes fréquences:

BEACONS_TUNE

 

Les balises les plus proches (distance max réglable) et/ou dans l’axe de l’antenne seront affichées en priorité

gkSDR – Les prochaines étapes

La version 0.15 est en cours de validation par quelques OMs, cela devrait permettre de limiter les ennuis ‘imprévus’ avant diffusion plus globale.

Je suspendrai ensuite l’ajout de fonctions nouvelles et me consacrerai au développement des pilotes pour cartes SDR.

Les cartes SDR en chantier sont :

  • hackRF : les valeurs des gains LNA ou FI doivent être adaptés à la fréquence… sans quoi c’est relativement inutilisable. Quand il y a saturation des ADC, la carte est inutilisable.
  • TransFox : problèmes de gestion correcte des entrées/sorties audio entre la partie “radio” et la partie “restitution à l’oreille”, ça fonctionne plus ou moins mais avec des claquements audio, à finaliser
  • Lorsque l’interface audio du TransFox sera terminée, je pourrai assez rapidement attaquer la série des SoftRock
  • funCube : je dois en récupérer un … rien de fait pour le moment
  • AirSpy : pas encore en ma possession

Sont considérés comme ok à ce jour :

  • RTLSDR
  • bladeRF (l’émission avance…)
  • Perseus

 

gkSDR version 0.15 en vue – Quoi de neuf

Ces derniers jours ont été très actifs en correction de bugs divers… je remercie vivement les OMs et SWL qui m’ont consacré un peu de temps et qui ont accepté les tests successifs… sans eux… j’y serai sans doute encore.

La prochaine version est en cours de test, ci après un petit aperçu des changements prévus:

  • Fourniture au téléchargement d’une première base de données balises/tours de contrôle/etc
  • Modifications visuelles diverses et ajout de graduations sur les boutons de réglage,
  • Ajout de squelch sur les 2 récepteurs, ajout du S-metre sur les deux récepteurs,
  • Correction d’une longue longue liste de bugs divers…
  • J’espère pouvoir terminer le support du Transfox

Quelques copies d’écran

Le récepteur principal

gkSDR RXA in V0.15

 

Le récepteur secondaire, on retrouve un nouveau s-mètre :RXB

 

et surtout le module cartographique, qui maintenant permet de cliquer sur une balise ou un émetteur connu (base de données à télécharger avec la prochaine version) et de tuner automatiquement le récepteur sur la bonne fréquence

CARTO

gkSDR version 0.14 disponible au téléchargement

Je viens de mettre en ligne la version 0.14
Le téléchargement est séparé en plusieurs fichiers en fonction du SDR que vous utilisez
Le fichier de base gkSDR_0.1.4.zip fonctionne pour les clés SDR USB.
Vous le trouverez à cette adresse:
Ensuite,
- si vous avez un récepteur Perseus, il faudra télécharger le fichier http://sdr.f4gkr.org/download/PerseusSDR_0.1.4.zip et mettre son contenu ( gkSDR_Perseus.dll ) dans le répertoire où est installé le logiciel.
- si vous avez un récepteur BladeRF, il faudra télécharger le fichier http://sdr.f4gkr.org/download/bladeRF_0.1.4.zip et extraire le contenu dans le répertoire où est le logiciel.
gkSDR v014
La procédure d’installation et le manuel utilisateur restent à écrire…
73 et bons tests