1) Datenstrom auf Codewörter untersuchen (12 Pkt.)

Transcrição

1) Datenstrom auf Codewörter untersuchen (12 Pkt.)
Übung Embedded and Pervasive Systems
SS 2008, Übung 3
Institut für Pervasive Computing
Univ.-Prof. Dr. Alois Ferscha
Abgabe: Bis Di, 22. April 2008, 12.00 Uhr
Dipl.-Ing. Andreas Riener
Zuname:
Tutor:
Vorname:
Übungsgruppe:
Matr. Nr.:
SKZ:
Punkte (max. 24)
1) Datenstrom auf Codewörter untersuchen (12 Pkt.)
Schreiben Sie in Matlab eine Funktion lookForCodeword(word), die unter Verwendung eines in Simulink
definierten endlichen Automaten überprüft ob bzw. wie oft das übergebene Codewort (word) in einem
Datenstrom vorhanden ist. Die Anzahl (bzw. 0) ist als Funktionsergebnis zurückzugeben.
Hinweise/Einschränkungen:
ƒ
Der Parameter word enthält immer eine 4bit Binärzahl (=Codewort).
ƒ
Die Matlabfunktion soll keine Zwischenergebnisse ausgeben; Fehlermeldungen/-ausgaben sind soweit
möglich zu unterdrücken (zB. warning off/on MATLAB:divideByZero).
ƒ
Sie brauchen in der Implementierung der Funktion nicht auf ungültige Parameterwerte prüfen.
ƒ
Ihre Funktion lookForCodeword(word) soll die Lösung unter Zuhilfenahme eines zu erstellenden
endlichen Automaten in Simulink ermitteln. Ihr Simulink-Modell können sie mittels Befehl sim(...) aus
der Funktion heraus aufrufen (Parameter können an das Modell übergeben bzw. aus Simulink an die
Funktion / den Matlab-Workspace retourniert werden).
ƒ
Der zu untersuchende Datenstrom wird erzeugt durch einen „Uniform Random Number„-Block
(Parametrisierung angegeben), mit anschliessender Rundung auf 0 bzw. 1. Die Simulation soll
zeitdiskret für 50 Schritte durchgeführt werden (konfigurieren sie die Simulationsparameter
entsprechend).
ƒ
Eingangs- und Ausgangssignal sind nach Simulationsende in den Variablen input bzw. output an
Matlab (Workspace) zu retournieren.
ƒ
Für den endlichen Automaten verwenden Sie am besten die Bibliotheken „Discrete“ („Unit Delay“ zum
modellieren der Zustände) und „Logic and Bit Operations“ („AND“, „OR“, „NOT“, etc. zur Überprüfung der
Signalzustände).
ƒ
Die allgemeine Struktur eines endlichen Automaten stellt folgende Skizze dar. Beginnend von einem
Startzustand wird jedes bit ausgewertet. Stimmt das erste bit des Datenstroms mit dem Codewort
überein (TRUE), dann wird in Zustand S1 gewechselt (Z0B), ansonsten in S0 verweilt bis der Zustand
TRUE eintritt, etc. Stimmt die gesamte Bitfolge aus Codewort und Datenstrom überein, so befindet man
sich im letzten Zustand Sn+1, und der Zähler wird um 1 erhöht.
Beispiele und Testausgaben
Codewort:
0011
Datenstrom:
001001101010011110
Ausgabe:
000000010000000100
Counter liefert das Ergebnis „2“
Testausgabe für lookForCodeword(0000):
Testausgabe für lookForCodeword(1111):
Testen sie ihre Matlab-Funktion / Simulink-Modell mit den 3 Codewörtern '0000', '1111' und '1001'
und
geben
sie
neben
dem
Protokoll
mit
ihren
Ergebnissen
auch
die
Dateien
„lookForCodeword.m“ bzw. ihr Simulink-Modell (.mdl) ab.
2) Lunar Lander (12 Pkt.)
In Matlab/Simulink soll ein „einfaches“ Mondlandegerät simuliert werden – zu ermitteln sind dabei die
benötigte Antriebs-Brenndauern für eine erfolgreiche Landung und anschließende Rückkehr zur
Hauptrakete.
Hauptrakete
Mondlandegerät
wird in 1000 m
Höhe ausgesetzt
Landung:
Rückkehr:
Brennstart und
Erlaubte Nutzlast
-dauer sind zu
muss ermittelt
ermitteln.
werden
Proben sammeln,
dann Rückkehr zur
Hauptrakete
Folgende physikalischen Gesetze sind bekannt:
moon.g ∗ moon.mass
(lander.altitude + moon.radius )2
current _ thrust − lander.mass ∗ lander.gravity
lander.acceleration =
lander.mass
lander.gravity =
lander.velocity = ∫ lander.acceleration
lander.altitude = initial _ altitude + ∫ lander.velocity
lander.mass = initial _ mass − ∫ current _ fuel _ consumption
Wenn aktuelle Zeit t >= lander.start_thruster und t <= lander.stop_thruster:
current_thrust = lander.thrust
current_fuel_consumption = lander.fuel_consumption
sonst
current_thrust = 0
current_fuel_consumption = 0
a) Landung (9 von 12 Pkt.)
Bei der Landung wird das Landegerät in 1000 m Höhe ausgesetzt und muss sein Triebwerk lange genug
zünden, um mit weniger als 5 m/s auf dem Grund (Mond) aufzutreffen. Eine höhere Geschwindigkeit führt zu
einem Totalschaden des „Landers“. Es ist eine entsprechende Simulation in Simulink zu entwickeln, die alle
physikalischen Konstanten und Startwerte aus dem Matlab-Workspace entnimmt und die beiden Arrays
altitude und velocity mit den Simulationsergebnissen an den Workspace zurückgibt. Alle Zeitangaben
sind grundsätzlich in s (Sekunden), Entfernungen in m (Meter), Massen in kg (Kilogramm) und
Geschwindigkeiten in m/s (Meter/Sekunde).
Folgende physikalische Kenngrößen des Mondes müssen im Workspace definiert werden:
moon.g
= 6.672e-11;
moon.mass
= 7.3477e+22;
moon.radius = 1738140;
Daten des Landegeräts beim Absetzen:
lander.initial_mass
= 500;
lander.initial_altitude = 1000;
lander.fuel_consumption = 1;
lander.thrust
= 1500;
lander.start_thruster
= ?; % experimentell ermitteln
lander.stop_thruster
= ?; % experimentell ermitteln
Die Werte für lander.start_thruster und lander.stop_thruster sind experimentell zu ermitteln
(eine Simulationsdauer von 60 Sekunden sollte ausreichen...).
Bei Eingabe von sim('moonlander.mdl', [0,60], [], []); müssen dann jeweils ein Ergebnisarray mit der Zeit in der 1. Spalte und Höhe (altitude) bzw. Geschwindigkeit (velocity) in der 2. Spalte
im Workspace zu finden sein:
altitude =
velocity =
1.0e+003 *
0
1.0000
0
0
0.0001
1.0000
0.1000
-0.0810
0.0002
1.0000
0.2000
-0.2431
0.0003
0.9999
0.3000
-0.4052
...
...
...
...
Achten Sie darauf, dass altitude nicht < 0 sein kann, und velocity nicht != 0 wenn das Landegerät
gelandet ist. Abzugeben sind das Simulink-Modell (.mdl) sowie eine .m-Datei mit den gefundenen
Werten für lander.start_thruster und lander.stop_thruster (und inkl. der Konstantendeklarationen).
b) Rückkehr (3 von 12 Pkt.)
Nach der Landung werden so viele Proben wie möglich gesammelt, danach wird zur Hauptrakete zurückgeflogen. Das Landegerät startet mit 75 kg Treibstoff, von denen die bei der Landung verbrauchte Menge
abzuziehen ist. Aus der verbleibenden Treibstoffmenge ergibt sich die verbleibende Brenndauer
(Treibstoffmenge/lander.fuelconsumption).
Daten des Landegeräts beim Rückflug:
lander.initial_mass
= ?; %500 – verbrauchten Treibstoff + Nutzlast
lander.initial_altitude = 0;
lander.fuel_consumption = 1;
lander.thrust
= 1500;
lander.start_thruster
= 0; %gestartet wird sofort
lander.stop_thruster
= ?; %ergibt sich aus verbleibendem Treibstoff
Der Wert für lander.initial_mass ist experimentell zu ermitteln. Die Masse beim Rückflug ergibt sich
aus der ursprünglichen Masse von 500 kg, abzüglich dem bei der Landung verbrauchten Treibstoff, und der
Nutzlast.
Die Nutzlast soll möglichst groß sein, das Landegerät muss aber wieder eine Höhe von 1000 m erreichen
und darf dort nicht schneller als 5 m/s sein, sonst schlägt der Andockvorgang fehl.
Abzugeben ist eine .m-Datei (Matlab-Skript oder Funktion), die neben den Definitionen die
Ergebnisse
für
die
experimentell
lander.stop_thruster enthält.
ermittelten
Werte
für
lander.initial_mass
und