Komplettes Matlab Praktikum (Aufgaben + Lösungen) PDF

Title Komplettes Matlab Praktikum (Aufgaben + Lösungen)
Course Stochastische Signale
Institution Technische Universität München
Pages 102
File Size 2.7 MB
File Type PDF
Total Downloads 58
Total Views 136

Summary

Komplettes Matlab Praktikum (Aufgaben + Lösungen) 2017/2018...


Description

Praktikum Stochastische Signale, WS 2017/18

Einführung Durch anschauliche Beispiele und die Möglichkeit, selbst zu experimentieren, fällt es oft leichter, theoretische und mathematische Hintergründe zu verstehen. Genau dies ist das Ziel des Praktikums Stochastische Signale. Wir werden in Praktikumsversuchen verschiedene Aspekte der Vorlesung aus einem neuen Blickwinkel entdecken, wollen dabei jedoch stets auch den Zusammenhang mit der Theorie im Blick behalten, um die einzelnen Versuche im Gesamtkontext der Vorlesung zu verstehen. Aus diesem Grund ist es wichtig, dass Sie sich nicht direkt in die einzelnen Aufgaben stürzen, sondern immer zunächst den begleitenden Text lesen. Dieser stellt nicht nur den Zusammenhang mit dem Stoff der Vorlesung her, sondern enthält auch nützliche Tipps zu den einzelnen Aufgaben, so dass Sie unterm Strich Zeit sparen werden, wenn Sie sich die Zeit nehmen, diese Erläuterungen in Ruhe zu lesen. Als Hilfsmittel zur Durchführung des Praktikums verwenden wir Matlab1 oder alternativ die freie Software Octave, die weitgehend mit Matlab kompatibel ist. Für Studierende der TUM steht auch Matlab kostenlos zur Verfügung. Der Einfachheit halber wird im folgenden nur der Name Matlab verwendet, womit aber (soweit nicht anders angegeben) immer Matlab oder Octave gemeint ist. Wir verwenden Matlab als Software für das Praktikum, um Ihnen gleichzeitig die Möglichkeit zu bieten, erste Erfahrungen mit diesem für viele Ingenieure wichtigen Werkzeug zu machen. Das Praktikum darf aber nicht als Matlab-Programmierpraktikum missverstanden werden. Im weiteren Verlauf Ihres Studiums gibt es die Möglichkeit andere Lehrveranstaltungen zu belegen, in denen Sie umfangreiche Kenntnisse in Matlab erwerben können. Im Praktikum Stochastische Signale erhalten Sie lediglich eine Einführung in die wichtigsten Grundlagen und lernen darüber hinaus eine Reihe von Funktionen kennen, die beim Umgang mit stochastischen Aufgabenstellungen zum Einsatz kommen. Neben den schon erwähnten einführenden Texten und Erläuterungen finden Sie in 1

MATLAB ist eine eingetragene Marke von The MathWorks, Inc.

1

Einführung

