Hallo,
ich habe die folgende Übertragungsfunktion eines invertierenden
Verstärkers:
In LTSpice kann man ja so eine Übertragungsfunktion im Laplace-Bereich
simulieren, siehe Anhang, das hat ganz gut geklappt.
Nun habe ich es aber mal in Python versucht:
LinAlgWarning: Ill-conditioned matrix (rcond=5.75015e-19): result may not be accurate.
(Das Bode-Diagramm klappt in Python noch ganz gut, der Fehler kommt bei
der Berechnung der Antwort im Zeitbereich. Ich verstehe das so, dass
wohl irgendeine Kondition einer Matrix schlecht ist.
Was kann man da machen und vor allem warum geht es dann in LTSpice?
Danke für Tipps!
Das Problem entsteht vermutlich bei der Berechnung der Nullstellen der
Polynome. Bei so großen Koeffizienten werden die Nullstellen sehr
sensitiv gegenüber Rundungsfehlern. Abhilfe schafft, wenn man die
Übertragungsfunktion möglichst faktorisiert angibt. Woher stammt die
Übertragungsfunktion?
Nautilus schrieb:> Arbeitet man bei der Laplace-Transformierten nicht im Bereich der> Komplexen Zahlen?
Ja klar, aber es ist ja auch möglich, numerisch die Sprungantwort zu
berechnen, wenn die Übertragungsfunktion im Laplace-Bereich vorliegt.
Genau das versuche ich hier zu machen.
Dieter H. schrieb:> Das Problem entsteht vermutlich bei der Berechnung der Nullstellen der> Polynome.
Danke für den Hinweis, ich bestimme dann mal Pol- und Nullstellen und
versuche es in dieser Form nochmals.
Lutz V. schrieb:> Paul M. - was ist mit den Vorzeichen im Nenner?> Die Pole liegen in der rechten Halbebene (Instabilität).
Oha, Danke, stimmt, damit scheint es zusammenzuhängen:
Die Übertragungsfunktion hat eine Nullstelle bei s = -100000 und drei
Polstellen: s = 30248895.28, s = (-74447.64+91517.28j) und s =
(-74447.64-91517.28j).
Habe die Polstelle mit positiven Realteil testweise einfach mal negiert
zu -30248895.28 und nun läuft es in Python fehlerfrei durch (kommt
natürlich ein anderer Verlauf raus, aber es kommt keine Fehlermeldung
mehr).
In LTSpice geht die originale Übertragungsfunktion aber ganz gut, da ist
auch nichts instabil....
Woran kann das liegen?
Paul M. schrieb:> Oha, Danke, stimmt, damit scheint es zusammenzuhängen:> >> In LTSpice geht die originale Übertragungsfunktion aber ganz gut, da ist> auch nichts instabil....>> Woran kann das liegen?
Vermutlich sprichst Du von der ac-Analyse?
Wenn man nur die Betragsfunktion solcher Kleinsignal-Analysen
betrachtet, kann kein Simulationsprogramm die Instabilität aufdecken.
Das liegt daran, dass es keinen Eingangs-Einschwingvorgang gibt
(Versorgung wird als "ewig" existent angenommen) und auch keinerlei
externe Störungen einwirken.
Damit errechnet das Programm einen festen Arbeitspunkt - und eine
Kleinsignal-Analyse ist möglich mit einem vernünftig aussehenden
Ergebnis, dass der Tangente an die Übertragungsfunktion entspricht.
Das Ergebnis ist dann nicht "falsch" - nur eben unter realistischen
Randbedingungen (Rauschen, Störungen, Einschalt-Transienten) irrelevant.
Auch wenn Du "von Hand" rechnen würdest, gibt es ein Ergebnis (wie z.B.
beim OPV, der irrtümlich eine pos. Rückkopplung erhalten hat).
Allerdings zeigt der Phasengang ein "unnormales" Verhalten - er hat
nämlich durchgehend eine ansteigende Tendenz, was bei einem stabilen
System nicht der Fall sein kann.
Daran kann man also die Instabilität auch bei einer ac-Analyse erkennen
- und natürlich dann, wenn man eine Tran-Analyse macht mit möglichst bei
t=0 eingeschalteter Versorgungsspannung.
Paul M. schrieb:> Fehler gefunden. Ich habe folgendes bei der Herleitung der> Übertragungsfunktion falsch gemacht:>>
>> statt:>>
>> Warum ist das eigentlich mit + statt mit -?
Die Nullstellen des Nenners - also die Pole der Gesamtfunktion - müssen
alle einen negativen Realteil haben, damit das zur Funktion gehörende
System stabil arbeitet.
Hintergrund ist die Tatsache, dass nur mit negativen Realteil des Pols
auch die Lösungen der zugehörigen DGL im Zeitbereich eine mit der Zeit
abklingende Tendenz haben, weil der Realteil der Polstelle von
sp=sigma+jw im Exponenten der DGL-Lösung dann als (-sigma*t) erscheint.