0% ont trouvé ce document utile (0 vote)
24 vues19 pages

Analyseur de spectre avec GNU Radio

Cet article présente la création d'un analyseur de spectre à balayage utilisant GNU Radio Companion, mettant en avant ses avantages par rapport à la Fast Fourier Transform classique. Il explique les principes de la Radio Logicielle et décrit étape par étape la construction de l'analyseur, tout en abordant les limitations de la FFT et les méthodes pour les contourner. L'implémentation permet une analyse de signal plus flexible et détaillée, en balayant une bande de fréquence choisie.

Transféré par

margueritte30
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
24 vues19 pages

Analyseur de spectre avec GNU Radio

Cet article présente la création d'un analyseur de spectre à balayage utilisant GNU Radio Companion, mettant en avant ses avantages par rapport à la Fast Fourier Transform classique. Il explique les principes de la Radio Logicielle et décrit étape par étape la construction de l'analyseur, tout en abordant les limitations de la FFT et les méthodes pour les contourner. L'implémentation permet une analyse de signal plus flexible et détaillée, en balayant une bande de fréquence choisie.

Transféré par

margueritte30
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Article expérimental

Union des professeurs de physique et de chimie 173

Un analyseur de spectre à balayage


avec GNU Radio Companion
par Antoine BLAIS
École nationale de l’aviation civile (ENAC) - 31055 Toulouse
[Link]@[Link]

C et article propose l’implémentation didactique d’un analyseur de spectre à balayage sous


GNU Radio Companion (GRC). Nous y exposerons tout d’abord l’intérêt de ce type
d’analyseur par rapport à l’utilisation de la classique Fast Fourier Transform (FFT). Puis,
étape par étape, nous assemblerons l’analyseur en expliquant les traitements mis en œuvre, avec
le souci d’en faire comprendre les principes plutôt que les arcanes. L’affichage final du spectre se
fera à l’aide d’un script Python externe à GRC. Cela nous donnera l’occasion d’utiliser un des
mécanismes de transmission de données disponibles pour faire sortir GRC de sa « bulle ».

PRÉAMBULE
Avant d’entrer dans le vif du sujet, il nous semble important de rappeler, ou de
définir peut-être pour certains de nos lecteurs, le concept de Radio Logicielle (Software
Defined Radio en anglais). Il s’agit d’une démarche de conception des émetteurs et
récepteurs radio visant à réaliser le traitement des signaux de façon numérique plutôt
que de manière analogique. Il s’agit donc, très concrètement, de remplacer les classiques
composants discrets (résistances, condensateurs, transistors…) par des circuits intégrés
numériques programmables, dont les microprocesseurs sont l’exemple le plus abouti.
L’utilisateur dispose alors de toute la polyvalence d’un traitement du signal par logiciel,
donc modifiable à loisir, par opposition aux implémentations physiques figées. Au sein
d’un récepteur, il est même fréquent désormais de se borner à numériser le signal et de
complètement déporter les traitements sur un ordinateur personnel (PC) standard via
une liaison de données haut débit, USB ou Ethernet pour les plus communes.
Des suites logicielles adaptées ont été développées pour faciliter la manipulation et
le traitement de ces signaux numérisés sur PC. Nous nous intéresserons dans cet article
à la suite GNU Radio et en particulier nous ferons usage de son interface graphique
GRC. Sa facilité de prise en main et son efficacité en ont fait une référence en Radio
Logicielle. La suite GNU Radio est par ailleurs un logiciel libre et gratuit, ce qui ne
gâche rien. GRC permet à l’utilisateur de concevoir son traitement du signal en con-
nectant de façon graphique des blocs de traitement (filtrage, décimation, démodula-
tion, décodage…) dans un diagramme de flux. Les différents blocs sont simplement

Vol. 119 - Février 2025 Antoine BLAIS


174 Union des professeurs de physique et de chimie

« piochés » à la souris dans la librairie GNU Radio et ensuite reliés par des clics sur leur
entrée « input » et leur sortie « output ».
L’application présentée dans cet article est la conception d’un outil de base en
traitement du signal, un analyseur de spectre. C’est, avec l’oscilloscope, le premier
instrument utilisé pour étudier un signal. Il permet de mesurer la répartition de la
puissance du signal en fréquence et de déterminer ainsi sa bande passante ou encore
d’aider à l’identification de ses périodicités.

INTRODUCTION
La fréquence d’échantillonnage maximale d’un récepteur logiciel détermine la
bande passante qu’il est capable de restituer à l’utilisateur. Par exemple, la fréquence
d’échantillonnage la plus élevée fiable d’une clé USB de réception de la TNT
(Télévision numérique terrestre) détournée en récepteur logiciel est de 2,56 MHz.
Dans un diagramme de flux GRC, un bloc Frequency Sink connecté à la sortie d’un
bloc RTL-SDR Source correspondant à cette clé ne pourra donc pas afficher une bande
passante plus large que [– 1,28, + 1,28] MHz. C’est le théorème de Shannon (cf.
encadré 1) qui impose sa limite. De plus, la résolution en fréquence du spectre affiché
ne pourra pas être meilleure que . 1/T avec T la longueur de la FFT calculée par le
bloc Frequency Sink.

