Travailler avec les données d'une forme d'onde acquises dans Python

Les oscilloscopes Rohde & Schwarz utilisent des technologies de pointe pour obtenir des résultats fiables et reproductibles.
Les oscilloscopes Rohde & Schwarz utilisent des technologies de pointe pour obtenir des résultats fiables et reproductibles.

Votre tâche

En tant qu'ingénieur de test ou de développement, vous utilisez un oscilloscope R&S®RTP, R&S®RTO ou R&S®RTE dans vos tâches quotidiennes. Vous stockez des formes d'ondes enregistrées pour archivage et documentation ou pour un traitement ultérieur qui va au-delà des fonctions et des limites de performance de l'oscilloscope. L'utilisation du format ASCII (suffixe de fichier csv) pour stocker des formes d'ondes peut potentiellement dépasser la capacité de stockage. Ce format nécessite également une quantité de temps significative pour le transfert et le traitement. D'autre part, certaines informations sont indisponibles lors de l'utilisation du format ASCII au lieu du format binaire.

Solution Rohde & Schwarz

Les oscilloscopes de laboratoire et de performance Rohde & Schwarz (R&S®RTP, R&S®RTO, R&S®RTE) partagent tous le même format pour le stockage de formes d'ondes binaires. Le kit auxiliaire haute performance Python RTxReadBin vous permet de gérer des fichiers binaires et d'obtenir tous les détails nécessaires pour votre documentation.

Application

Afin de transférer la forme d'onde depuis votre instrument vers votre environnement Python, vous devez préparer le Python IDE :

  • Téléchargez le kit RTxReadBin sur le site internet Rohde & Schwarz
  • Installez le kit sur votre système
  • Faîtes l'acquisition d'une forme d'onde sur votre oscilloscope et stockez-la comme un fichier binaire

Deux fichiers seront créés : un fichier de description de la forme d'onde (*.bin) et un fichier de données de la forme d'onde (*.wfm.bin). Les données de la forme d'onde (chargées via la fonction RTxReadBin) peuvent se composer de :

  • Voies analogiques
  • Voies numériques (MSO)
  • Bus parallèles (acquis via MSO)
  • Voies analogiques (via ZVC)
  • Formes d'ondes mathématiques incluant les spectres
  • Suivis (formes d'ondes basées sur la mesure automatique)

Pour toutes ces sources de signaux, plusieurs acquisitions et plusieurs voies sont prises en charge si applicable.

Après l'acquisition des données avec l'oscilloscope Rohde & Schwarz, vous pouvez les charger dans votre environnement Python pour un traitement ultérieur. Pour une plus praticité accrue, cependant, vous pouvez également laisser la forme d'onde où elle est et activer l'accès réseau aux données en établissant un partage CIFS sur votre ordinateur. Effectuez les étapes de préparation suivantes sur l'oscilloscope :

  • Allez dans le partage avancé
  • Sélectionnez le profil public et changez les paramètres suivants :
    - Activez la recherche réseau
    - Activez le partage de fichier et d'imprimante
    - Activez l'accès en écriture pour les dossiers publics

Une fois que vous avez terminé ces étapes, vous pouvez connecter l'oscilloscope en utilisant le chemin de fichier suivant dans votre script Python :

r’\\<nom de l'oscilloscope ou adresse IP>\Users\Public\Documents\Rohde-Schwarz\RTx\RefWaveforms\<nom de fichier>.bin’

Ayez conscience que Python interprète la séquence, la séquence de caractères \U sera interprétée et conduira à une erreur. Pour éviter cela, ajoutez juste un “r” (pour raw = ligne) en face de la séquence. On pourrait vous demander vos identifiants. Assurez-vous de ne pas utiliser d'authentification contre le serveur du domaine local Windows. Pour cela, faîtes précéder le compte local instrument d'un backslash (barre oblique inversée) :

compte : \instrument
mot de passe: <votre oscilloscope pw>

Sinon, vous pouvez aussi télécharger (glisser et déplacer) la forme d'onde depuis l'oscilloscope en utilisant Windows Explorer.

Une fois ces prérequis en place, vous pouvez charger le module via l'importation Python et invoquer RTxReadBin. La manière la pus simple pour cela est de fournir un nom de fichier. La fonction retourne trois paramètres : les données verticales de la forme d'onde (y), les données de l'axe horizontal (x) et le paramètres d'acquisition (S).

> from RTxReadBin import RTxReadBin
> import numpy
> y, x, S = RTxReadBin(’<nom du fichier de la forme d'onde>.bin’)
> y.shape

Les données verticales (y) sont un faisceau NumPy avec une forme de [<longueur d'enregistrement>, <# d'acquisitions>, <# de voies actives>]. Pour une forme d'onde MSO, le type de données est juste Booléen et pour les bus parallèles, il s'agit d'un nombre entier sans signe (uint16), chiffré en bit avec l'index MSO le plus élevé (MSB). Par exemple, considérons que les lignes MSO D12, D7, D2 et D0 sont connectées et configurées comme un bus parallèle. Alors, les mots de données enregistrés seraient stockés comme D12 ∙ 23 + D7 ∙ 22 + D2 ∙ 21 + D0 ∙ 20. Pour tous les autres types de données de formes d'ondes, float32 est utilisé. Il est important de mentionner que l'oscilloscope utilise une manière différente de comptage de l'historique des acquisitions par rapport à Python. L'oscilloscope commence avec (1 - <# d'acquisitions>) et compte jusqu'à 0 comme dernière acquisition. Dans Python, le comptage est décalé et démarre avec 0 et se termine avec (<# d'acquisitions> - 1) comme dernière acquisition.

Les données horizontales (x) sont un faisceau flottant NumPy 64 bits avec une forme de [<longueur d'enregistrement>]. Si les données sont stockées au format entrelacé x/y, le faisceau est étendu pour couvrir toutes les acquisitions [<longueur d'enregistrement>, <# d'acquisitions>]. Si un spectre est stocké, l'axe x contiendra l'axe de fréquence du spectre.

La longueur d'enregistrement, le nombre d'acquisitions et de voies peuvent être facilement retrouvés en accédant aux propriétés de forme de la valeur retournée y.

Si tous les paramètres ne sont pas requis, ils peuvent être ignorés en utilisant les techniques standards Python, par exemple en ajoutant un indicateur de liste (voir exemple ci-dessous) ou en utilisant un tiret du bas (underscore) comme paramètre de retour de position.

> y, x =
RTxReadBin(’<nom du fichier de la forme d'onde>.bin’)[0,2]

Il existe deux autres paramètres (optionnels) qui peuvent être spécifiés afin de réduire la quantité de mémoire allouée. Le premier paramètre spécifie les acquisitions d'intérêt. Le second paramètre spécifie l'intervalle, la durée ou la fréquence d'intérêt. Les deux nécessitent une liste avec une longueur de deux éléments. Ayez conscience que le paramètre d'acquisition suit la notation d'une liste Python. Dans l'exemple donné, deux acquisitions (2,3) sont retournées.

> y, x, S = RTxReadBin(’<nom du fichier de la forme d'onde>.bin’,
acquisitions = [2,4],
xInterval = [-2e-7,3e-7])

Le paramètre S restant donne tous les détails disponibles dans le fichier d'en-tête. Il est implémenté comme un dictionnaire Python. Ces paramètres ne sont pas tous importants pour l'utilisateur. Cependant, certains d'entre eux peuvent être utiles pour la documentation et l'analyse. Puisque les données de la forme d'onde dans le vecteur y sont juste flottantes, l'utilisateur ne peut pas déterminer les réglages d'origine à partir de ces données. En examinant les paramètres dans l'en-tête, cependant, l'utilisateur peut obtenir les informations nécessaires pour la documentation et le post-traitement. Par exemple, afin de comprendre les contraintes de bruit pour une mesure, il est important d'avoir les informations relatives aux réglages de l'échelle verticale, du décalage, de la position et du couplage.

Un autre exemple implique l'analyse de l'intervalle de répétition d'impulsion (PRI) dans les applications radar. Lorsqu'une impulsion radar par acquisition est capturée en utilisant la mémoire segmentée1), la liste des horodatages d'une capture segmentée donne les événements de déclenchement dans le temps, qui ne sont pas disponibles autrement (S[’Timestamps’]). La différence de temps pour les événements de déclenchement consécutifs fournit la séquence PRI.

Les deux diagrammes suivants illustrent des données de forme d'onde chargées sur l'oscilloscope et dans un environnement Python. Trois signaux sont affichés :

  • Signal sinusoïdal 1 MHz avec décalage
  • Chirp radar à alternance haut / bas
  • Bruit – aucun signal connecté

L'avantage de la fonction RTxReadBin est qu'elle peut gérer des fichiers de formes d'ondes avec plusieurs acquisitions (historique). Lorsque le même fichier est chargé, l'oscilloscope reconnaît uniquement la dernière acquisition et affiche un historique vide.

1)Voir “Démodulation des impulsions RF radar avec un oscilloscope” sur le site internet Rohde & Schwarz :

Conclusion

Les R&S®RTP, R&S®RTO et R&S®RTE sont des oscilloscopes puissants. Le module Python (RTxReadBin) étend les fonctionnalités de l'instrument en vous permettant d'accéder aux formes d'ondes stockées. Pour les applications impliquant le post-traitement, la documentation ou des procédures d'analyse subséquentes telles que les comparaisons de formes d'ondes, l'ensemble des données de la forme d'onde est dorénavant disponible au sein d'un environnement puissant Python.

Trois formes d'ondes différentes sans historique chargé comme formes d'ondes de référence.
Trois formes d'ondes différentes sans historique chargé comme formes d'ondes de référence.
Open Lightbox
Trois formes d'ondes différentes avec historique .
Trois formes d'ondes différentes avec historique .
Open Lightbox

Solutions associées