Indice |
Premessa
Avendo la necessità di utilizzare in LTspice il segnale campionato da un oscilloscopio digitale Rigol della serie DS1000 e salvati in formato csv, dopo aver googlato un po' senza successo ho deciso di scrivere un programma adatto allo scopo.
Il programma è stato scritto in C con l'ausilio dell'IDE CodeLite ed è visibile a questo link: RigolCsvToWav source file
Archivi contenenti l'eseguibile compilato su Win sono scaricabili da questi link:
Descrizione
Come parametri indispensabili necessita del file csv in cui sono memorizzati i campionamenti ed il sample_rate con cui i campionamenti sono stati effettuati. Un elenco completo dei parametri accettati si può visualizzare con:
RigolCsvToWav -?
Il file csv
Il file generato dall' oscilloscopio ha un' intestazione di due righe (di default queste vengono ignorate dal programma). Le righe successive sono formate da una colonna per ciascun canale che è stato salvato, e contengono dei valori in virgola mobile. Ogni colonna è terminata con una ',' compresa l'ultima. Qualunque file csv che segua queste semplici specifiche può essere usato, quindi anche uno generato da un normale editor di testo, da fogli di calcolo come Excel o Calc
Il file wav
Viene generato un file wav in formato PCM 16, contenente tanti canali quanti erano quelli memorizzati nel file csv. I dati memorizzati nel file wav, sono normalizzati quindi variano tra i valori -1 e +1. La forma d'onda risultante nel file audio può essere visualizzata anche da software come Audacity
Esempio 1
File csv di esempio: in.csv
CH1,CH2,Start,Increment, Volt,Volt,0.0000,2.0E-05 0.000,0.000, 0.100,-0.100, 0.200,-0.200, 0.300,-0.300, 0.400,-0.400, 0.500,-0.500, 0.400,-0.400, 0.300,-0.300, 0.200,-0.200, 0.100,-0.100, 0.000,0.000, -0.100,0.100, -0.200,0.200, -0.300,0.300, -0.400,0.400, -0.500,0.500, -0.400,0.400, -0.300,0.300, -0.200,0.200, -0.100,0.100, 0.000,0.000,
RigolCsvToWav -v -sr 20k -i in.csv -o out_20k.wav
Leggo il file per calcolare i valori da normalizzare. Statistiche: Canele 0: Valore min: -0.500000 Valore max: 0.500000 Valore mediano: 0.000000 Valore ampezza: 0.500000 Numero dati: 21 Canele 1: Valore min: -0.500000 Valore max: 0.500000 Valore mediano: 0.000000 Valore ampezza: 0.500000 Numero dati: 21 Scrivo file wav. Ho finito.
Sono 21 righe, campionate a 20 kHz quindi il segnale presente nel file wav deve durare 1 millisecondo. Aprendo il file wav con Audacity infatti il risultato è questo:
In LT Spice viene così:
Esempio 2
File csv generato dall' oscilloscopio: 6000.csv
E' un file contenente 3 milioni di campionamenti effettuati a 125 milioni di samples al secondo quindi equivalente ad un periodo di:
CH1,CH2,Start,Increment, Volt,Volt,-1.19400e-02,2.00000e-05 8.156250e-02,4.421875e-01, 8.156250e-02,5.306250e-01, 8.156250e-02,5.306250e-01, 5.437500e-02,5.306250e-01, 1.087500e-01,5.306250e-01, 1.359375e-01,4.421875e-01, 1.087500e-01,4.421875e-01, . . .
$ ./RigolCsvToWav.exe -i 6000.csv -sr 125M -v -o 6000_125M.wav Leggo il file per calcolare i valori da normalizzare. Statistiche: Canele 0: Valore min: -0.788437 Valore max: 1.114687 Valore mediano: 0.163125 Valore ampezza: 0.951562 Numero dati: 3000000 Canele 1: Valore min: 0.088438 Valore max: 5.394688 Valore mediano: 2.741563 Valore ampezza: 2.653125 Numero dati: 3000000 Scrivo file wav. Ho finito.
Risultato in Audacity:
Che è possibile utilizzare con LT Spice:
Note:
Versione del documento: 1.4