Encadré 1 : le théorème de Shannon


Le théorème de Shannon stipule que pour pouvoir reconstruire sans perte
d’information un signal à partir de ses échantillons prélevés à une fréquence Fs cette
fréquence doit vérifier l’inégalité Fs H 2 Fmax où Fmax est la fréquence maximale du
signal. Le corollaire implique qu’un matériel limité à une fréquence d’échantillon-
nage maximale Fs ne pourra pas traiter un signal de bande plus large que [ – Fs 2 ,
+ Fs 2 ].

Cet article propose l’implémentation sous GRC d’un type particulier d’analyseur
de spectre, à balayage, qui passe outre ces deux limitations. Il donne ainsi accès à une
bande passante et une résolution arbitraires, permettant une analyse du signal qui n’est
plus bridée par le matériel utilisé. L’implémentation décrite dans ces lignes se voulant
résolument didactique, nous avons dans la mesure du possible évité les détails trop
techniques du fonctionnement de l’analyseur de spectre à balayage. Nous invitons le
lecteur intéressé par une présentation plus complète à consulter l’article de Christoph
Rauscher [1] par exemple.

Un analyseur de spectre à balayage avec GNU Radio Companion Le Bup n° 1071


Article expérimental
Union des professeurs de physique et de chimie 175

1. LE MATÉRIEL ET LE LOGICIEL
1.1. Le matériel
Nous utiliserons ici une simple clé TNT comme celle de la figure 1, mais tout
autre récepteur SDR (Software Defined Radio) conviendra du moment qu’il dispose d’un
bloc équivalent dans la librairie de GRC. Les performances relativement modestes de
cette clé ne feront que mettre davantage en évidence les atouts de l’analyseur de spectre
à balayage que nous proposons de réaliser.

Figure 1 - Un exemple de récepteur SDR


à bas coût [4].

Il faudra cependant prêter attention à la précision et à la stabilité en fréquence


de l’oscillateur pilote qui équipe ce type de matériel d’entrée de gamme. En effet, le
TCXO (Temperature Controlled Crystal Oscillator) des clés TNT peut afficher jusqu’à
± 100 ppm d’écart en fréquence avec la valeur attendue. À 100 MHz, le décalage peut
donc atteindre ± 10 kHz. L’utilisateur aura donc tout intérêt à réaliser un étalonnage
en fréquence de son récepteur SDR avant toute mesure. En ce qui concerne la clé
TNT, la procédure la plus immédiate consiste tout d’abord à exécuter dans un terminal
la commande
rtl_test -s 2.56e6 -p
Ce programme [2] fournit sur sa sortie standard la valeur cumulative PPM, une estimée
de l’erreur de fréquence de l’oscillateur de la clé. Il est recommandé d’attendre une
stabilisation en température de la clé avant de relever cette valeur et de la reporter fina-
lement dans le champ Frequency Correction (ppm) du bloc RTL-SDR Source. L’étude
comparative de matériels SDR présentée dans l’article de Jean-Michel Friedt [3] met en
particulier l’accent sur la qualité des oscillateurs pour qui souhaite approfondir ce sujet.

1.2. Le logiciel
Les diagrammes de flux présentés dans cet article ont été réalisés avec GRC ver-
sion [Link], pour une exécution sous Python 3.11.5, le tout sur une distribution Linux

Vol. 119 - Février 2025 Antoine BLAIS


176 Union des professeurs de physique et de chimie

Debian trixie/sid et son noyau 6.4.0-3-amd64. Les modules Pygame et Matplotlib sont
nécessaires au fonctionnement du script Python chargé de l’affichage final du spectre(1).

2. LES LIMITES DE L’APPROCHE PAR FFT


