Lavorare con i dati delle forme d'onda acquisite in Python

Gli oscilloscopi di Rohde & Schwarz utilizzano tecnologie all'avanguardia per ottenere risultati affidabili e riproducibili.
Gli oscilloscopi di Rohde & Schwarz utilizzano tecnologie all'avanguardia per ottenere risultati affidabili e riproducibili.

Attività da eseguire

Come tecnici addetti allo sviluppo o al collaudo, utilizzate un oscilloscopio R&S®RTP, R&S®RTO o R&S®RTE nel vostro lavoro quotidiano. Memorizzate le forme d'onda acquisite per l'archiviazione e la documentazione o per effettuare ulteriori elaborazioni, che vanno oltre i limiti funzionali prestazionali dell'oscilloscopio. L'utilizzo del formato ASCII (suffisso csv) per memorizzare le forme d'onda può potenzialmente superare la capacità di memoria disponibile per l'archiviazione. Questo formato richiede anche una quantità significativa di tempo per il trasferimento e l'elaborazione. Inoltre, quando si usa il formato ASCII invece del formato binario, alcune informazioni non sono disponibili.

Soluzione Rohde & Schwarz

Gli oscilloscopi da laboratorio e ad alte prestazioni di Rohde & Schwarz (R&S®RTP, R&S®RTO, R&S®RTE) condividono tutti lo stesso formato binario per la memorizzazione delle forme d'onda. Il pacchetto Python ausiliario ad alte prestazioni RTxReadBin permette di gestire file binari e ottenere tutti i dettagli necessari per la vostra documentazione.

Applicazione

Per trasferire la forma d'onda dal vostro strumento al vostro ambiente Python, dovete preparare l'IDE Python:

  • Scaricate il pacchetto dal sito Web di Rohde & Schwarz
  • Installate il pacchetto nel vostro sistema
  • Acquisite una forma d'onda sull'oscilloscopio e memorizzatela come file binario

Verranno creati due file: un file di descrizione della forma d'onda (*.bin) e un file di dati della forma d'onda (*.wfm.bin). I dati della forma d'onda (caricati tramite la funzione RTxReadBin) possono contenere quanto segue:

  • Canali analogici
  • Canali digitali (MSO)
  • Bus paralleli (acquisiti tramite MSO)
  • Canali analogici (tramite ZVC)
  • Forme d'onda matematiche, compresi gli spettri
  • Tracce (forme d'onda basate su misure automatiche)

Per tutte queste fonti di segnale sono supportate acquisizioni multiple e canali multipli, se del caso.

Dopo aver acquisito i dati con l'oscilloscopio di Rohde & Schwarz, potete caricarli nel vostro ambiente Python per effettuare ulteriori elaborazioni. Per maggiore comodità, tuttavia, potete anche lasciare la forma d'onda dove si trova e abilitare l'accesso di rete ai dati montando una cartella di condivisione CIFS sul vostro computer. Eseguire i seguenti passaggi preparatori sull'oscilloscopio:

  • Procedere verso la condivisione avanzata
  • Selezionare il profilo pubblico e modificare i seguenti parametri:
    - Attiva il rilevamento della rete
    - Attiva la condivisione di file e stampanti
    - Attiva l'accesso in scrittura alle cartelle pubbliche

Una volta completati questi passaggi, potete connettervi all'oscilloscopio utilizzando il seguente percorso di file nel vostro script Python:

r’\\<nome dell'oscilloscopio o indirizzo IP\Users\Public\Documents\Rohde-Schwarz\RTx\RefWaveforms\<filename>.bin’

Si noti che, poiché Python interpreta la stringa, la sequenza di caratteri \U sarà interpretata e porterà ad un errore. Per evitare che ciò accada è sufficiente aggiungere una "r" (per raw) davanti alla stringa. Può succedere che vi vengano chieste le credenziali. Assicuratevi di non usare l'autenticazione con il server di dominio locale di Windows. Per farlo, fate precedere l'account locale instrument da una barra rovesciata:

account: \instrument
password: <pw del vostro oscilloscopio>

In alternativa, potete anche scaricare (trascinare e rilasciare) la forma d'onda dall'oscilloscopio utilizzando Windows Explorer.

Una volta che questi requisiti preliminari sono soddisfatti, potete caricare il modulo tramite l'importazione di Python e invocare RTxReadBin. Il modo più semplice per farlo è fornire il nome del file. La funzione restituisce tre parametri: i dati della forma d'onda verticale (y), i dati dell'asse orizzontale (x) e il parametro di acquisizione (S).

> da RTxReadBin import RTxReadBin
> import numpy
> y, x, S = RTxReadBin(’<wfm filename>.bin’)
> y.shape

I dati verticali (y) sono un array NumPy con una forma di [<record Length>, <# of acquisitions>, <# of active channels>]. Per una forma d'onda MSO, il tipo di dati è solo booleano, e per il bus parallelo è un numero intero senza segno (uint16), impacchettato con l'indice MSO più alto (MSB). Per esempio, supponiamo che le linee MSO D12, D7, D2 e D0 siano collegate e configurate come un bus parallelo. Allora, la parola di dati registrata sarà memorizzata come D12 ∙ 23 + D7 ∙ 22 + D2 ∙ 21 + D0 ∙ 20. Per tutti gli altri tipi di dati di forme d'onda, si utilizza float32. È importante menzionare che l'oscilloscopio utilizza un modo diverso di contare la cronologia delle acquisizioni rispetto a Python. L'oscilloscopio inizia con (1 - <# of acquisitions>) e conta fino a 0 come ultima acquisizione. In Python, il conteggio è spostato, inizia da 0 e termina con (<# of acquisitions> - 1) come ultima acquisizione.

I dati orizzontali (x) sono un array NumPy float a 64 bit con una forma di [<record length>]. Se i dati sono memorizzati in formato interlacciato x/y, l'array viene esteso per coprire tutte le acquisizioni [<record length>, <# of acquisitions>]. Se viene memorizzato uno spettro, l'asse x conterrà l'asse delle frequenze dello spettro.

La lunghezza del record, il numero di acquisizioni e i canali possono essere facilmente recuperati accedendo alla proprietà shape del valore di ritorno y.

Se non tutti i parametri sono richiesti, essi possono essere ignorati utilizzando le tecniche standard di Python, ad esempio aggiungendo uno specificatore elenco (vedi esempio sotto) o usando un underscore come parametro posizionale di ritorno.

> y, x =
RTxReadBin(’<wfm filename>.bin’)[0,2]

Ci sono due ulteriori parametri (opzionali) che possono essere specificati per ridurre la quantità di memoria allocata. Il primo parametro specifica le acquisizioni di interesse. Il secondo parametro specifica l'intervallo, il tempo o la frequenza di interesse. Entrambi richiedono un elenco con una lunghezza di due elementi. Si noti che il parametro di acquisizione segue la notazione Python di un elenco. Nell'esempio dato, vengono restituite due acquisizioni (2,3).

> y, x, S = RTxReadBin('<wfm filename>.bin',
acquisizioni = [2,4],
xInterval = [-2e-7,3e-7])

Il restante parametro S fornisce tutti i dettagli che sono disponibili nel file di intestazione. È implementato come un dizionario Python. Non tutti questi parametri sono importanti per l'utente. Alcuni di essi, tuttavia, possono essere utili per la documentazione e l'analisi. Poiché i dati della forma d'onda nel vettore y sono solo un float, l'utente non può determinare le impostazioni originali partendo da questi dati. Esaminando i parametri nell'intestazione, tuttavia, l'utente può ottenere le informazioni necessarie per la documentazione e la post-elaborazione. Ad esempio, per capire i vincoli di rumore per una misura, è importante avere informazioni sulle impostazioni della scala verticale, dell'offset, della posizione e dell'accoppiamento.

Un altro esempio riguarda l'analisi dell'intervallo di ripetizione degli impulsi (PRI) nelle applicazioni radar. Quando un impulso radar per acquisizione viene catturato utilizzando la memoria segmentata1), l'elenco delle marcature temporali di un'acquisizione segmentata fornisce gli eventi di trigger nel tempo, che non sono disponibili altrimenti (S[’Timestamps’]). La differenza di tempo per eventi di trigger consecutivi fornisce la sequenza PRI.

I prossimi due grafici mostrano i dati della forma d'onda caricati sull'oscilloscopio e in un ambiente Python. Vengono visualizzati tre segnali:

  • Segnale sinusoidale da 1 MHz con offset
  • Chirp radar alternato su/giù
  • Rumore: nessun segnale collegato

Il vantaggio della funzione RTxReadBin è dato dal fatto che essa può gestire file di forme d'onda con acquisizioni multiple (cronologia). Quando viene caricato lo stesso file, l'oscilloscopio riconosce solo l'ultima acquisizione e visualizza una cronologia vuota.

1)Vedere "Demodulare gli impulsi RF del radar con un oscilloscopio" sul sito Web di Rohde & Schwarz:

Riassunto

Gli strumenti R&S®RTP, R&S®RTO e R&S®RTE sono potenti oscilloscopi. Il modulo Python (RTxReadBin) estende la funzionalità degli strumenti permettendovi di accedere alle forme d'onda memorizzate. Per le applicazioni che coinvolgono la post-elaborazione, la documentazione o le successive procedure di analisi come il confronto delle forme d'onda, tutti i dati delle forme d'onda sono ora disponibili all'interno di un potente ambiente Python.

Tre diverse forme d'onda senza cronologia caricate come forme d'onda di riferimento.
Tre diverse forme d'onda senza cronologia caricate come forme d'onda di riferimento.
Ingrandisci immagine
Tre diverse forme d'onda con cronologia.
Tre diverse forme d'onda con cronologia.
Ingrandisci immagine

Soluzioni correlate