Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Octave/Matlab - graficare data da file CVS

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

0
voti

[1] Octave/Matlab - graficare data da file CVS

Messaggioda Foto Utentesimo85 » 27 giu 2013, 15:30

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 6447 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.
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

1
voti

[2] Re: Octave/Matlab - graficare data da file CVS

Messaggioda Foto Utentepaologerv » 27 giu 2013, 16:39

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');
Avatar utente
Foto Utentepaologerv
15 2
 
Messaggi: 18
Iscritto il: 22 gen 2013, 18:39

3
voti

[3] Re: Octave/Matlab - graficare data da file CVS

Messaggioda Foto Utentexyz » 27 giu 2013, 16:42

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 6429 volte


Testato con Octave 3.6.4 sotto Linux.
Avatar utente
Foto Utentexyz
6.864 2 4 6
G.Master EY
G.Master EY
 
Messaggi: 1778
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[4] Re: Octave/Matlab - graficare data da file CVS

Messaggioda Foto Utentesimo85 » 27 giu 2013, 17:57

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:
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59


Torna a Programmi applicativi: simulatori, CAD ed altro

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti