Introduction aux radios logicielles avec GNU Radio/Lire et écrire dans un fichier
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.
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]- ↑ Un problème sur les données peut venir d'une erreur sur le type.