Forum: Digitale Signalverarbeitung / DSP / Machine Learning Impulsinvariante Transformation


von Tobias P. (hubertus)


Lesenswert?

Hallo zusammen,

ich habe mich grade ein wenig mit Verfahren beschäftigt, um analoge 
(kontinuierliche) Übertragungsfunktionen zu diskretisieren und in 
z-Übertragungsfunktionen zu überführen.

Es gibt ja da mehrere Verfahren; eins davon ist die Impulsinvariante 
Transformation. Siehe hier:

http://de.wikipedia.org/wiki/Impulsinvarianz-Transformation

Leider findet man auch im englischen Wikipedia dazu nicht viel mehr, als 
das, was da steht. Meines Erachtens ist die Formel aber nicht ganz 
korrekt.
Es wird ja behauptet, dass ich eine Übertragungsfunktion mit N Polen 
gemäss
in Partialbrüche zerlegen kann, und diese werden dann mit
diskretisiert. Das ist sicher richtig, solange mein G(s) nur einfache 
Pole hat, kann ich die Partialbruchzerlegung wie oben angedeutet 
durchführen, was aber, wenn ich mehrfache Pole habe? Hierzu findet man 
nicht viel schlaue Informationen. Weiss es einer?

Ach ja, und woher kommt bei
http://en.wikipedia.org/wiki/Impulse_invariance
der Vorfaktor T ? Wenn ich es in Matlab nachvollziehe, wird klar, dass 
das T dort hin muss, die Frage ist allerdings, wie man drauf kommt, und 
wieso es im deutschen Wikipedia Artikel fehlt :-)

Gruss:
Tobias.

von Dr. (Gast)


Lesenswert?

Hallo!

Über Wikipediaformeln zu reden ist so eine Sache.

Um zu G(z) von einem System G(s) zu gelangen , wird bei der
impulsinvarianten Transformation davon ausgegangen, dass das
zeitkont. System G(s) eingangsseitig mit einem D/C-Converter
beschalten ist und ausgangsseitig mit einem C/D-Converter:

               x(t)        y(t)
x[n] ---> D/C  --->  G(s)  ---> C/D --->  y[n]

Um die Impulsantwort zu erhalten setzt man für x[n] das Kronecker-Delta
an. Die Laplacetransformierte von x(t) wird damit zu X(s)= 
(1-exp(-sT))/s.
X(s) regt das System G(s) an, das zeitkont. Signal y(t) wird dann
wieder mit der Frequenz 1/T abgetastet. y[n] fasst man dann in
Form einer z-Transformierten zusammen (geschlossene Formel für die
Zahlenreihe). Dadurch gelangt T in die Formeln.
Für diesen Schritt verwendet man typischerweise Korrespondenztabellen 
(gleich wie bei allen anderen Transformationen - das macht man einmal 
und dann verwendet man Tabellen bzw. den Computer).

Wenn G(s) mehrere Pole besitzt wendet man die Partialbruchzerlegung an. 
Dann kann man jeden Systemteil einzeln betrachten und am Ende zählt man 
wieder zusammen. Komplexe Pole kann man gleich behandel wie einfache 
reelle Pole. Für Mehrfachpole muss man die entsprechende 
Reihenentwicklung
durchführen (bzw. die richtige Korrespondenz verwenden).

In dem Buch

http://portal.tugraz.at/portal/page/portal/Files/i4430/Dateien/Buecher_Software/DigiReg.pdf

findet man ein paar Beispiele für die z-Transformierte von 
Mehrfachpolen.

Hoffe das hilft.

 Cheers

von Tobias P. (hubertus)


Lesenswert?

Hallo Dr.,

ja, das weiss ich, mit den Wikipediaformeln :-) damit bin ich auch schon 
auf den Holzweg geraten.

Jetzt sehe ich in dem von dir verlinkten Skript aber etwas 
interessantes.
Ich benutze zur Diskretisierung oft
und das schaut doch ziemlch ählich aus wie Formel 8.2 / 8.3 auf Seite 
144, nicht? Andererseits würde ich behaupten, was ich da rechne, ist in 
Matlab mit
1
c2d(..., 'zoh')
zu berechnen, während die Impulsinvariante Transformation sicher mit
1
c2d(..., 'impulse')
berechnet wird.


Der Hintergrund ist, dass ich einen Vergleich beider Methoden machen 
will. Um herauszufinden, was jetzt besser ist für meine Anwendung (kommt 
wahrscheinlich nicht gross darauf an, aber ich soll es halt nachweisen).


Gruss!

von Dr. (Gast)


Lesenswert?

Hallo!

Ja, MATLABs c2d(Hs,T, 'zoh') ist genau die obige Formel. Sie liefert
die zeidiskrete Impulsantwort des Systems  D/C - H(s) - C/D für
die Abtastperiode T.

Die Option 'impulse' in c2d kannte ich bis jetzt gar nicht. Die Option 
macht aber nichts anderes, als die kont. Impulsantwort abzutasten.
Tabelle 3.2 im PDF gibt dazu ein paar Korrespondenzen.
D.h. diese Transformation liefert

  H(z) = Z( L^{-1}(H(s)) )  für ein bestimmtes T

Das ist somit eigentlich schon nicht mehr direkt vergleichbar,
denn hier tastet man einfach eine kont. Impulsantwort ab.

Mit der Option 'zoh' berechnet man die Impulsantwort des Systems
x[k] --> D/C - H(s) - C/D --> y[k]. Das kont. System wird dabei
durch X(s) = (1-exp(-sT))/s (Rechteckimpuls mit Dauer T) angeregt.
Man erhält damit eine zeitdiskrete Approximation des Frequenzganges
von H(s).

Sind also zwei verschiedene Dinge. Bei der Abtastung der kont. 
Impulsantwort ('impulse') gibt es keine Freiheitsgrade. Bei der 
Approximation des Frequenzganges hat man aber noch Freiheitsgrade. Z.B. 
kann man  eine andere Approximation verwenden, wie z.B. first order hold 
('foh').

Die Unterschiede kann man sich leicht anschauen:

s = tf('s');

a = -1;
Gs = 1/(s-a);

Ts = 0.01;

Gz1 = c2d(Gs,Ts,'zoh')
Gz2 = c2d(Gs,Ts,'foh')

step(Gs,Gz1,Gz2)


Gewiss ist eine höhere Approximation genauer, aber es ist dann immer
auch eine Frage des Aufwandes/Nutzen.


Cheers

von Tobias P. (hubertus)


Lesenswert?

Hi Dr.,
danke für die Erklärung. Gemäss dem Wikipedia-Artikel ist allerdings die 
Idee der Impulsinvarianten Transformation ja genau die Abtastung der 
kontinuierlichen Impulsantwort?
und bei 'zoh' wird ja im Prinzip nichts abgetastet, sondern man geht 
einfach von einer Rechteckförmigen Anregung des Systems aus.
Daher sehe ich den Unterschied zu 'impulse' nicht wirklich, meines 
Erachtens wäre ja dann 'impulse' das Gesuchte....

Gruss!

von Tobias P. (hubertus)


Lesenswert?

Hallo Dr.,
(falls du noch mitliest)
habe es korrigiert. Und mit Matlab verifiziert. Die Formeln stimmen 
jetzt für den allgemeinen Fall.

Nur so falls es jemanden sonst noch interessiert :-)

http://de.wikipedia.org/wiki/Impulsinvarianz-Transformation

Gruss Tobias

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.