Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

8
voti

Convertire file .csv in .wav

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:

RigolCsvToWav-32-1.4.0.zip

RigolCsvToWav-64-1.4.0.zip

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:

\frac{3 \times 10^6}{125 \times 10^6}=24\ \text{ms}

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

6

Commenti e note

Inserisci un commento

di ,

Dall' Open Source si prende, all' Open Source si dà :)

Rispondi

di ,

Che dire... ottimo lavoro! Rendere inoltre disponibile opensource questo programma ti premia moralmente. A questo punto hai implementato una comoda utility che puo', perchè no, aiutare il tuo prossimo. Hai il mio apprezzamento!

Rispondi

di ,

Ho finito la versione 1.4. Ora è un programma stand alone e non necessita più della dll libsndfile. Alla fine generare il file wav era abbastanza semplice, ma si fa una cosa per volta :) Grazie ancora per il suggerimento Russell.

Rispondi

di ,

Notevole!

Rispondi

di ,

Grazie Russell, in effetti avrei potuto copiare dal codice della dll visto che si tratta di software open-source, ma sai com'è, un pò la pigrizia, un pò il tempo che è poco, non sto ad inventare l'acqua calda ogni volta :)

Rispondi

di ,

Bel lavoro, complimenti. Ti segnalo comunque che il formato WAV non è affatto molto complesso, quindi se in futuro ti volessi svincolare dalla libreria dll e creare un semplice applicativo, puro, magari console (e quindi facilmente anche multipiattaforma) che converta il CSV in WAVE potresti farlo senza troppa fatica. Te lo dico per esperienza ;)

Rispondi

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.