Pubblicato da: Pedro | gennaio 8, 2008

Grafici tipografici con ngspice

Quando si fanno delle simulazioni elettroniche si è spesso interessati ad esportare il proprio lavoro sotto forma di grafico. Ngspice, l’ultima versione del noto simulatore sviluppato a Berkeley è un po’ carente da questo punto di vista dato che permette l’esportazione di grafici nel formato del vetusto xgraph. Conoscendo le potenzialità di gnuplot, possiamo aspirare a risultati ben migliori!

gnuplot-graph

Dunque, per visualizzare un grafico con ngspice siamo abituati ad utilizzare il comando “plot”. Per esportare i dati invece basterà utilizzare il comando “xgraph file nodi/correnti” dove file è il file d’uscita che conterrà i dati che ci servono. Questi dati sono intabellati in modo non capibile da gnuplot e quindi dovremo fare una conversione in modo da incasellare in colonna le nostre tensioni/correnti.

Questa conversione l’ho realizzata con uno script php da avviare da riga di comando (si, php può anche questo). Se non doveste avere l’interprete php lo potete installare con un “sudo apt-get install php5-cli”. Ho scelto php dato che non c’è niente di più comodo (a me noto) per lavorare con stringhe e file. Se qualche buon’anima lo volesse scrivere in python, si potrebbe seriamente pensare ad una bella gui che automatizzi il tutto. Ce ne sarebbe realmente bisogno!

Esequite questo file passandogli come parametro il file creato da ngspice:

<?
if ($argc != 2 || in_array($argv[1], array(‘–help’, ‘-help’, ‘-h’, ‘-?’))) {
?>

XGRAPH2GNUPLOT

This is a command line PHP that convert a xgraph
file to a batch file ready for gnuplot import
A file .dat will be created.

Usage:
<?php echo $argv[0]; ?> <option>

<option> the filename of the xgraph file

With the –help, -help, -h, or -? options,
you can get this help.

This is Free Software released under the GNU GPL 3.0 License
Stefano Pedretti
stefano.pedretti@gmail.com

<?php
}
else
{
$argv[1];

$file1 = $argv[1];
$file2 = $file1.”.out”;
$ho = fopen($file1,”r”);

if (file_exists($file2)) unlink($file2);

touch ($file2);
$hw = fopen($file2,”r+”);
$hr = fopen($file2,”r”);

$arm = 0;

while (!feof ($ho)) {
$buffer = fgets($ho, 8096);
if ($buffer[0] == ” “)
{
if ($arm >= 0) $arm = 1;
else
{
$tmp = strtok($buffer,” “) ;
$tmp = strtok(” “) ;
$buffer = $tmp;
}

$in = fgets($hr,8096).” “.$buffer;

$in = str_replace(“\n”,””,$in);
fputs( $hw, $in.”\n” );

}
else
{
if ($arm) $arm = -1;

rewind($hw);
rewind($hr);
}
}

fclose ($ho);
fclose ($hr);
fclose ($hw);
echo “File “.$file2.” created\n”;
}
?>

Per avviarlo sarà sufficiente usare il comando “php nomefile.php”.
Ora avete ottenuto un bellissimo file con .out che dovrebbe avere i file incasellati nel formato che piace a gnuplot. Ora, potreste avviare direttamente gnuplot e fare i vostri grafici, ma dato che so che ne dovrete fare molti per la vostra relazione tecnica, credo sia il caso farsi un bello script:

set grid
set title “Caratteristica d’uscita PMOS W/L ~ 55 Vsg = 700mV”
set xlabel “Vsd (V)”
set ylabel “Id (A)”
set yrange [0:0.00018]
set xtics 0.1
#set x2tics 0.1
#set ytics 0.0001
#set y2tics 0.001
plot ‘out’ using 1:2 with lines t “L = 0.18um”, ‘out’ using 1:3 with lines t “L = 0.36um”, ‘out’ using 1:4 with lines t “L = 0.72um”, ‘out’ using 1:5 with lines t “L = 1.44um”
set terminal postscript eps
set out ‘a.eps’
replot
set term pop

Modificatelo a piacere, avviate questo script con il comando

gnuplot scrit.gp

Avrete così ottenuto un bellissimo file “a.eps” da importare a piacimento nelle vostre relazioni LaTeX.


Responses

  1. Grazie per aver definito ngspice la continuazione dello Spice di Berkeley, è un onore (per me, forse per Berkeley un poco meno🙂 ). Bellissima iniziativa lo script, in effetti sarebbe ora di levare di torno xgraph (mi sa che lo faccio nella prox release). Magari, se vuoi, possiamo provare a integrare lo script nel sorgente di ngspice. Che ne dici ?

    Paolo

  2. Ciao Paolo,
    inanzitutto grazie al vostro lavoro con ngspice!
    Sono d’accordo con te riguardo a XGraph, è sicuramente da considerare obsoleto soprattutto se rapportato a gnuplot.
    Ammetto che l’idea di scrivere una patch che esportasse direttamente i dati in un file per gnuplot mi era passata per la mente anche se poi ho optato per un più rapido script.

    Verrei molto bene l’aggiunta di una funzione gnuplot pari a quello xgraph che esporti un file pronto per l’elaborazione batch di gnuplot, con intestazione e nomi delle variabili (magari semilogaritmica).

    Hai un entusiasta beta tester!


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Categorie

%d blogger cliccano Mi Piace per questo: