Forum: Analoge Elektronik und Schaltungstechnik Übertragungsfunktion schlechte Kondition


von Paul M. (Gast)


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!

von Dieter H. (kyblord)


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?

von Nautilus (Gast)


Lesenswert?

Arbeitet man bei der Laplace-Transformierten nicht im Bereich der 
Komplexen Zahlen?

von Paul M. (Gast)


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.

von Lutz V. (lvw)


Lesenswert?

Paul M. - was ist mit den Vorzeichen im Nenner?
Die Pole liegen in der rechten Halbebene (Instabilität).

von Paul M. (Gast)


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?

von Lutz V. (lvw)


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.

: Bearbeitet durch User
von Paul M. (Gast)


Lesenswert?

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

statt:

Warum ist das eigentlich mit + statt mit -?

von Lutz V. (lvw)


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.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.