Ich habe folgende Schaltung. Ich versuche, einen Weg zu finden, alle Plots zu einem einzigen zu kombinieren (wie die .step-Karte von ltspice). Leider konnte ich das Beispiel aus dem Handbuch von ngspice nicht zum Laufen bringen.
Ich wäre dankbar, wenn mir jemand helfen könnte, die Logik hinter dem, was ich zu erreichen versuche, zu verstehen. Ich denke, ich muss erzwingen, dass meine Vektoren in einem einzigen Diagramm gespeichert werden, aber bei meinen Recherchen habe ich mehr als eine Möglichkeit gefunden, dies zu tun (ich kann die Logik dieser Beispiele einfach nicht verstehen, daher konnte ich sie nicht für meine Schaltung anpassen).
Ich verwende ngspice35
.TITLE AC test
.INCLUDE ../../lib/lm393.sub
x1 in 0 1 0 out lm393
c1 in 0 100n
r1 1 in 100k
c2 out 0 100n
r2 1 out 4.7k
vsup 1 0 DC 5
vin in 0 AC 1
.CONTROL
*foreach x 1n 10n 50n 100n
* alter c1 = $x
* ac dec 100 1 100k
*end
alter c2 = 10n
ac dec 100 1 1Meg
alter c2 = 100n
ac dec 100 1 1Meg
alter c2 = 1u
ac dec 100 1 1Meg
alter c2 = 10u
ac dec 100 1 1Meg
plot db(ac1.out) db(ac2.out) db(ac3.out) db(ac4.out)
.ENDC
Ich habe einen Weg gefunden, mein Problem zu lösen
set curplot = new *We create a new plot to store our vectors
set acplot = $curplot *We "store" our plot in a variable for further use
foreach x 1n 10n 50n 100n *Loop through our desired value
alter c2 = $x
ac dec 100 1 1Meg
foreach y 1k 10k 50k 100k *Loop through our desired value
alter r2 = $y
ac dec 100 1 1Meg
set aux = $curplot *Each analysis will create its own plot
*We need to remember every analysis each time to retrieve our data
set curplot = $acplot *Now we set the plot we want to store data into
*In our case the plot created previously
let 'db out c2: $x r2: $y' *Using let we will create a new vector with a user defined name
+ = db({$aux}.out) *Now we use the use the plot "stored" in aux to get our data
*The + sign is used the instruction continues on another line, not to append
*The {} is used to "delimit" the variable to $aux, without {} it would be seen as $aux.out
end
end
set curplot = $acplot *Set current plot as the plot generated by us
plot all vs ac1.frequency *User created plot are of type 'unknown' so it will not know to plot frequency as xaxis by default.
*Furthermore we have not stored the frequency vector inside our plot so I used any ac analysis to get the data
Ich hoffe, dass diese Lösung anderen hilft, und wenn jemand andere Lösungen kennt oder eine Verbesserung in Bezug auf meine hat, würde ich es gerne wissen
Wenn Sie gut in Octave oder Python zeichnen können, können Sie das tun, was ich tue, nämlich Ihre Daten aus ngspice speichern und dann die Daten in Octave oder Python einlesen und von dort aus beliebig plotten. Es gibt ein paar Bibliotheken, aber die, die ich zum Lesen der Daten verwende, wurden beide von Werner Hoch geschrieben, sie heißen spice_read.py für Python und spice_readfile.m für Octave (oder Matlab). Ein wenig googeln sollte die neusten Versionen finden. Sie führen Ihre Simulation zuerst aus mit:
ngspice -b -rmy_output_filename myspicefile.cir
und dann laden Sie den "my_output_filename" in Ihr Python- oder Octave-Programm. Wenn Sie nicht viel über Python oder Oktave wissen, wird es eine Lernkurve geben, aber es gibt viele Belohnungen, wenn Sie eine solche wissenschaftliche Programmierumgebung lernen. Über das Plotten hinaus können Sie Ihre Analyse filtern, verarbeiten und automatisieren.
ein besorgter Bürger