den Versuchsbeschreibungen Aufgaben und Programmieraufgaben. In den Aufgaben werden Sie zum Beispiel dazu aufgefordert, bestimmte Befehle direkt in Matlab auszuführen. In den Programmieraufgaben soll hingegen jeweils eine Funktion geschrieben oder vervollständigt werden. Wie Sie in den beiden Fällen vorgehen können, wird in den Abschnitten 1.1 und 1.2 erklärt. Zusätzlich zur Versuchsbeschreibung wird für jedes Kapitel ein ZIP-Archiv mit weiteren Praktikumsunterlagen (diverse Dateien) zur Verfügung gestellt, die im Verlauf des Kapitels benötigt werden. Im Folgenden ist der Aufbau der Programmieraufgaben erläutert. Falls einzelne Punkte davon nicht gleich verständlich sind, dann blättern Sie einfach noch einmal hierher zurück, nachdem Sie sich mit den ersten Matlab-Grundlagen beschäftigt haben. PROGRAMMIERAUFGABE An dieser Stelle finden Sie jeweils die detaillierte Aufgabenstellung, das heißt, was genau die Funktion tun soll. Nur wenn diese Spezifikationen genau eingehalten werden, wird die automatische Überprüfung (Verfikationsskript, siehe unten) die Lösung akzeptieren. Soweit möglich gibt das Verifikationsskript ggf. Auskunft darüber, welcher Teil der Spezifikation nicht erfüllt wurde. 1 Datei: Hier wird der Dateiname angegeben. Eine Datei mit diesem Namen finden Sie in den Praktikumsunterlagen. Öffnen Sie diese mit dem Matlab-Editor oder mit einem Editor Ihrer Wahl. Die Funktionsdefinition (siehe unten) steht schon in der Datei und kann unverändert übernommen werden. Schreiben Sie darunter Ihren Code und speichern Sie die Datei. Bei manchen Programmieraufgaben ist in der Datei auch schon Code vorhanden. In diesen Fällen ist gekennzeichnet, an welchen Stellen Ergänzungen vorzunehmen sind. • Funktionsdefinition: Diese Zeile finden Sie auch in der jeweiligen Datei wieder. Sie gibt Matlab Informationen über den Namen der Funktion und über die Ein- und Ausgabedaten. Lassen Sie diese Zeile unverändert. 2 Eingabedaten: • Hier werden die Eingabedaten (Parameter) aufgelistet und erklärt. Die Parameter stehen innerhalb der Funktion wie normale Variablen zur Verfügung. Sie sollen nicht mit eigenen Werten überschrieben werden, sondern können ausgelesen werden, d.h. sie können z.B. auf der rechten Seite einer Zuweisung vorkommen. 3 Ausgabedaten: • Hier werden die Ausgabedaten (Rückgabewerte) aufgelistet und erklärt. Diese müssen innerhalb des Codes, den Sie in die Datei schreiben, mit 2

Praktikum Stochastische Signale, WS 2017/18

Werten gefüllt werden. Sie müssen also irgendwo im Code auf der linken Seite einer Zuweisung stehen. 4 Hinweise: • Die hier gegebenen Hinweise sollten Sie sich komplett durchlesen. Bitte beachten Sie zusätzlich auch Tipps, die im Moodle-Forum gegeben werden, z.B. als Reaktion auf Fragen von anderen Studierenden. • Hier ein allgemeiner Hinweis: In vielen Programmieraufgaben können Funktionen wiederverwendet werden, die Sie bereits zuvor in einer anderen Aufgabe implementiert haben. In diesen Fällen müssen Sie nicht etwa Ihren alten Code in die neue Funktion kopieren, sondern Sie können innerhalb der neuen Funktion direkt die bereits implementierte Funktion aufrufen. • Wenn im Matlab-Editor Code unterringelt oder farbig hinterlegt wird, kann man mit der Maus darauf zeigen, um Hinweise zur Syntax zu bekommen. 5 Überprüfung: • Hier wird meist ein Beispiel angegeben, wie sie die Funktion, nachdem Sie sie abgespeichert haben, selbst in Matlab aufrufen können (vom Kommandofenster aus), um sie zu testen. Denken Sie sich zudem selbst alternative Eingabedaten aus, mit denen Sie Ihre Funktion dann ebenfalls aufrufen. Achtung: es gibt in Matlab einen „Run“-Button, der aber nicht verwendet werden kann, wenn eine Funktion Eingabedaten benötigt. • Zu allen Programmieraufgaben stellen wir ein Verifikationsskript bereit, das automatisiert überprüft, ob die Funktion korrekt arbeitet. Dieses Skript ist nicht Teil von Matlab, sondern wird von uns jeweils zusammen mit den Praktikumsunterlagen zur Verfügung gestellt. An dieser Stelle wird in den Programmieraufgaben angegeben, wie Sie das Verfikationsskript für die jeweilige Funktion aufrufen können. Das Konzept der Programmieraufgaben haben wir gewählt, da es einer üblichen Arbeitsweise im späteren Ingenieuralltag recht nahe kommt. Stellen Sie sich vor, Sie bekommen den Auftrag eine Komponente zu entwickeln (oder weiterzuentwickeln), die einen kleinen Baustein in einem größeren Projekt darstellt. Dazu bekommen Sie eine Spezifikation, in der nicht nur die Funktionalität dieses Moduls festgelegt ist, sondern auch die Schnittstellen für Ein- und Ausgabedaten beschrieben sind, die genau eingehalten werden müssen. Um die Aufgaben zu bewältigen, müssen Sie neben der Spezifikation weitere Dokumente mit Hintergrundinformationen lesen, wie z.B. eine existierende Projektdokumentation (in unserem Fall die Versuchsbeschreibung), 3

Einführung

eventuell auch in weiteren Quellen recherchieren (in unserem Fall z.B. in der MatlabHilfe und/oder im Internet), eventuell Rücksprache mit Kollegen halten, aus all diesen Quellen die wichtigen Informationen herausfiltern und kombinieren, und somit letzten Endes selbstständig zu einer Lösung kommen. In diesem Praktikum wird der zu schreibende Code stets in relativ kleine Funktionen aufgeteilt, welche jeweils im Rahmen einer Programmieraufgabe zu implementieren sind. Diese Stückelung ermöglicht Ihnen, die Gesamtaufgabe in kleinen Teilschritten zu lösen, wobei jeder Teilschritt einzeln auf Korrektheit überprüft werden kann. Diese Stückelung sollte aber nicht als Vorbild für größere Matlab-Projekte gesehen werden, da es aus Performancegründen oft sinnvoller ist, mehr Code in einer Funktion zusammenzufassen, um Overhead beim Funktionsaufruf zu vermeiden. Da Matlab allgemein als ein Werkzeug angesehen wird, das man gut via learning by doing erlernen kann, werden wir bei manchen Matlab-Befehlen auf eine ausführliche Erklärung des Befehls verzichten, sondern Sie stattdessen direkt auf die Matlab-Hilfe verweisen. Hierzu können Sie im Befehlsfenster (siehe Abschnitt 1.1) help Befehlsname eingeben, oder für ausführlichere Informationen doc Befehlsname. Darüber hinaus finden Sie leicht im Internet diverse Webseiten, auf denen Matlab-Befehle erläutert werden. Natürlich gibt es auch Bücher über Matlab in der Bibliothek. Zögern Sie aber auch nicht, sich an die Tutoren oder den betreuenden Assistenten zu wenden, wenn die Versuchsbeschreibung und die Matlab-Hilfe Ihre Fragen nicht beantworten. Hierzu steht Ihnen neben den Praktikumstutorien im Eikon und der Plenumsstunde auch das Forum im Moodle-Kurs zur Verfügung. Wir empfehlen, die Versuchsbeschreibungen auszudrucken, um zunächst in Ruhe die Einführungen in die einzelnen Versuche lesen zu können und sie anschließend während der Bearbeitung der Aufgaben parat zu haben. So muss man nicht am Computer zwischen verschiedenen Fenstern (Matlab und PDF-Viewer) hin- und herschalten, sondern hat alles gleichzeitig im Blick. Übrigens erhält jeder Studierende der Fakultät für Elektrotechnik und Informationstechnik pro Semester 3 Euro „Freikontingent“ für die Drucker im Eikon, das hierfür benutzt werden kann. Am Ende jedes Kapitels finden Sie einen Abschnitt mit Beispielfragen zur Prüfungsvorbereitung. Diese sollen Ihnen einen Eindruck vermitteln, wie die Fragen aussehen könnten, die in der Prüfung zum Praktikum gestellt werden. Die Lösungen zu diesen Beispielfragen sowie zu den Aufgaben und Programmieraufgaben werden in der Plenumsstunde vorgestellt. Anschließend werden sie auch online zugänglich gemacht. Die online veröffentlichten Musterlösungen sind bewusst kurz gehalten. Wer ausführlichere Erklärungen haben möchte, ist eingeladen, in die Plenumsstunde zu kommen.

4

Praktikum Stochastische Signale, WS 2017/18

Kapitel 1

Grundlagen und Zufallsvariablen In diesem Einführungskapitel erlernen Sie zunächst einige grundlegende Kenntnisse im Umgang mit Matlab. Diesen Teil können Sie in der ersten Praktikumswoche bearbeiten. Im hinteren Teil des Kapitels (ab Abschnitt 1.3), geht es dann um den Umgang mit Zufallsvariablen. Dieser Teil ist für die zweite Praktikumswoche gedacht, da Sie erst dann die erforderliche Theorie in der Vorlesung gelernt haben. Um den Einstieg zu erleichtern, enthält dieses Kapitel viele Beispiel-Eingaben und detaillierte Erklärungen. Erschrecken Sie darum nicht über die Seitenanzahl. Ausführliche Erklärungen brauchen zwar Platz, sollen Ihnen aber unterm Strich Zeit sparen. 1.1 Matlab-Grundlagen Wir empfehlen die Verwendung von Octave 3.6.2 oder neuer oder von Matlab R2014b oder neuer. Für TUM-Studierende ist eine Matlab Student Option kostenlos unter https://matlab.rbg.tum.de/ erhältlich. Octave ist als freie Software erhältlich unter http://www.gnu.org/software/octave/. AUFGABE 1.1 Installieren und starten Sie Matlab. Achten Sie während der Installation darauf, die Statistics and Machine Learning Toolbox (in alten Matlab-Versionen: Statistics Toolbox), die Image Processing Toolbox und die Signal Processing Toolbox zu installieren, da diese für das Praktikum benötigt werden (in Octave nicht notwendig). Falls Sie auf einem Eikon-Rechner arbeiten, ist Matlab (inklusive der benötigten Toolboxen) bereits installiert und sie können es direkt starten. 5

Kapitel 1. Grundlagen und Zufallsvariablen

Abhängig von Ihrer Konfiguration sehen Sie nach dem Start von Matlab entweder nur eine Konsole oder eine komplette graphische Oberfläche. Die folgenden Erklärungen beziehen sich auf die graphische Oberfäche. Diese können Sie auch von der Konsole aus noch nachträglich durch Eingabe von desktop starten. Wenn Sie lieber auf der Konsole arbeiten oder wenn Sie Octave ohne graphische Oberfäche verwenden, beachten Sie die folgenden beiden Hinweise: 1) die Konsole entspricht dem Kommandofenster, das im Folgenden beschrieben wird, 2) Sie können, wenn vom Matlab-Editor die Rede ist, auch einen beliebigen anderen Editor verwenden. Ein Bereich der graphischen Oberfläche ist mit „Command Window“ überschrieben. Hier können Sie direkt Befehle ausführen oder Funktionen aufrufen. Anders als z.B. beim Programmieren in C können Sie hier auch direkt Werte an Variablen zuweisen, ohne dass Sie erst einen kompletten Programmcode schreiben müssen. Die so erstellten Variablen können Sie in der graphischen Oberfläche auch im Fenster „Workspace“ betrachten. AUFGABE 1.2 Geben Sie die folgenden Beispiele in das Kommandofenster ein und betrachten Sie jeweils das Resultat. Überlegen Sie selbst, was die einzelnen Befehle bedeuten, bevor Sie die anschließenden Erklärungen lesen. • a=2 • x=1:4 • a*x • y=x' • help ctranspose • z=(1:0.1:3/2)' • b=5; • b • c=a:b • c=2*c Experimentieren Sie mit eigenen Variationen. Versuchen Sie zum Beispiel, einen Spaltenvektor d zu erstellen, der die Werte −0.5, −0,45, . . . , 0,95, 1 enthält. Erklärungen/Lernziele zu Aufgabe 1.2: Der Operator = ist eine Zuweisung. Mit r:s:t wird ein Zeilenvektor erstellt, der von r bis t alle Zahlen mit Abständen von s enthält. 6

Praktikum Stochastische Signale, WS 2017/18

Wird nur r:t geschrieben, dann wird als Abstand 1 genommen. Multiplikation mit einem Skalar (und auch Matrix-Vektor-Multiplikation) wird durch* dargestellt, wobei der Operator nicht weggelassen werden kann (z.B. kann 2*x nicht als 2x abgekürzt werden). Mit ' wird hermitesche Transposition ausgedrückt (bei reellen Vektoren äquivalent mit gewöhnlicher Transposition). help BEFEHL zeigt die Hilfe zu einem Befehl an. Kommazahlen werden (wie im Englischen üblich) mit . gebildet. Ein Strichpunkt am Zeilenende unterdrückt die Bildschirmausgabe im Kommandofenster. Eine Matlab-spezifische Besonderheit ist dabei, dass es von vielen Operatoren eine Version gibt, die, wenn man sie auf ganze Vektoren anwendet, einer elementweisen Auswertung entspricht. Zum Beispiel ist zu unterscheiden zwischen dem Matrix-VektorProdukt * und dem elementweisen Produkt, das durch .* ausgedrückt wird. AUFGABE 1.3 Probieren Sie die folgenden Befehle im Kommendofenster aus. Überlegen Sie selbst, was die einzelnen Befehle bedeuten, bevor Sie die anschließenden Erklärungen lesen. Manche der Befehle führen zu Fehlermeldungen. Überlegen Sie jeweils warum. • a=(1:4)' • b=(0:3)' • a'*b • a.*b • a*b • a'.*b • 4^2 • a^2 • a.^2 • 3.^a • a.^b • a^b • b./a • B./a Experimentieren Sie mit eigenen Variationen der Befehle. Versuchen Sie zum Beispiel, einen Spaltenvektor zu erstellen, der die Werte 2 1 , 2 2 , 23 , . . . , 2 10 enthält. 7

Kapitel 1. Grundlagen und Zufallsvariablen

Erklärungen/Lernziele zu Aufgabe 1.3: Das Matrix-Vektor-Produkt* kann auf einen Zeilen- und einen Spaltenvektor angewendet werden, um ein Skalarprodukt zu berechnen. Wendet man es auf zwei Spaltenvektoren an, tritt ein Fehler auf. Das elementweise Produkt .* kann auf zwei Vektoren (oder Matrizen) gleicher Dimension angewendet werden, also z.B. zwei Spaltenvektoren gleicher Länge. Analoges gilt für den elementweisen Potenzoperator .^ und den elementweisen Divisionsoperator ./. Wird ein elementweiser Operator auf einen Vektor und einen Skalar angewendet, dann wird jedes Element des Vektors einzeln mit dem Skalar verrechnet. Bei Variablennamen muss Groß- und Kleinschreibung beachtet werden. 1.2

Funktionen in Matlab

Bevor wir uns anschauen, wie wir eigene Funktionen definieren und implementieren können, wollen wir uns kurz den vordefinierten Funktionen zuwenden, von denen Matlab eine ganze Reihe mitbringt. Manche davon sind Teil einer sogenannten Toolbox und sind nur verfügbar, wenn die Toolbox bei der Installation ausgewählt wurde (siehe Aufgabe 1.1). Analog zu den Operatoren können auch viele Funktionen elementweise auf ganze Vektoren angewendet werden. Dies lernen Sie in der folgenden Aufgabe kennen. AUFGABE 1.4 Geben Sie die folgenden Beispiele in das Kommandofenster ein und betrachten Sie jeweils das Resultat. Überlegen Sie selbst, was die einzelnen Befehle bedeuten, bevor Sie die anschließenden Erklärungen lesen. • x=0:4 • y=sqrt(x) • xi=−3:3 • abs_xi=abs(xi) Experimentieren Sie mit eigenen Variationen der Befehle. Versuchen Sie zum Beispiel, einen Spaltenvektor zu erstellen, der die Werte exp(0 ), exp(1), . . . , exp( 3) oder die Werte ln( 0), ln( 1), . . . , ln( 4 ) enthält (Hinweis: help exp und help log). Erklärungen/Lernziele zu Aufgabe 1.4: Die Funktion sqrt berechnet elementweise die Quadratwurzel, die Funktion abs den elementweisen Absolutwert (Betrag). Variablennamen können aus mehreren Buchstaben bestehen und können auch Zahlen 8

Praktikum Stochastische Signale, WS 2017/18

und Unterstriche enthalten (müssen aber mit einem Buchstaben beginnen). Die Funktionen exp und log berechnen Exponentialfunktion und natürlichen Logarithmus elementweise. Geht ein Wert gegen unendlich, so zeigt Matlab Inf an. AUFGABE 1.5 Plotten Sie den Wert von x2 im Bereich x ∈ [−2; 2]. Gehen Sie dabei wie folgt vor: • Erstellen Sie einen Spaltenvektor x mit Einträgen −2, − 1,99, . . . , 1,99, 2. • Berechnen Sie elementweise die Quadrate der Einträge von x und speichern Sie das Ergebnis als Vektor y. • Plotten Sie das Ergebnis mit plot(x,y) Hinweis: help colon, help power, help plot. Erklärungen/Lernziele zu Aufgabe 1.5: Übergibt man der Funktion plot zwei gleich lange Vektoren, dann werden die Einträge der beiden Vektoren als x-Werte bzw. y-Werte aufgefasst und in einem Plot dargestellt. Sie können in Matlab natürlich auch eigene Funktionen definieren. Diese können Berechnungen durchführen und die numerischen Ergebnisse zurück liefern (wie z.B. sqrt) oder auch Ein- und Ausgabeoperationen durchführen (wie plot). Um eine eigene Funktion auszuführen, muss man sich in dem Ordner befinden, in dem die Funktion liegt. 1 Hierzu kann man entweder den Bereich „Current Folder“ in der graphischen Oberfläche verwenden oder den Befehl cd (siehe help cd). AUFGABE 1.6 Laden Sie das ZIP-Archiv mit den Praktikumsunterlagen herunter und entpacken Sie es in einen Ordner.2 Wechseln Sie dann in Matlab in diesen Ordner. Sie werden nun Ihre erste Programmieraufgabe bearbeiten. PROGRAMMIERAUFGABE 1.7 Implementieren Sie eine Funktion, welche die Werte von x2 im Bereich −a bis a mit Stützstellen im Abstand von 0,01 plottet, wobei a als Parameter an die Funktion übergeben wird. Öffnen Sie dazu die angegebene Datei und ergänzen Sie den Code. 1 Datei: plot_x_squared.m • Funktionsdefinition: function plot_x_squared(a) 1 2

Oder die Funktion muss in einem Ordner liegen, der im Pfad enthalten ist, siehe help path. Versuchen Sie bitte nicht, die Dateien direkt aus dem Archiv heraus zu öffnen.

9

Kapitel 1. Grundlagen und Zufallsvariablen

2 Eingabedaten: • a: Parameter a, der angibt, in welchem Bereich die Funktion geplottet werden soll. 3 Ausgabedaten: keine 4 Hinweise: • Sie können a in der Funktion wie eine gewöhnliche Variable verwenden, die bereits von vorne herein einen Wert hat. • Nützliche Hilfethemen: help function, help colon, help power, help plot

• Wenn Sie Ihre Funktion mehrmals hintereinander aufrufen, wird jedes Mal wieder ins zuletzt verwendete Plot-Fenster geplottet. Wenn Sie das nicht möchten, können Sie mit figure ein neues Plot-Fenster öffnen, bevor Sie Ihre Funktion aufrufen. 5 Überprüfung: • Rufen Sie Ihre Funktion auf, indem Sie z.B. plot_x_squared(3) ins Kommandofenster eingeben. • Überprüfen

Sie

Ihre

Funktion

durch

Eingabe

von

verify('plot_x_squared') im Kommandofenster.

Sie haben bereits gelernt, dass manche mitgelieferte Funktionen von Matlab elementweise auf ganze Vektoren angewendet werden können. Dies können Sie auch für Ihre eigenen Funktionen erreichen, wenn Sie darin nur Funktionen und Operatoren verwenden, die ganze Vektoren elementweise verarbeiten können (z.B. exp und .^ in der folgenden Programmieraufgabe). Diese Methode ist eine Spezialität von Matlab und wird als Vektorisierung bezeichnet.3 PROGRAMMIERAUFGABE 1.8 Implementieren Sie die Funktion f (x) =

2 √1 e−0,5x . 2π

1 Datei: my_pdf.m 3 Insbesondere auf Multicore-Prozessoren s...


Similar Free PDFs