Implémentons pour commencer le diagramme de flux simple évoqué dans l’intro-
duction : un bloc Frequency Sink connecté à la sortie d’un bloc RTL-SDR Source (cf.
figure 2, page ci-contre). La fréquence centrale Fc de la clé sera choisie à la convenance
du lecteur dans la bande de radiodiffusion FM, entre 87,5 et 108 MHz. Les émissions
y sont en effet nombreuses et puissantes, ce qui en fait un environnement de test tout
indiqué. L’auteur utilise ainsi la station France Info sur Fc = 105, 5 MHz . L’exécution
de ce diagramme, dont la sortie graphique est reproduite en figure 3 (cf. page ci-
contre), nous montre qu’une fréquence d’échantillonnage Fs = 2, 56 MHz permet de
visualiser correctement le spectre de l’émission en modulation de fréquence, carac-
térisée par une bande passante d’approximativement 120 kHz, au milieu de la plage
[Fc – 1, 28 MHz , Fc + 1, 28 MHz). Quelques autres stations adjacentes sont également
visibles. Mais c’est tout, le reste de la bande, près de 18 MHz, nous est inaccessible.
La solution la plus immédiate à cette limitation serait évidemment d’opter pour un
matériel plus performant, mais inévitablement plus coûteux.
Et ce spectre, quel niveau de détail nous offre-t-il ? En d’autres termes, quelle
est sa résolution ? La théorie sous-jacente de la transformée de Fourier nous indique
que cette résolution est inversement pro-
Encadré 2 : la résolution
portionnelle à T la longueur de la FFT,
avec T = N $ Ts où N est le nombre de La résolution d’un analyseur de
points de calcul de la FFT et Ts = 1 Fs spectre est sa capacité à séparer deux
représente la période d’échantillonnage raies proches. Une raie dans le spectre
du signal. Plus le signal sera observé correspond à un signal harmonique pur
longtemps, meilleure sera la résolution. comme celui délivré par un oscillateur.
Un ordre de grandeur simple à retenir Selon cette définition, il est possible de
est que pour obtenir une résolution de montrer que pour un temps d’observa-
tion du signal d’une seconde la résolu-
1 Hz il faut observer le signal sur une
tion atteignable est d’au mieux 0,89 Hz
seconde. L’augmentation du nombre de
[5]. Donc pour N échantillons pris à
points de calcul N de la FFT dans le bloc
une cadence de Fs Hz la résolution
Frequency Sink permet donc d’améliorer
limite sera de 0, 89 Fs N Hz.
linéairement la résolution du spectre affi-

(1) Codes sources : les diagrammes de flux GRC et le script Python présentés dans cet article
sont mis à disposition des lecteurs sur le dépôt de l’auteur à l’adresse :
[Link]
et sont également disponibles sur le site de l’UdPPC.

Un analyseur de spectre à balayage avec GNU Radio Companion Le Bup n° 1071


Article expérimental
Union des professeurs de physique et de chimie 177

Figure 2 - Diagramme de flux GRC mettant en évidence la plage de fréquence accessible


pour une fréquence d’échantillonnage Fs = 2, 56 MHz .

Figure 3 - La bande passante limitée à ! 1, 28 MHz autour de Fc = 105, 5 MHz


par une fréquence d’échantillonnage Fs = 2, 56 MHz .

Vol. 119 - Février 2025 Antoine BLAIS


178 Union des professeurs de physique et de chimie

ché. Mais cela ne peut se faire indéfiniment, la mémoire et la puissance de calcul étant,
elles, finies.

3. LA MÉTHODE DU BALAYAGE EN FRÉQUENCE


