Übertragungsfunktion schlechte Kondition

Gast #7027835
Lesenswert?

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:
1
#!/usr/bin/env python3
2
# -*- coding: utf-8 -*-
3

4
from scipy import signal
5
import numpy as np
6
import matplotlib.pyplot as plt
7

8
H = signal.lti([9.26e13, 9.26e18], [1.0, -3.01e07, -4.49e12, -4.21e17])
9
print(H)
10
print(H.zeros)
11
print(H.poles)
12

13
t_vect = np.linspace(0.0, 500.0e-6, 10000)
14
u_vect = []
15
for t in t_vect:
16
  if t < 50.0e-6:
17
    u_vect.append(120.0e-3)
18
  else:
19
    u_vect.append(0.0)
20
u_vect = np.array(u_vect)
21

22
t_out_vect, y_vect, x_vect = H.output(u_vect, t_vect, 0.0)
23
w, mag, phase = H.bode(2.0*np.pi*np.logspace(0, 7, 1000))
24

25
plt.figure()
26
plt.plot(1.0e6*t_vect, u_vect)
27
plt.plot(1.0e6*t_vect, y_vect)
28
plt.xlabel('time [us]')
29
plt.ylabel('voltage [V]')
30
plt.grid()
31

32
plt.figure()
33
plt.semilogx(w/(2.0*np.pi), mag)
34
plt.xlabel('f [Hz]')
35
plt.ylabel('mag. [dB]')
36
plt.grid()
37
plt.figure()
38
plt.semilogx(w/(2.0*np.pi), phase)
39
plt.xlabel('f [Hz]')
40
plt.ylabel('phase [deg]')
41
plt.grid()
42

43
plt.show()

Leider kommt dabei jedoch der Fehler
1
 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!
#7028022
Lesenswert?

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?
Gast #7029537
Lesenswert?

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.
Gast #7030779
Lesenswert?

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?
#7031141
Lesenswert?

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.
Gast #7043704
Lesenswert?

Fehler gefunden. Ich habe folgendes bei der Herleitung der 
Übertragungsfunktion falsch gemacht:

statt:

Warum ist das eigentlich mit + statt mit -?
#7044758
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren