AlphaBot: Messdatenverarbeitung mit MATLAB: Unterschied zwischen den Versionen
(→Inhalt) |
|||
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Arduino]] | [[Kategorie:Arduino]] | ||
[[Datei: | [[Datei:TesteFilterVergleich.jpg|thumb|rigth|450px|Abb. 1: Vergleich rauschunterdrückender Filter]] | ||
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]<br> | '''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]<br> | ||
'''Modul:''' Praxismodul I<br> | '''Modul:''' Praxismodul I<br> | ||
Zeile 16: | Zeile 16: | ||
Nach Durchführung dieser Lektion | Nach Durchführung dieser Lektion | ||
* können Sie reale Messwerte speichern und via MATLAB<sup>®</sup> zyklisch visualisieren. | * können Sie reale Messwerte speichern und via MATLAB<sup>®</sup> zyklisch visualisieren. | ||
* haben Sie ein | * haben Sie ein gleitendes Mittelwertfilter programmiert. | ||
* haben Sie ein rekursives rekursiven Tiefpassfilter programmiert. | * haben Sie ein rekursives rekursiven Tiefpassfilter programmiert. | ||
* können Sie die Filter parametrieren. | * können Sie die Filter parametrieren. | ||
Zeile 24: | Zeile 24: | ||
== Lernzielkontrolle == | == Lernzielkontrolle == | ||
# Wozu werden rekursive Filter benötigt? | # Wozu werden rekursive Filter benötigt? | ||
# Nennen Sie die | # Nennen Sie die Formel für ein gl. Mittelwertfilter. | ||
# Welche Parameter hat ein gl. Mittelwertfilter? Was bedeuten die Parameter? | # Welche Parameter hat ein gl. Mittelwertfilter? Was bedeuten die Parameter? | ||
# Nennen Sie die rekursive Formel für ein Tiefpassfilter. | # Nennen Sie die rekursive Formel für ein Tiefpassfilter. | ||
Zeile 31: | Zeile 31: | ||
# Wurde der Quelltext durch Header und Kommentare aufgewertet? | # Wurde der Quelltext durch Header und Kommentare aufgewertet? | ||
# Wurde auf <code>magic numbers</code> verzichtet? | # Wurde auf <code>magic numbers</code> verzichtet? | ||
# Wurde die | # Wurde die Programmierrichtlinie eingehalten? | ||
== Vorbereitung == | == Vorbereitung == | ||
Führen Sie als Vorbereitung den [https://www.mathworks.com/learn/tutorials/matlab-onramp.html MATLAB<sup>®</sup> Onramp Kurs] durch. | |||
Zeile 50: | Zeile 50: | ||
'''Nützliche Befehle''': <code>plot, xlabel, ylabel, legend, persistent, isempty, isnan, function</code> | '''Nützliche Befehle''': <code>plot, xlabel, ylabel, legend, persistent, isempty, isnan, function</code> | ||
'''Arbeitsergebnisse''' in SVN: <code>GleitendesMittelwertFilter.m, | '''Arbeitsergebnisse''' in SVN: <code>GleitendesMittelwertFilter.m, testeGleitendesMittelwertFilter.m</code> | ||
'''Hinweise:''' | '''Hinweise:''' | ||
* Nutzen Sie ein Array als FIFO. | * Nutzen Sie ein Array als FIFO. | ||
* Die Formel für das gleitende Mittelwertfilter lautet: <math>\bar{x}(k)=\frac{x(1)+x(2)+\ldots+x(k)}{k}</math> für k Messwerte | * Die Formel für das gleitende Mittelwertfilter lautet: <math>\bar{x}_{GM}(k)=\frac{x(1)+x(2)+\ldots+x(k)}{k}</math> für k Messwerte | ||
<div class="mw-collapsible mw-collapsed"> | <div class="mw-collapsible mw-collapsed"> | ||
Zeile 76: | Zeile 76: | ||
# Wählen Sie <math>\alpha</math> anhand der Messwerte und diskutieren Sie Ihre Wahl mit Prof. Schneider. | # Wählen Sie <math>\alpha</math> anhand der Messwerte und diskutieren Sie Ihre Wahl mit Prof. Schneider. | ||
'''Arbeitsergebnisse''' in SVN: <code>testeTiefpassFilter.m</code> | '''Arbeitsergebnisse''' in SVN: <code>TiefpassFilter.m, testeTiefpassFilter.m</code> | ||
'''Hinweis:''' | '''Hinweis:''' | ||
* Die Formel für das Tiefpassfilter lautet: <math>\bar{x}(k)=\alpha \cdot \bar{x}(k-1)+ (1-\alpha)\cdot x(k)</math> für den aktuellen Messwert <math>x(k)</math>. | * Die Formel für das Tiefpassfilter lautet: <math>\bar{x}_{TP}(k)=\alpha \cdot \bar{x}(k-1)+ (1-\alpha)\cdot x(k)</math> für den aktuellen Messwert <math>x(k)</math>. | ||
* <math>\alpha</math> ist hierbei ein Filterparameter <math>0<\alpha<1</math>. | * <math>\alpha</math> ist hierbei ein Filterparameter <math>0<\alpha<1</math>. | ||
<div class="mw-collapsible mw-collapsed"> | <div class="mw-collapsible mw-collapsed"> | ||
Zeile 89: | Zeile 89: | ||
=== Aufgabe 2.3: Filtervergleich === | === Aufgabe 2.3: Filtervergleich === | ||
# Vergleichen Sie die Ergebnisse | # Vergleichen Sie die Ergebnisse des Tiefpasses mit denen des gleitenden Mittelwertfilters. | ||
# Zeigen Sie das ungefilterte und die gefilterten Signal in MATLAB<sup>®</sup> in einem Plot vergleichend an. | # Zeigen Sie das ungefilterte und die gefilterten Signal in MATLAB<sup>®</sup> in einem Plot vergleichend an (vgl. Abb.1). | ||
# Beschriften Sie die Achsen und nutzen Sie eine Legende. | # Beschriften Sie die Achsen und nutzen Sie eine Legende. | ||
'''Lernzielkontrollfragen:''' | |||
# Wurde das Signalrauschen geglättet? | |||
# Ist das gefilterte Signal verzögert? | |||
# Welchen Einfluss haben die Filterparameter? | |||
# Wie verhalten sich die gefilterten Signal bei Ausreißern? | |||
'''Arbeitsergebnisse''' in SVN: <code>testeFilterVergleich.m</code> | '''Arbeitsergebnisse''' in SVN: <code>testeFilterVergleich.m</code> | ||
Zeile 104: | Zeile 105: | ||
Eine ausführliche Beschreibung mit Musterlösung finden Sie in [1, S. 27 ff.]. | Eine ausführliche Beschreibung mit Musterlösung finden Sie in [1, S. 27 ff.]. | ||
</div> | </div> | ||
=== Aufgabe 2.4: Nachhaltige Doku === | === Aufgabe 2.4: Nachhaltige Doku === | ||
Zeile 132: | Zeile 132: | ||
---- | ---- | ||
→ Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2023|1]] [[AlphaBot:_Messdatenverarbeitung_mit_MATLAB|2]] [[AlphaBot:_MATLAB_als_serieller_Monitor|3]] [[AlphaBot: Servo ansteuern|4]] [[AlphaBot:_Motoren_und_Inkrementalgeber|5]] [[AlphaBot: Programmier-Challenge I SoSe23|6]] [[AlphaBot:_Gesteuerte_Fahrt|7]] [[AlphaBot: Geregelte Fahrt mit Linienverfolger|8]] [[AlphaBot: Parklücke suchen|9]] [[AlphaBot: Autonomes Einparken|10]] [[AlphaBot: Programmier-Challenge II SoSe23|11]]<br> | |||
→ zurück zum Hauptartikel: [[AlphaBot_SoSe23|Informatik Praktikum 2]] | → zurück zum Hauptartikel: [[AlphaBot_SoSe23|Informatik Praktikum 2]] |
Aktuelle Version vom 9. April 2024, 08:49 Uhr
Autor: Prof. Dr.-Ing. Schneider
Modul: Praxismodul I
Lehrveranstaltung: Mechatronik, Informatik Praktikum 2, 2. Semester
Inhalt
- Einarbeitung in MATLAB®
- Programmierung und Anwendung eines gleitenden Mittelwertfilters
- Programmierung und Anwendung eines rekursiven Tiefpassfilters
- Auslegung von Filterparameter
- Anwendung der Filter auf eine Ultraschallmessung
- Vergleich der Filter anhand technischer Kriterien
Lernziele
Nach Durchführung dieser Lektion
- können Sie reale Messwerte speichern und via MATLAB® zyklisch visualisieren.
- haben Sie ein gleitendes Mittelwertfilter programmiert.
- haben Sie ein rekursives rekursiven Tiefpassfilter programmiert.
- können Sie die Filter parametrieren.
- haben Sie die Filter zyklisch auf Ultraschallmesswerte angewendet und das Filterverhalten analysiert.
- können Sie eine Funktion in MATLAB® programmieren und aufrufen.
Lernzielkontrolle
- Wozu werden rekursive Filter benötigt?
- Nennen Sie die Formel für ein gl. Mittelwertfilter.
- Welche Parameter hat ein gl. Mittelwertfilter? Was bedeuten die Parameter?
- Nennen Sie die rekursive Formel für ein Tiefpassfilter.
- Welche Parameter hat ein Tiefpassfilter? Was bedeuten die Parameter?
- Vergleichen Sie die zwei rekursiven Filter. Nennen Sie Vor- und Nachteile.
- Wurde der Quelltext durch Header und Kommentare aufgewertet?
- Wurde auf
magic numbers
verzichtet? - Wurde die Programmierrichtlinie eingehalten?
Vorbereitung
Führen Sie als Vorbereitung den MATLAB® Onramp Kurs durch.
Arbeitsergebnis in SVN: MATLAB® Kurszertifikat
Versuchsdurchführung
Aufgabe 2.1: Gleitendes Mittelwertfilter
Ein gleitendes Mittlwertfilter bildet einen Mittelwert über k Messwerte mittels FIFO.
- Schreiben Sie die Funktion
GleitendesMittelwertFilter.m
, welches die Eingangswerte zyklisch filtert. Hier bei wird der Mittelwert über die letzten k Messwerte gebildet. - Testen Sie Ihre Funktion mit Ultraschallmesswerten mit statischen Zielen mit Ihrem Framework
zeigeZyklischUltraschallMessung.m
undUltraschallMessung.mat
Aus den Aufgaben 1.3 und 1.4. - Visualisieren Sie Messwerte und Filterergebnis in einem Plot mit Achsenbeschriftung und Legende.
- Testen Sie Ihre Funktion mit Ultraschallmesswerten mit dynamischen Zielen.
- Wählen Sie k anhand der Messwerte und diskutieren Sie Ihre Wahl mit Prof. Schneider.
Nützliche Befehle: plot, xlabel, ylabel, legend, persistent, isempty, isnan, function
Arbeitsergebnisse in SVN: GleitendesMittelwertFilter.m, testeGleitendesMittelwertFilter.m
Hinweise:
- Nutzen Sie ein Array als FIFO.
- Die Formel für das gleitende Mittelwertfilter lautet: für k Messwerte
Eine Einführung zu rekursiven Filtern finden Sie in folgendem Video.
- Gleitendes Mittelwertfilter: 19 m 52 s
- Tiefpassfilter: 29 m
Demo: SVN: DemoGleitenderMittelwert
Eine ausführliche Beschreibung mit Musterlösung finden Sie in [1, S. 11 ff.].
Aufgabe 2.2: Rekursives Tiefpassfilter
Ein rekursives Filter kann Messwerte in Echtzeit während der Laufzeit filtern. Nutzen Sie ein Tiefpassfilter, um die Messwerte zu filtern.
- Schreiben Sie die Funktion
TiefpassFilter.m
, welches die Eingangswerte zyklisch filtert. Hierbei wird der Tiefpass berechnet. - Testen Sie Ihre Funktion mit Ultraschallmesswerten mit statischen Zielen mit Ihrem Framework
zeigeZyklischUltraschallMessung.m
undUltraschallMessung.mat
Aus den Aufgaben 1.3 und 1.4. - Visualisieren Sie Messwerte und Filterergebnis in einem Plot mit Achsenbeschriftung und Legende.
- Testen Sie Ihre Funktion mit Ultraschallmesswerten mit dynamischen Zielen.
- Wählen Sie anhand der Messwerte und diskutieren Sie Ihre Wahl mit Prof. Schneider.
Arbeitsergebnisse in SVN: TiefpassFilter.m, testeTiefpassFilter.m
Hinweis:
- Die Formel für das Tiefpassfilter lautet: für den aktuellen Messwert .
- ist hierbei ein Filterparameter .
Demo: SVN: DemoTiefpassFilter.ino
Eine ausführliche Beschreibung mit Musterlösung finden Sie in [1, S. 11 ff.19].
Aufgabe 2.3: Filtervergleich
- Vergleichen Sie die Ergebnisse des Tiefpasses mit denen des gleitenden Mittelwertfilters.
- Zeigen Sie das ungefilterte und die gefilterten Signal in MATLAB® in einem Plot vergleichend an (vgl. Abb.1).
- Beschriften Sie die Achsen und nutzen Sie eine Legende.
Lernzielkontrollfragen:
- Wurde das Signalrauschen geglättet?
- Ist das gefilterte Signal verzögert?
- Welchen Einfluss haben die Filterparameter?
- Wie verhalten sich die gefilterten Signal bei Ausreißern?
Arbeitsergebnisse in SVN: testeFilterVergleich.m
Eine ausführliche Beschreibung mit Musterlösung finden Sie in [1, S. 27 ff.].
Aufgabe 2.4: Nachhaltige Doku
Sichern Sie alle Ergebnisse mit beschreibendem Text (message
) in SVN.
- Halten Sie die Regeln für den Umgang mit SVN ein.
- Halten Sie die Programmierrichtlinie für C und die Programmierrichtlinien für MATLAB® ein.
- Versehen Sie jedes Programm mit einem Header (Header Beispiel für MATLAB, Header Beispiel für C).
- Kommentiere Sie den Quelltext umfangreich.
Arbeitsergebnis in SVN: SVN Log
Tutorials
- Einrichtung von PuTTY
- HSHL-Wiki: Ultraschallsensor HC-SR04
- Funduino: Entfernungen mit einem HC-SR04 Ultraschallsensor am Arduino messen
Demos
- SVN: DemoUltraschallHCSR04
- SVN: DemoDebug2MATLAB
- SVN: DemoGleitenderMittelwert.ino
- SVN: DemoTiefpassFilter.ino
Literatur
- Kim, P.: Kalman-Filter für Einsteiger: mit MATLAB Beispielen. CreateSpace Independent Publishing: 2016. ISBN-13: 978-1502723789
- Schneider, U.: Programmierrichtlinie für für die Erstellung von Software in C. Lippstadt: 1. Auflage 2022. PDF-Dokument (212 kb)
→ Termine 1 2 3 4 5 6 7 8 9 10 11
→ zurück zum Hauptartikel: Informatik Praktikum 2