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