Les limites de la plage de fréquence visible sont irrémédiablement fixées à
[Fc – Fs 2, Fc + Fs 2] par le théorème de Shannon, mais il nous reste la possibilité de
faire varier Fc pour lui faire balayer l’intervalle de fréquence de notre choix. La largeur
de cet intervalle est appelée le span (en Hertz) et la durée du balayage le sweep time (en
seconde), souvent abrégé en sweep. Le balayage est en général linéaire, c’est-à-dire qu’il
obéit à la loi simple
Fc (t) = Fstart + t{ sweep # span où t{ / t (mod sweep)
avec Fc (t) la fréquence centrale de la clé à l’instant t, Fstart la fréquence de départ du
balayage et (mod ·) l’opérateur modulo. La variable t{ décrit donc une rampe, sans cesse
recadrée sur l’intervalle [0, sweep] par l’application du modulo. Nous définissons égale-
ment Fend = Fstart + span la fréquence finale atteinte lorsque t{ = sweep . Parvenu à Fend , le
système recommence à Fstart , etc.
Le diagramme (cf. figure 4, page ci-contre) implémente ce balayage et la figure 5
(cf. page ci-contre) montre bien l’évolution en dent de scie de la fréquence. Le lecteur
remarquera dans le diagramme l’introduction du duo de blocs Probe Signal et Probe
Function (cf. encadré 3) qui permettent de mettre à jour une variable (ici freq_val) à
partir d’un signal. Pour l’instant, cette variable ne sert qu’à afficher la valeur instantanée
de la fréquence sous la forme d’un QT GUI Label.

Encadré 3 : le duo Probe Signal et Probe Function


Le bloc Probe Signal sert de récepteur à un signal destiné à être transformé en
variable. Son seul paramètre ID est le nom sous lequel nous souhaitons désigner ce
signal, freq dans le diagramme (cf. figure 4, page ci-contre).
Le bloc Probe Function quant à lui vient « sonder » régulièrement le signal dont
le nom lui est passé dans le paramètre BlockID, freq ici donc. Le paramètre ID de ce
bloc spécifie le nom de la variable associée au signal, freq_val dans notre exemple.
La fonction de sonde est précisée par le paramètre Function Name, level ici pour
obtenir simplement la valeur de freq. Et enfin, le paramètre Poll Rate indique la
fréquence de rafraîchissement de la variable.

La combinaison du diagramme (cf. figure 2, page précédente) et du diagramme


(cf. figure 4, page ci-contre), réalisée dans le diagramme (cf. figure 6, page ci-après),
permet de faire défiler sur l’affichage du Frequency Sink toute la bande FM et son long
cortège de stations. Ce diagramme implémente donc un scanner en fréquence.

Un analyseur de spectre à balayage avec GNU Radio Companion Le Bup n° 1071


Article expérimental
Union des professeurs de physique et de chimie 179

Figure 4 - Diagramme de flux GRC implémentant le balayage en fréquence.

Figure 5 - L’évolution en dent de scie de la fréquence centrale Fc entre Fstart et Fend .

Vol. 119 - Février 2025 Antoine BLAIS


180 Union des professeurs de physique et de chimie

Figure 6 - Diagramme de flux GRC implémentant un scanner en fréquence.

Un analyseur de spectre à balayage avec GNU Radio Companion Le Bup n° 1071


Article expérimental
Union des professeurs de physique et de chimie 181

Nous avons dépassé la limitation en bande passante de l’analyseur de spectre par


FFT puisqu’en paramétrant la fréquence de départ Fstart et le span il est maintenant
possible de choisir la bande à analyser de façon arbitraire.

4. LE FILTRE SÉLECTIF
Attaquons-nous maintenant à l’obstacle de la résolution. Mais rappelons tout
d’abord que l’analyseur de spectre mesure la répartition de la puissance du signal en
fonction de la fréquence. Il nous faut donc ajouter à notre diagramme (cf. figure 6) un
dispositif de mesure de puissance, pour chaque fréquence Fc qui défile en sortie de la
clé TNT. Afin de sélectionner la fréquence Fc dans la bande [Fc – Fs 2, Fc + Fs 2] nous
commençons par placer en sortie du bloc RTL-SDR Source un filtre passe-bas (cf.
encadré 4) pour isoler Fc sur un intervalle de fréquence plus restreint, comme repré-
senté sur le diagramme (cf. figure 7, page ci-après).

Encadré 4 : un filtre passe-bas autour de Fc ?


La clé TNT opère une transposition de fréquence de la bande qu’elle reçoit
[Fc – Fs 2, Fc + Fs 2] vers [– Fs 2, + Fs 2], c’est-à-dire autour de 0. Rappelons que
Fc représente la fréquence centrale de réception de la clé et Fs la fréquence d’échan-
tillonnage du signal. Ce changement de fréquence centrale est réalisé de façon trans-
parente pour l’utilisateur, sans aucune perte d’information puisqu’il s’agit seulement
d’une translation du spectre. L’intérêt est de pouvoir traiter ensuite de façon géné-
rique le signal autour de 0, indépendamment de la valeur particulière de Fc . Ainsi,
placer un filtre passe-bas en sortie du bloc RTL-SDR Source pour sélectionner la
fréquence Fc n’est pas une erreur, mais un simple abus de langage.

Dans l’idéal, la fréquence de coupure de ce filtre, notée Fr , devrait tendre vers 0


de façon à ne laisser passer que la fréquence Fc . Mais un filtre dont la bande passante
tend vers 0 présente en contrepartie un temps de réponse qui augmente vers l’infini,
allongeant en proportion le temps de mesure. Il va nous falloir bon gré mal gré « des-
serrer » ce filtre. Mais attention, plus Fr sera grande, moins la résolution sera bonne. En
effet, la puissance qui sera mesurée en sortie du filtre inclura toutes les composantes du
signal comprises dans l’intervalle [– Fr , + Fr ] autour de Fc , et non plus seulement en Fc .
La mesure de puissance en sera biaisée.
Ce filtre sélectif définit donc entièrement la résolution de notre analyseur de
spectre à balayage. Mais tout comme la largeur de la bande à analyser, le span, nous
pouvons désormais choisir cette résolution à loisir, par l’intermédiaire de la fréquence
de coupure Fr . Dans la pratique, c’est plutôt le paramètre de « resolution bandwidth »
= 2 Fr , souvent abrégé en rbw, qui est défini au lieu de Fr .

Vol. 119 - Février 2025 Antoine BLAIS


182 Union des professeurs de physique et de chimie

Figure 7 - Diagramme implémentant la mesure de puissance.

Un analyseur de spectre à balayage avec GNU Radio Companion Le Bup n° 1071


Article expérimental
Union des professeurs de physique et de chimie 183

Il convient de noter ici une différence importante entre l’analyseur de spectre


par FFT présenté sur le diagramme (cf. figure 2, pages précédentes) et l’analyseur de
spectre à balayage en construction du diagramme (cf. figure 7, page ci-contre) : la
valeur de la fréquence d’échantillonnage Fs .
♦ Pour l’analyseur par FFT, plus Fs est grande, plus la plage de fréquence accessible est
étendue, mais moins la résolution est bonne (pour un nombre de points de calcul de
la FFT donné).
♦ Pour l’analyseur de spectre à balayage, c’est le span qui définit la plage de fréquence
accessible et la rbw qui règle la résolution. Le span est complètement indépendant de
Fs . En revanche, la rbw (= 2 Fr la fréquence de coupure d’un filtre qui est ici numé-
rique) doit vérifier le théorème de Shannon, à savoir rbw G Fs . Mais comme nous
souhaitons en général obtenir la meilleure résolution possible, donc une rbw étroite,
la contrainte est très lâche.
Typiquement, nous avons fixé dans le diagramme (cf. figure 7, page ci-contre)
Fs = 250 kHz , la valeur la plus basse admissible par la clé. En effet, notre ambition est
d’obtenir in fine une résolution largement meilleure que 250 kHz. Choisir une fré-
quence d’échantillonnage supérieure à 250 kHz aboutirait uniquement à un gaspillage
inutile de la puissance de calcul disponible, puisqu’il faudrait traiter un plus grand
nombre d’échantillons par seconde, sans amélioration de la résolution. L’analyseur de
spectre à balayage est donc économe en ressources de calcul, car il n’exige pas une fré-
quence d’échantillonnage élevée, et en conséquence une cadence de calcul importante,
pour atteindre une bonne résolution.
Par ailleurs, le lecteur perspicace aura noté le facteur de « décimation » imposé en
paramètre du filtre sélectif. L’opération de décimation consiste à supprimer périodique-
ment des échantillons du signal afin d’abaisser sa fréquence d’échantillonnage, le facteur
de décimation se définissant alors comme le rapport des fréquences d’échantillonnage
avant et après l’opération : R = Famont Faval . Par exemple, une décimation de facteur
R = 2 supprime un échantillon sur deux, divisant ainsi la fréquence d’échantillonnage
par deux. Dans notre cas, puisqu’en sortie du filtre sélectif, la bande passante du signal
est désormais limitée à Fr , il est inutile de maintenir une fréquence d’échantillonnage
supérieure à 2 Fr = rbw . D’où l’utilité d’une décimation en sortie du filtre, de facteur
R = Fs rbw = 250 # 10 3 rbw . La puissance de calcul nécessaire en aval en sera d’autant
diminuée.

5. LA MESURE DE LA PUISSANCE
La mesure de la puissance s’effectue ensuite en deux temps. Il s’agit tout d’abord
d’élever au carré l’amplitude A (t) du signal en sortie du filtre sélectif. Nous obtenons
la puissance instantanée Pi (t) = A (t) 2 . Dans un deuxième temps, un filtre passe-bas

Vol. 119 - Février 2025 Antoine BLAIS


184 Union des professeurs de physique et de chimie

lisse la valeur de Pi (t) pour produire la puissance moyenne Pm = Pi (t) . L’indice m de


la notation Pm rend compte de cette nature moyenne de la mesure. Un filtre passe-
bas, puisqu’il supprime les hautes fréquences, gomme en effet les variations rapides
du signal, il le lisse. La force du lissage est réglée par la fréquence de coupure Fm du
filtre. Plus la fréquence de coupure est basse, plus le filtre lisse le signal et donc réduit
la variance (cf. encadré 5) de la mesure à sa sortie. Nous reviendrons sur cette notion
de variance et son couplage avec la résolution.
L’usage historique est ici aussi de fixer plutôt le paramètre de « video bandwidth »
= 2 Fm , souvent abrégée en vbw, au lieu
de Fm . Le terme « video » fait référence Encadré 5 : la variance
au lissage opéré par ce filtre, clairement La variance d’une mesure repré-
visible sur l’affichage graphique, qui était sente la dispersion des valeurs obtenues
vidéo à l’époque, numérique de nos jours. autour de la valeur recherchée. Une
Par extension, ce filtre de lissage est aussi mesure n’est en effet jamais « exacte »,
appelé filtre « video ». toujours entachée au moins du bruit
du capteur. Ici, c’est le bruit des étages
Le diagramme (cf. figure 7, pages
de réception qui vient perturber le
précédentes) intègre le filtrage sélectif et
résultat. L’amplitude de ce bruit change
la mesure de puissance, avec un affichage
constamment, ce qui explique que
du résultat sous la forme d’une jauge gra-
d’une fréquence à l’autre la mesure
phique QT GUI Level Gauge pour l’ins-
peut varier beaucoup, alors que le pro-
tant, c’est-à-dire un simple indicateur de
cessus objet de l’analyse spectrale est
niveau. À noter, la puissance (moyenne)
lui plus régulier. Plus formellement, la
en sortie du filtre de lissage est divisée variance se définit comme la moyenne
par rbw pour disposer du niveau de la du carré des écarts entre la mesure et
puissance Sm = Pm rbw (en watt/hertz), la valeur recherchée. L’élévation au
et non pas de la valeur totale de la puis- carré donne une importance accrue
sance Pm (en watt) qui passe dans le filtre aux grands écarts par rapport aux plus
sélectif. Très précisément, Sm représente petits.
donc la répartition en fréquence de la
puissance moyenne ou Densité spectrale En traitement du signal, plus la
de puissance (DSP). À ce stade la mesure bande passante d’un filtre est large,
est terminée, pour chaque fréquence Fc plus il laisse passer du bruit en plus
nous disposons du niveau de la puissance du signal utile, donc plus une mesure
du signal Sm . ultérieure sera perturbée, c’est-à-dire
qu’elle présentera une grande variance.
La confiance de l’utilisateur dans la
6. L’AFFICHAGE qualité de sa mesure sera évidemment
d’autant plus grande que la variance
Il nous reste à tracer graphiquement
sera faible.
l’évolution du niveau de la puissance Sm

Un analyseur de spectre à balayage avec GNU Radio Companion Le Bup n° 1071


Article expérimental
Union des professeurs de physique et de chimie 185

en fonction de la fréquence Fc . Pour ce faire, nous allons devoir « sortir » de GRC, car
aucun bloc d’affichage, ou « widget », adéquat n’est disponible dans la librairie offerte
en standard par le logiciel. Le moyen que nous avons choisi consiste à utiliser un bloc
ZMQ Pub Sink, car il rend très simple l’exportation de données depuis GRC. Le
lecteur intéressé par un panorama complet des moyens de communication disponibles
sous GRC pourra consulter l’article de Jean-Michel Friedt [6] avec profit.
Le diagramme (cf. figure 8, page ci-après) inclut ce bloc de transmission ainsi que
la mise en forme des données nécessaire à son alimentation. Plus précisément, nous
groupons dans un vecteur les deux variables start_freq (Fstart) et span (span) et les deux
signaux freq_val (Fc ) et pow_val (Sm). Ce vecteur est émis périodiquement via la soc-
ket locale ZeroMQ [7], tout simplement un point d’accès logiciel au réseau, gérée de
façon transparente pour l’utilisateur par le bloc ZMQ Pub Sink. L’adresse de la socket,
tcp://[Link]:5555, a été simplement reprise par défaut de la documentation [8].
La périodicité de la transmission est réglée par la variable poll_rate en conjonction
avec les blocs Keep 1 in N. Dans l’idéal poll_rate = 1, c’est-à-dire une transmission
de toutes les valeurs de Sm mesurées, mais c’est la vitesse d’exécution du script Python
d’affichage qui décidera… suivant la machine sur lequel il tourne. Le diagramme (cf.
figure 8) constitue l’étape finale de notre analyseur sous GRC.
La tâche d’affichage graphique du spectre est donc confiée à un script Python
indépendant de GRC, simple_spectrum_analyser_scope.py, qu’il conviendra de lancer
dans un terminal annexe. Son ossature est constituée d’une boucle infinie qui, sur
réception d’un quadruplet (start_freq, span, freq_val, pow_val), affiche la valeur Sm à
la fréquence Fc , sur l’intervalle [Fstart , Fstart + span ]. Nous ne nous étendrons pas sur le
mécanisme d’affichage à proprement parler, il ne présente pas d’intérêt notable, en par-
ticulier dans un article consacré au traitement du signal à l’aide de GRC. La réception
et le décodage du quadruplet en revanche méritent une explication. La réception se
fait par l’appel de fonction
data = [Link]([Link])
La variable data, un buffer d’octets, se décompose ensuite à l’aide des deux instructions
suivantes, qui permettent la récupération simultanée des quatre valeurs transmises par
GRC :
dt = [Link](np.float32)
start_freq, span, pow_val, freq_val = [Link](data, dtype=dt, count=4)
Le paramètre dt spécifie le type des variables attendues et le paramètre count indique
que nous souhaitons décoder quatre éléments de ce type.
L’exécution du script d’affichage restitue la mesure de puissance effectuée fré-
quence après fréquence par notre diagramme de flux GRC. La figure 9 (cf. page ci-
après) donne à voir par exemple l’ensemble de la bande FM, soit 20,5 MHz, analysée

Vol. 119 - Février 2025 Antoine BLAIS


186 Union des professeurs de physique et de chimie

Figure 8 - Diagramme complet de notre analyseur de spectre à balayage.

Un analyseur de spectre à balayage avec GNU Radio Companion Le Bup n° 1071


Article expérimental
Union des professeurs de physique et de chimie 187

par notre clé TNT dont la fréquence d’échantillonnage plafonne à 2,56 MHz. Chaque
« pic » correspond à une station de radiodiffusion, les plus connues étant identifiées par
leur nom.

Figure 9 - La bande FM analysée par balayage.

7. LE COMPROMIS RÉSOLUTION-VARIANCE
L’analyseur est donc pleinement fonctionnel désormais. Mais comment régler
ses paramètres essentiels que sont le sweep, la « resolution bandwidth » rbw et la « video
bandwidth » vbw ?
La donnée initiale du problème est le span, l’étendue spectrale que nous souhai-
tons explorer. Cette exploration se fera sur une durée définie par le sweep, ce qui induit
un temps de défilement d’une fréquence Fc dans la bande passante rbw du filtre sélectif
Dtrbw = rbw # sweep span .

Ce temps est la durée durant laquelle l’information relative à Fc est disponible


pour le traitement du signal. Dtrbw doit notamment être suffisant pour que le filtre
sélectif puisse opérer sa fonction de filtrage. Il doit donc être supérieur au temps de
réponse du filtre. Or, comme nous l’avons déjà mentionné, le temps de réponse d’un
filtre, que nous noterons trbw pour le filtre sélectif, est inversement proportionnel à sa
bande passante, en l’espèce rbw. Cette relation s’écrit d’une façon générale trbw = k rbw ,
où le facteur de proportionnalité k vaut entre 2 et 15 suivant le type du filtre. La condi-

Vol. 119 - Février 2025 Antoine BLAIS


188 Union des professeurs de physique et de chimie

tion Dtrbw H trbw se développe alors en


Dtrbw = rbw # sweep span H trbw = k rbw
ce qui nous permet de dimensionner le sweep en fonction de la résolution souhaitée :
sweep H k # span (rbw) 2 .
Le sweep est donc inversement proportionnel au carré de la résolution spécifiée. À
titre d’exemple, pour obtenir une résolution de 1 kHz sur les 20,5 MHz de la bande
FM il faudrait un sweep d’au moins 20,5 s (k = 1). Et si nous souhaitions une résolution
dix fois meilleure, de 100 Hz donc, il nous faudrait un sweep cent fois plus long, soit
plus de trente minutes ! Tout se paye…
Mais le temps de défilement Dtrbw d’une fréquence Fc dans la bande passante
du filtre sélectif doit être plus grand également que le temps de réponse tvbw du filtre
« video » pour que celui-ci ait le temps de remplir sa fonction de lissage. C’est-à-dire
Dtrbw H tvbw = k l vbw . Cette fois aussi nous pouvons développer cette relation en
Dtrbw = rbw # sweep span H tvbw = k l vbw
qui finalement donne sweep H k l # span (rbw # vbw) .
L’intérêt de cette dernière relation est de mettre en évidence le compromis auquel
nous ne pouvons pas échapper lorsqu’il nous faut fixer rbw et vbw. Il s’agit du compro-
mis entre la résolution et la variance de la mesure. En effet, la relation nous indique
que le sweep est, à sa limite inférieure, inversement proportionnel au produit rbw # vbw .
Souvenons-nous que la résolution est définie par la rbw qui laisse passer plus que Fc
tandis que la variance résulte du lissage plus ou moins important effectué par la vbw.
Donc, pour un temps d’observation global du signal fixé par le sweep, pour améliorer
la résolution (rbw .) il faut accepter de dégrader la variance (vbw -) de la mesure et,
inversement, pour diminuer la variance (vbw .) il est nécessaire de sacrifier la résolution
(rbw -).
Lorsque le signal à analyser nous est parfaitement inconnu, une bonne pratique
consiste à effectuer une première passe à la résolution maximale, sans le filtre vidéo.
Cette façon de procéder permet une détection des raies avec les plus grandes chances
de succès, malgré la variance importante du résultat. En effet, une première passe avec
un lissage, même léger, induirait nécessairement une perte de résolution et les raies
pourraient être noyées dans leur voisinage spectral, surtout si elles sont de faible inten-
sité. Une deuxième passe, avec un lissage et donc à résolution moindre, mais à variance
plus faible, permet ensuite d’obtenir une vision moins bruitée du spectre dégrossi par
la première étape.

Un analyseur de spectre à balayage avec GNU Radio Companion Le Bup n° 1071


Article expérimental
Union des professeurs de physique et de chimie 189

CONCLUSION
Nous avons construit depuis A jusqu’à Z un analyseur de spectre à bande passante
et résolution arbitraires. Nous sommes partis d’un matériel SDR aux capacités volon-
tairement limitées et nous avons tout d’abord trouvé le moyen de lui faire parcourir une
plage de fréquence bien plus large que sa bande passante. Puis nous avons sélectionné
par filtrage sélectif, autour de la fréquence instantanée balayée par le récepteur SDR,
une étroite bande de fréquence. Et enfin, une mesure de puissance nous a fourni la
valeur du spectre du signal à cette fréquence particulière. L’affichage graphique de
l’évolution de cette puissance en fonction de la fréquence, le spectre du signal, a
finalement été pris en charge par un script Python externe à GRC. C’est le protocole
de communication ZeroMQ qui a assuré la liaison entre les deux programmes. Cet
analyseur de spectre à balayage à vocation fondamentalement didactique est bien sûr
perfectible sur bien des points, sa licence GNU GPLv3 permettant cependant à chacun
d’y apporter ses améliorations, et même d’en faire profiter la communauté. Pour finir,
nous invitons les lecteurs les plus motivés à relever le défi d’implémenter avec GRC la
technique alternative introduite en encart (cf. encadré 6).

Encadré 6 : la technique alternative


Le balayage en fréquence n’est pas la seule méthode utilisable pour dépasser
les limites de la FFT simple. Une technique alternative consiste à juxtaposer des
FFT de façon à couvrir le span désiré. Ainsi, la fréquence centrale est initialisée
à Fc = Fstart + W 2 où W (= Fs) représente la largeur spectrale d’une FFT et tou-
jours span = Fend – Fstart . Une première FFT est alors calculée, couvrant l’intervalle
[Fstart, Fstart + W]. L’étape suivante consiste à décaler la fréquence centrale du récep-
teur SDR en Fc = Fstart + 3 W 2 et à calculer une seconde FFT, pour couvrir cette
fois l’intervalle de fréquence [Fstart + W, Fstart + 2 W]. Le procédé est répété jusqu’à
atteindre Fend . C’est l’algorithme mis en œuvre par exemple dans les utilitaires en
ligne de commande rtl_power [2] et rtl_power_fftw [9]. Cette méthode n’apporte
pas d’amélioration en termes d’analyse spectrale par rapport à la technique présen-
tée dans cet article. En particulier, elle ne change rien au compromis résolution-
variance. Néanmoins, elle se montre globalement plus économe en ressources de
calcul.

REMERCIEMENTS
L’auteur tient à remercier Christophe Morlaas, de l’équipe de recherche
Électromagnétisme et antennes du Laboratoire de l’ENAC (Toulouse), et Jean-Michel
Friedt, du département Temps-fréquence de l’Institut FEMTO-ST (Besançon), pour
leur aimable relecture.

Vol. 119 - Février 2025 Antoine BLAIS


190 Union des professeurs de physique et de chimie

BIBLIOGRAPHIE ET NETOGRAPHIE
[1] C. Rauscher, Fundamentals of spectrum analysis, Rohde & Schwarz, 2001. Dispo-
nible à l’adresse :
[Link]
spectres/educational-note-fundamentals-of-spectrum-analysis-register_252824.html
page consultée le 12 décembre 2024.
[2] Osmocom, “rtl-sdr”. Site consultable à l’adresse :
[Link]
page consultée le 12 décembre 2024.
[3] J.-M. Friedt, « Matériel pour la radio logicielle », GNU/Linux Magazine, n° 224,
mars 2019.
[4] [Link], « Clé USB récepteur TV TNT HD pour ordinateur et smart-
phone ». Site consultable à l’adresse :
[Link]
page consultée le 12 décembre 2024.
[5] F. J. Harris, “On the use of windows for harmonic analysis with the discrete Fou-
rier transform”, Proceedings of the IEEE, vol. 66, n° 1, p. 51-83, January 1978.
[6] J.-M. Friedt, « Échanges de données pour un traitement distribué : communica-
tion par réseau ou entre langage », GNU/Linux Magazine, n° 267, janvier 2024.
[7] The ZeroMQ authors, “ZeroMQ”. Site consultable à l’adresse :
[Link]
page consultée le 12 décembre 2024.
[8] Understanding ZMQ Blocks. Site consultable à l’adresse :
[Link]
page consultée le 12 décembre 2024.
[9] K. Blokar and A. Lajovic, “rtl-power-fftw”. Site consultable à l’adresse :
[Link]
page consultée le 12 décembre 2024.

Lu dans Le Bup
Pour se familiariser avec l’environnement GNU Radio, lire aussi :
♦ T. Lavarenne, « Une clé TNT pour l’étude expérimentale de signaux radiofréquences
mettant en jeu différentes modulations numériques », Bull. Un. Prof. Phys. Chim.,
vol. 111, n° 995, p. 721-739, juin 2017.
♦ T. Lavarenne, « Introduction à la surveillance du trafic aérien », Bull. Un. Prof. Phys.
Chim., vol. 112, n° 1005, p. 831-855, juin 2018.

Un analyseur de spectre à balayage avec GNU Radio Companion Le Bup n° 1071


Article expérimental
Union des professeurs de physique et de chimie 191

♦ T. Lavarenne, « Réception et décodage d’images issues de satellites météorologiques


en orbite polaire », Bull. Un. Prof. Phys. Chim., vol. 114, n° 1029, p. 1075-1092,
décembre 2020.

Antoine BLAIS
Enseignant-chercheur
École nationale de l’aviation civile (ENAC)
Toulouse (Haute-Garonne)

Vol. 119 - Février 2025 Antoine BLAIS

Vous aimerez peut-être aussi