[an error occurred while processing this directive]   Suche  
 

Diskrete und kontinuierliche Zeit

SIMULINK simuliert das Verhalten von Systemen in der Zeit, das Zeitintervall über das sich die Simulation erstreckt, reicht per Default von 0 bis 10, kann aber mit Hilfe von "Simulation -> Parameters" verändert werden.

Fenster für Simulationsparameter

Im allgemeinen hat ein SIMULINK-Block die folgenden Eigenschaften:
  • einen Eingabevektor u(t)
  • einen Zustandsvektor x(t)
  • einen Ausgabevektor y(t)
Im Verlaufe der Simulationszeit verändern sich die Werte dieser Vektoren. Wenn sich x(t) und y(t) kontinuierlich ändern, sprechen wir von einem Block mit kontinuierlichem Zeitverhalten oder von einem kontinuierlichen Block. Wenn sich diese Werte nur zu bestimmten, diskreten Zeitpunkten ändern, von einem Block mit diskretem Zeitverhalten oder von einem diskreten Block. Die Änderungen von Zustands- und Ausgabevektor nennen wir Ereignisse, die Zeitpunkte der Änderungen entsprechend Ereigniszeitpunkte.

Beispiel 1

Das folgende Modell enthält:
  • eine Signalquelle, die kontinuierlich ein Signal aussendet, der Signalwert ist zeitabhängig, es git s(t) = t,
  • einen Integrator, der kontinuierlich den Wert des eingehenden Signales integriert und den momentanen Wert des Integrals ausgibt. Wir gehen hier davon aus, dass der Integrator kontinuierlich arbeitet, auch wenn er in der Praxis eine numerische Integration mit diskreten Zeitpunkten durchführt, das ist aber nur ein Zugeständnis an die numerische Natur von Simulink und Matlab.
  • einen Scope-Block, der den Wert seines Eingabesignals, also den des Ausgabesignals vom Integrator, über das gesamte Zeitintervall der Simulation aufzeichnet.
  • einen Display-Block, der den Wert seines Eingabesignals am Ende der Simulation anzeigt

Modell mit kontinuierlichem Integrator

Die Pfeile im Simulink-Modell zeigen ein logisches Nacheinander an, das jedoch immer zum selben Zeitpunkt in der simulierten Zeit erfolgt. Zum Zeitpunkt 5 hat das Ausgangssignal des Ramp-Blockes den Wert 5, der Integrator addiert 5 dt zum Zustandsvektor x(t) und gibt den momentanen Wert 25 aus, der Scope-Block zeigt den Graphen des Integrals von 0 bis 5 an und im Display-Block erscheint der Wert 25 (zumindest theoretisch).
Da wir den Simulationszeitraum bei 0 bis 10 gelassen haben, berechnet dieses Modell das Integral von 0 bis 10 über t dt und liefert am Ende im Display den Wert 50, im Scope den Graphen:

Graph des Integrals

Beispiel 2:

Im folgenden Modell haben wir gegenüber Beispiel 1 nur den zeitkontinuierlichen Integrator gegen einen zeitdiskreten Summierer (Discrete Time Integrator) ausgetauscht. Zeitdiskret heisst dabei, dass der Summierer nur zu bestimmten Zeitpunkten t0, t1, t2, ... arbeitet. Zu diesen Zeitpunkten wertet er das Eingangssignal aus, multipliziert es mit der Länge des Zeitintervalles und addiert das Produkt zum momentanen Wert des Zustandswertes, also zur momentanen Summe.

Modell mit diskretem Summierer

Die Blockparameter für den Summierer wurden auf den Default-Werten gelassen:

Block-Parameter zum Summiere

Von Bedeutung sind davon im Moment:
  • der Anfangswert (Initial condition) 0 des Summierers,
  • Die Länge eines Zeitintervalles (Sample time), alle Zeitintervalle haben die Länge 1.
  • Die Summationsformel (Integration method), "Forward Euler" besagt, dass die Summation nach der Regel:
    xn+1 = xn + Zeitintervall * Eingangssignal
    erfolgt. xn ist dabei der Summenwert vor der aktuellen Summation, xn+1 der Summenwert danach. Zu beachten ist, dass der Ausgabewert xn und nicht xn+1 ist.
Wir haben damit:
tn Signalwert xn xn+1
0 0 0 0
1 1 0 1
2 2 1 3
3 3 3 6
4 4 6 10
5 5 10 15
6 6 15 21
7 7 21 28
8 8 28 36
9 9 36 45
10 10 45 55

Wählt man das Zeitintervall immer kleiner, so werden xn von unten und xn+1 von oben gegen das Endergebnis von Beispiel 1 gehen. Für ein Zeitintervall der Länge 0.01 erhalten wir für xn das Endergebnis 49.95.

Beispiel 3:

In diesem Beispiel ändern wir lediglich die Parameter des Summierers.

Parameter-Fenster mit geänderten Werten

Wir verwenden also beim Summierer den Anfangswert 0.5 und haben die Sample time durch [1 0.5] angegeben. Der erste Wert 1 legt die Länge der Zeitintervalle fest, der zweite gibt die Verschiebung des ersten Ereigniszeitpunktes mit 0.5 an, die Ereigniszeitpunkte sind damit: 0.5, 1.5, 2.5, 3.5, ... , 9.5.

Wir haben damit:

tn Signalwert xn xn+1
0.5 0.5 0.5 1.0
1.5 1.5 1.0 2.5
2.5 2.5 2.5 5.0
3.5 3.5 5.0 8.5
4.5 4.5 8.5 13.0
5.5 5.5 13.0 18.5
6.5 6.5 18.5 25.0
7.5 7.5 25.0 32.5
8.5 8.5 32.5 41.0
9.5 9.5 41.0 50.5

Kontinuierliche und diskrete Blöcke können gemeinsam im selben Modell vorkommen.

Modell mit kontinuierlichen und diskreten Blöcken

Der Scope-Block liefert für obiges Modell die folgende Ausgabe:

Scope-Ausgabe zum Modell

Das Zusammenspiel von Blöcken mit verschiedenenem Zeitverhalten (multirate system) ist nicht immer so einfach zu erreichen wie im obigen Beispiel.

Beispiel 4:

Wir wollen ein diskret arbeitendes System modellieren, bei dem einige Ereignisse im Takt von einer Zeiteinheit, ein anderes aber nur zum Zeitpunkt 0 stattfinden soll.
Als Beispiel verwenden wir den Prozess zur Generierung des folgenden Diagrammes, das die Newton-Schritte zur Lösung eines Gleichungssystems:
   f1(x,y) = x^2 - 4y
   f2(x,y) = 4x - y^2
bei verschiedenen Startwerten rund um die Nullstelle [0,0] zeigt. Zum Zeitpunkt 0 soll das Achsenkreuz mit den Höhenlinien der Funktion
   F(x,y) = f1(x,y)^2 + f2(x,y)^2
angelegt werden, zu jedem Zeitpunkt n soll ein Newton-Schritt berechnet und in das Diagramm eingetragen werden. Da die Berechnung der Höhenlinien aufwendig ist, ist von Bedeutung, dass dies nur einmal geschieht.

Diagramm der Newton-Schritte

Wir modellieren zuerst den Prozess, bei dem keine Höhenlinien erzeugt werden, dieser Prozess kann mit nur einer Taktrate arbeiten. Als Taktgeber verwenden wir einen Unit Delay Block, das ist ein einfacher, diskret arbeitender Block, der zum Zeitpunkt tn+1 immer den Eingangswert vom Zeitpunkt tn ausliefert. Es gilt also:
   yn+1 = un
Wir versehen diesen Block mit:
  • Anfangswert (initial condition) x-1 = 0
  • Sample time T = 1

Singlerate Modell mit Newton-Schritten

Dieser Block arbeitet in einer Schleife, in der zu jedem Zeitpunkt der Ausgangswert um 1 erhöht und wieder als Eingangswert benutzt wird. Der Block liefert also zum Zeitpunkt n den Ausgangswert n, wobei n von 0 bis 16 läuft, was durch die Anfangs- und End-Zeit bei den Simulationsparametern vorgegeben wird.
Im nachfolgenden Produktblock wird n in n*pi/8 transformiert und dann zusammen mit dem Wert 0.5 (Radius um Nullpunkt) in die Matlab Fcn eingespeist. Der Matlab-Code des zugehörigen M-Files wird im Anhang wiedergegeben.
Die Höhenlinien werden ebenfalls mit Hilfe einer Matlab Fcn gezeichnet, den zugehörigen Matlab-Code findet man wieder im Anhang. Diese Matlab Fcn benötigt den Radius als Eingabewert und die naheliegenste Formulierung ist daher:

Singlerate System1

Das hat aber den Nachteil, dass diese Matlab Fcn im selben Takt arbeitet wie das ganze restliche System, die Höhenlinien werden 16 mal berechnet und gezeichnet. Daran ändert sich auch nichts, wenn wir die Höhenlinienien-Funktion vom Rest des Systems isolieren. Das isolierte Teilsystem arbeitet trotzdem im selben Takt wie das Restsystem.

Singlerate System2

Unser Ziel erreichen wir nur, wenn wir dem Teilsystem explizit einen eigenen Taktgeber mitgeben. Wir verwenden dazu eine Discrete State-Space Block, dessen Funktion aus seinem Icon hervorgeht. Die Besetzung der Parameter dieses Blockes erfordert einige Sorgfalt, wenn die Parameterwerte Matrizen sind. In diesem Falle sind es jedoch Skalare und wir setzen A, B und C gleich 0, D gleich 1. Der Block gibt also zu jedem Zeitpunkt sein Eingangssignal als Ausgangssignal weiter und hat keine andere Funktion, als den anhängenden Block zu takten. Die Taktzeit geben wir als Sample time im Parameterfenster mit 1000 an, da die Simulation nur bis 16 läuft, werden die Höhenlinien nur einmal gezeichnet, zum Zeitpunkt 0.

Multirate System

Überschaubar sind unterschiedliche Taktraten nur dann, wenn die getakteten Subsysteme isoliert hinter dem jeweilig taktenden Block stehen. Falls diese Subsysteme zusammenhängen ist es schwierig zu durchschauen, welcher Block mit welcher Taktrate arbeitet. Die folgenden Diagramme zeigen das System aus dem Anhang in verschiedenen Varianten. Gegenüber dem bisherigen System kann man hier mehr Eingabeparameter vorgeben, insbesondere kann man bei der Iteration mehrere Schritte durchführen lassen (Schrittzahl).
Das nächste und übernächste Modell unterscheiden sich nur dadurch, dass die Multiplikation mit pi/8 einmal ausserhalb der Matlab-Function, das andere mal innerhalb der Matlab Function durchgeführt wird, was merkwürdigerweise auf die Multirate Eigenschaft des Systems auswirkt.

Multirate System

Multirate System

Wenn man 'Achsenkreuz' wieder direkt hinter den taktenden Discrete State Block anfügt, erreicht man wieder das gewünschte Multirate-Verhalten. Zu beachten ist, dass die Parameter des Discrete State System Blockes jetzt anders besetzt werden müssen.
  • Der Eingangsvektor u hat die Länge 4 und soll unverändert durchgereicht werden. D muss also eine 4*4 Einheitsmatrix sein und wir setzen deshalb D = eye(4,4).
  • Der Zustandsvektor x ist ein Skalar, dessen Wert uns nicht weiter interessiert, A muss deshalb eine 1*1, B eine 1*4 und C eine 4*1 Matrix sein. Wir setzen A=0, B=zeros(1,4) und C=zeros(4,1).

Multirate System

Auf der sichereren Seite ist man allerdings, wenn man die beiden unterschiedlich getakteten Subsysteme entkoppelt. Wir verwenden im folgenden Modell zum Hochzählen der ässeren Schrittzahl ebenfalls einen Discrete State System Block, den roten. Die Parameter dieses Blockes sind:
  • A = eye(1,1)
  • B = [0 0 0 0 0 1]
  • C = [0;0;0;0;0;1]
  • D = eye(6,6)
  • Initial conditions: 0
  • Sample time: 1
Die Parameter des grünen Diskrete State Space Blockes sind dagegen:
  • A = eye(1,1)
  • B = zeros(1,6)
  • C = zeros(6,1)
  • D = eye(6,6)
  • Initial conditions: 0
  • Sample time: 1000

Multirate System