Pagina 1 di 1

Octave/Matlab - graficare data da file CVS

MessaggioInviato: 27 giu 2013, 15:30
da simo85
Un saluto a tutti O_/

Sto cercando di stampare, tramite Octave, il contenuto di un file CVS ottenuto tramite l'oscilloscopio digitale.

Ho stampato la schermata in formato immagine:

ADS00019.jpg
ADS00019.jpg (65.89 KiB) Osservato 6454 volte


Ma per curiosità mi piacerebbe capire come devo trattare il file CVS e stampare il contenuto con la funzione plot ed ottenere il grafico quasi uguale all'immagine.

Ho preso spunto da questo link, così ho fatto una prima prova (veloce) con il seguente codice:

Codice: Seleziona tutto
% Octave read CSV and plot data
data = dlmread("/home/simo/Desktop/ADS001CV.CSV", ",");

t = data(:,1);
x = data(:,2);
y = data(:,3);
z = data(:,4);

plot(t, x,";x ---;", t, y,";y ---;", t, z,";z ---;")
print ("s.jpg", "-djpg", '-S400, 300')


Ovviamente non funziona, l'output non è quello desiderato. :roll:
Allego il file zippato perché sono 4100 linee.
ADS001CV.CSV.zip
(13.78 KiB) Scaricato 202 volte

Però racchiudo tra i tag code un primo spezzone.

Codice: Seleziona tutto
Record Length,4096,,Source,CH1
Sample Interval,0.0000073242181,,Second,volt
Vertical Units,CH1:V,,-0.020480000000,3.04000
Vertical Scale,CH1:1.00,,-0.020469998438,3.04000
Vertical Offset,CH1:-1.20000,,-0.020459998438,3.04000
Horizontal Units,s,,-0.020450000000,3.12000
Horizontal Scale,0.0025000000,,-0.020439998438,3.12000
Model Number,ADS1102C,,-0.020429998438,3.12000
Serial Number,ADS00002112635,,-0.020419998438,3.04000
Software Version,2.07.02.10R1,,-0.020410000000,3.12000
,,,-0.020399998438,3.04000
,,,-0.020389998438,3.08000
,,,-0.020380000000,3.12000
,,,-0.020369998438,3.04000


Effettivamente ancora non so come trattare o manipolare il file CSV.. Dovró togliere/eliminare le prime 10 righe di intestazione? Ho provato ma nulla. Dovrò eliminare le prime tre virgolette ad ogni riga a partire dalla linea nº 11..

:?:

Spero che qualcuno mi possa dare un aiuto e farmi capire..

Grazie in anticipo.
O_/

Simo.

Re: Octave/Matlab - graficare data da file CVS

MessaggioInviato: 27 giu 2013, 16:39
da paologerv
a questo quesito posso risponderti: devi togliere sia tutti i caratteri alfabetici sia le 3 virgole prima dei numeri. Dovresti vedere se quando esporti i dati dall'oscilloscopio, hai la possibilità di salvare i dati in .txt al posto di .csv. Poi di questo file ne cambi l'estensione in .dat e con matlab puoi utilizzare il comando ad es.

Codice: Seleziona tutto
signal= load ('xxxx.dat');


tipo come ho fatto io nel mio post all'inizio :ok:

N.B. questo comando vale se il file è contenuto nella cartella MATLAB, altrimenti sarà ad esempio

Codice: Seleziona tutto
signal= load ('D:\blabla\xxxx.dat');

Re: Octave/Matlab - graficare data da file CVS

MessaggioInviato: 27 giu 2013, 16:42
da xyz
Devi eliminare header iniziale, confonde i dati. Può essere fatto direttamente dallo script basta selezionare la prima riga e la prima colonna valida (l'indici partono da zero).

I dati forniti non contengono FFT, bisogna calcolarla. Octave (e Matlab) ha la funziona "fft" per farlo. Se vuoi FFT al centro del grafico basta spostare i campioni con la funzione "fftshift" (ne codice seguente è commentata).

Non stampare immagini generate al computer nel formato JPEG, è un formato a perdita nato per immagini fotorealistiche. Un grafico cartesiano non è fotorealistico quindo gli algoritmi di compressione a perdita lo rovinano parecchio. Usa un altro formato con una compressione non a perdita come il PNG o uno vettoriale come SVG o EPS.

In definitiva il codice riveduto e corretto è questo:

Codice: Seleziona tutto
close all;

first_row=10;
first_column=3;

data = dlmread("ADS001CV.CSV", ",", first_row, first_column);

t = data(:,1);
y = data(:,2);

Y = fft(y);
%Y = fftshift(fft(y));

newplot();

subplot(2,1,1)
plot(t, y, 'g');
xlabel('Time');
ylabel('Amplitude');

subplot(2,1,2)
plot(abs(Y), 'r');
xlabel('Frequency');
ylabel('Magnitude');

print('dump.png', '-dpng');


dump.png
dump.png (9.97 KiB) Osservato 6436 volte


Testato con Octave 3.6.4 sotto Linux.

Re: Octave/Matlab - graficare data da file CVS

MessaggioInviato: 27 giu 2013, 17:57
da simo85
Ciao Foto Utentepaologerv & Foto Utentexyz, grazie mille per le risposte ed i suggerimenti riguardo all'header e caratteri. :-)

xyz ha scritto:I dati forniti non contengono FFT

Ecco, io che pensavo di trovarmi anche i risultati della DFT..

xyz ha scritto:Non stampare immagini generate al computer nel formato JPEG, è un formato a perdita (...)

Interessante, non lo sapevo. Cercerò informazioni a riguardo.. Se hai qualche link utile me lo leggo volentieri.

Foto Utentexyz grazie per il codice. Chiarissimo. :ok:

xyz ha scritto:Testato con Octave 3.6.4 sotto Linux.

Ma dai, non mi dire :!: :mrgreen: