Introduction aux radios logicielles avec GNU Radio/Lire et écrire dans un fichier

Un livre de Wikilivres.

Plusieurs outils ont été présentés afin de mener l'analyse spectrale d'un signal, par exemple le spectrogramme. Comment enregistrer de tels résultats afin d'en effectuer un traitement ultérieur ? C'est l'objet du chapitre.

Enregistrer dans un fichier les données brutes[modifier | modifier le wikicode]

GNU Radio offre la possibilité d'enregistrer dans un fichier binaires les données brutes. Ces données pourront être ouvertes par la suite avec MATLAB, GNU Octave ou bien encore les librairies scientifiques du langage Python. C'est cette dernière option qui est retenue.

Utilisation du bloc File Sink[modifier | modifier le wikicode]

Le bloc File Sink (de la catégorie File Operators) permet d'enregistrer les données sous forme brute dans un fichier binaire.

Documentation du bloc File Sinklink={{{link}}}

Implémente un comparateur à hystérésis paramétrable. La sortie vaut 1 lorsque l'entrée est au-dessus de la valeur supérieure et 0 lorsque l'entrée est en-dessous de la valeur inférieure.

  • File : nom et emplacement du fichier (choisi avec le bouton ...).
  • Input Type : type de l'entrée.
  • Vec Length : longueur du vecteur dans le cas d'un traitement vectoriel. Par défaut : 1.
  • Unbuffered : active l'utilisation d'une mémoire-tampon afin d'accélérer l'exécution du programme. Par défaut : Off (la mémoire-tampon est donc active).
  • Append file : mode d'écriture. Overwrite écrase les données déjà présentes dans le fichier, tandis que Append rajoute les nouvelles données à la fin.


Un exemple basique d'utilisation du fichier est donné ci-dessous. On y trouve un générateur sinusoïdal, un Throttle et enfin le File Sink.

Ouverture avec Python[modifier | modifier le wikicode]

La librairie gr-utils contient des fonctions permettant d'accéder aux fichiers bruts générés par GNU Radio. Toutefois, dans un premier temps, nous nous proposons de les écrire nous-même.

L'accès aux données du fichier se fera avec les librairies scientifiques NumPy et SciPy :

import numpy as np
from scipy import fromfile

Le chargement en mémoire des données brutes se fait avec la fonction scipy.fromfile :

donnees = fromfile(open("fichier"), dtype = np.float32)

cette commande étant à adapter :

  • avec le nom du fichier à ouvrir ;
  • avec le type des données stockées[1]. Ce type doit être cohérent avec le type indiqué dans le bloc File Sink, à savoir float32, complex64, int16, int32, etc.

Exemple de tracé[modifier | modifier le wikicode]

On donne à titre d'exemple un tracé temporel élémentaire réalisé avec la librairie Matplotlib, les données étant stockées dans donnees (voir ci-dessus).

import matplotlib.pyplot as plt

# Génération des pas de temps
T = 1./(32e3)
n = len(f)
t = linspace(0, T*n, num = n)

# Tracé
plt.plot(t, f)
plt.show()

Notes[modifier | modifier le wikicode]

  1. Un problème sur les données peut venir d'une erreur sur le type.