AlphaBot: Messdatenverarbeitung mit MATLAB: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(15 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Arduino]]
[[Kategorie:Arduino]]
[[Datei:TesteFilterVergleich.jpg|thumb|rigth|450px|Abb. 1: Vergleich rauschunterdrückender Filter]]
[[Datei:TesteFilterVergleich.jpg|thumb|rigth|450px|Abb. 1: Vergleich rauschunterdrückender Filter]]
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]<br>
{|class="wikitable"
'''Modul:''' Praxismodul I<br>
|-
'''Lehrveranstaltung:''' Mechatronik, Informatik Praktikum 2, 2. Semester<br>
| '''Autor:''' || [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]
|-
| '''Modul:''' || Praxismodul II
|-
| '''Lehrveranstaltung:''' || Mechatronik, Informatik Praktikum 2, 2. Semester
|}


== Inhalt ==
== Inhalt ==
Zeile 40: Zeile 45:


== Versuchsdurchführung ==
== Versuchsdurchführung ==
=== Aufgabe 2.1: Gleitendes Mittelwertfilter ===
=== Aufgabe 1.1: Positionserfassung mit Ultraschall ===
# Lesen Sie die Messwerte des Ultraschall-Sensors auf ein statisches Ziele aus. Schreiben Sie hierzu ein Arduino-Programm <code>messeEntfernung.ino</code>. Messen Sie zyklisch die Zeit mit dem Befehl <code>millis()</code>.
# Messen Sie 10&thinsp;s auf ein statisches Ziel (z.&thinsp;B. einen Karton) in 30&thinsp;cm Entfernung.
# Nutzen Sie das Programm Putty, um die Daten der seriellen Schnittstelle in der ASCII-Datei <code>UltraschallMessung.txt</code> zu speichern. Eine Anleitung finden Sie unter der URL [[Einrichtung von PuTTY]].
# Schreiben Sie einmalig als Header die Bezeichnung der Messwerte Zeit in ms und Strecke in cm in die Textdatei.
 
'''Nützliche Befehle''': <code>pinMode(), digitalWrite(), pulseIn(), delayMicroseconds(), millis()</code>
 
'''Arbeitsergebnisse''' in SVN: <code>UltraschallMessung.txt, messeEntfernung.ino</code>
 
<div class="mw-collapsible mw-collapsed">
'''Tipp:''' Nutzen Sie das Demoprogramm [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoUltraschallHCSR04 DemoUltraschallHCSR04] als Programmierstart.
</div>
----
=== Aufgabe 1.2: Darstellung und Speicherung in MATLAB<sup>®</sup> ===
# Kopieren Sie das Demo [https://svn.hshl.de/usvn/project/Informatikpraktikum_1/show/trunk/Arduino/ArduinoLibOrdner/AlphaBot/examples/E32_DebugTxt2MATLAB/E32_DebugTxt2MATLAB.ino|<code>DemoDebugTxt2MATLAB.ino</code>] in Ihr Arbeitsverzeichnis und passen Sie es an.
# Laden und visualisieren Sie die Messdaten in <code>Ultraschallmessung.txt</code> mit MATLAB<sup>®</sup>.
# Sichern Sie die Achsenbeschriftung im 2x1 Cell-Array <code>stTitel</code>.
# Stellen Sie die Messdaten in einem Diagramm in cm über der Zeit in s dar.
# Beschriften Sie die Graphen.
# Speichern Sie die Messung in der Datei <code>UltraschallMessung.mat</code>.
 
'''Nützliche Befehle''': <code>plot, xlabel, ylabel, save</code>
 
'''Arbeitsergebnisse''' in SVN: <code>zeigeUltraschallMessung.m, UltraschallMessung.mat</code>
 
<div class="mw-collapsible mw-collapsed">
Gegeben (vgl. Abb. 1):
* <code>fZeit</code>: 1x100 Messwertarray der Zeit in s
* <code>fMesswerte</code>: 1x100 Messwertarray der Ultraschallwerte in cm
 
<code>save('UltraschallMessung.mat','fZeit',fMesswerte','stTitel')</code>
</div>
----
=== Aufgabe 1.3: Zyklische Messdatenverarbeitung in MATLAB<sup>®</sup> ===
# Schreiben Sie die Funktion <code>(fZeit, fEntfernung)=LeseUltraschall(k)</code> und speichern Sie diese in der Datei <code>LeseUltraschall.m</code>.
# Laden Sie darin <code>UltraschallMessung.mat</code> einmalig nur bei ersten Durchlauf und speichern Sie <code>fZeit, fEntfernung</code> als persistente Variablen.
# <code>(fZeit, fEntfernung)=LeseUltraschall(k)</code> gibt zwei Werte fZeit(k) und fEntfernung(k) zurück (z.&thinsp;B. [0 30] für 0&thinsp;s und 30&thinsp;m).
# Schreiben Sie das Rahmenprogramm <code>zeigeZyklischUltraschallMessung.m</code>, welches <code>LeseUltraschall</code> zyklisch aufruft.
# Stellen Sie im Rahmenprogramm die Messdaten in einem Diagramm in cm über der Zeit in s dar.
# Beschriften Sie den Graphen entsprechend Abb. 1.
 
'''Nützliche Befehle''': <code>plot, xlabel, ylabel, load, global, persistent, isempty, for, function</code>
 
'''Arbeitsergebnisse''' in SVN: <code>zeigeZyklischUltraschallMessung.m, LeseUltraschall.m</code>
 
 
<div class="mw-collapsible mw-collapsed">
[[Datei:PAP_Aufgabe_1_4.jpg|thumb|left|450px|Abb. 2: PAP für die zyklische Messdatenverarbeitung]]
</div>
----
=== Aufgabe 1.4: Gleitendes Mittelwertfilter ===
Ein gleitendes Mittlwertfilter bildet einen Mittelwert über k Messwerte mittels FIFO.
Ein gleitendes Mittlwertfilter bildet einen Mittelwert über k Messwerte mittels FIFO.
# Schreiben Sie die Funktion <code>GleitendesMittelwertFilter.m</code>, welches die Eingangswerte zyklisch filtert. Hier bei wird der Mittelwert über die letzten k Messwerte gebildet.
# Schreiben Sie die Funktion <code>GleitendesMittelwertFilter.m</code>, welches die Eingangswerte zyklisch filtert. Hier bei wird der Mittelwert über die letzten k Messwerte gebildet.
Zeile 55: Zeile 111:
* Nutzen Sie ein Array als FIFO.
* Nutzen Sie ein Array als FIFO.
* 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
* 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
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 1&thinsp;</strong>
| <strong>Einführung zu rekursiven Filtern&thinsp;</strong>
|-
|-
| Eine Einführung zu rekursiven Filtern finden Sie in folgendem Video.<br>
| Eine Einführung zu rekursiven Filtern finden Sie in folgendem Video.<br>
* Gleitendes Mittelwertfilter: 19&thinsp;m 52&thinsp;s
* Gleitendes Mittelwertfilter: 19&thinsp;m 52&thinsp;s
* Tiefpassfilter: 29&thinsp;m
* Tiefpassfilter: 29&thinsp;m
[[Datei:RekursiveFilter.mp4|start=0|800px|Eine Einführung zu rekursiven Filtern]]
<!--
<iframe key="panopto" path="/Panopto/Pages/Viewer.aspx?id=fce4a806-dcbf-4e92-b10d-ac69013d7cb1&autoplay=false&offerviewer=true&showtitle=true&showbrand=true&captions=false&interactivity=all" height="405" width="720" style="border: 1px solid #464646;" allowfullscreen allow="autoplay"></iframe>
<iframe key="panopto" path="/Panopto/Pages/Viewer.aspx?id=fce4a806-dcbf-4e92-b10d-ac69013d7cb1&autoplay=false&offerviewer=true&showtitle=true&showbrand=true&captions=false&interactivity=all" height="405" width="720" style="border: 1px solid #464646;" allowfullscreen allow="autoplay"></iframe>
-->
|}
|}


 
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
'''Demo:''' [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoGleitenderMittelwert SVN: DemoGleitenderMittelwert]  
| <strong>Demo&thinsp;</strong>
 
|-
|
[https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoGleitenderMittelwert SVN: DemoGleitenderMittelwert] <br>
Eine ausführliche Beschreibung mit Musterlösung finden Sie in [1, S.&thinsp;11&thinsp;ff.].
Eine ausführliche Beschreibung mit Musterlösung finden Sie in [1, S.&thinsp;11&thinsp;ff.].
</div>
|}
 
----
=== Aufgabe 2.2: Rekursives Tiefpassfilter ===
=== Aufgabe 1.5: Rekursives Tiefpassfilter ===
Ein rekursives Filter kann Messwerte in Echtzeit während der Laufzeit filtern. Nutzen Sie ein Tiefpassfilter, um die Messwerte zu filtern.
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 <code>TiefpassFilter.m</code>, welches die Eingangswerte zyklisch filtert. Hierbei wird der Tiefpass berechnet.
# Schreiben Sie die Funktion <code>TiefpassFilter.m</code>, welches die Eingangswerte zyklisch filtert. Hierbei wird der Tiefpass berechnet.
Zeile 86: Zeile 148:
| <strong>Demo&thinsp;</strong>
| <strong>Demo&thinsp;</strong>
|-
|-
| '''Demo:''' [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoTiefpassFilter/DemoTiefpassFilter.ino SVN: DemoTiefpassFilter.ino]<br>
| [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoTiefpassFilter/DemoTiefpassFilter.ino SVN: DemoTiefpassFilter.ino]<br>
Eine ausführliche Beschreibung mit Musterlösung finden Sie in [1, S.&thinsp;11&thinsp;ff.19].
Eine ausführliche Beschreibung mit Musterlösung finden Sie in [1, S.&thinsp;11&thinsp;ff.19].
|}
|}
 
----
=== Aufgabe 2.3: Filtervergleich ===
=== Aufgabe 1.6: Filtervergleich ===
# Vergleichen Sie die Ergebnisse des Tiefpasses mit denen des gleitenden Mittelwertfilters.
# 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 (vgl. Abb.1).  
# Zeigen Sie das ungefilterte und die gefilterten Signal in MATLAB<sup>®</sup> in einem Plot vergleichend an (vgl. Abb.1).  
Zeile 108: Zeile 170:
|}
|}


=== Aufgabe 2.4: Nachhaltige Doku ===
== Tutorial zum Einstieg ==
Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN.
* [[Software_Plagiat| Was ist ein Plagiat?]]
* Halten Sie die Regeln für den [[Software_Versionsverwaltung_mit_SVN|Umgang mit SVN]] ein.
* [[Einarbeitung_in_die_Versionsverwaltung_SVN|Einarbeitung in die Versionsverwaltung SVN]]
* Halten Sie die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie für C]] und die [[Medium:Programmierrichtlinien_für_Matlab.pdf|Programmierrichtlinien für MATLAB<sup>®</sup>]] ein.
* [[Software Planung| Software Planung mit PAP]]
* Versehen Sie jedes Programm mit einem Header ([[Header Beispiel für MATLAB]], [[Header Beispiel für C]]).
* [[Arduino|Einstieg in die Welt des Arduino]]
* Kommentiere Sie den Quelltext umfangreich.
* [[Einführung_in_MATLAB|Einführung in MATLAB<sup>®</sup>]]
 
* [[MATLAB-Befehle|MATLAB<sup>®</sup> Befehlsübersicht]]
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code>
 
== Tutorials ==
* [[Einrichtung von PuTTY]]
* [[Einrichtung von PuTTY]]
* [[Ultraschallsensor_HC-SR04| HSHL-Wiki: Ultraschallsensor HC-SR04]]
* [[Ultraschallsensor_HC-SR04| HSHL-Wiki: Ultraschallsensor HC-SR04]]
* [https://funduino.de/nr-10-entfernung-messen Funduino: Entfernungen mit einem HC-SR04 Ultraschallsensor am Arduino messen]
* [https://funduino.de/nr-10-entfernung-messen Funduino: Entfernungen mit einem HC-SR04 Ultraschallsensor am Arduino messen]
* [https://www.arduino.cc/reference/de/ Arduino Befehlsübersicht]
* [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie für C]]
* [[Medium:Programmierrichtlinien_für_Matlab.pdf|Programmierrichtlinien für MATLAB<sup>®</sup>]]


== Demos ==
== Demos ==
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoUltraschallHCSR04 SVN: <code>DemoUltraschallHCSR04</code>]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoDebugTxt2MATLAB/ SVN: <code>DemoDebugTxt2MATLAB</code>]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoUltraschallHCSR04 SVN: DemoUltraschallHCSR04]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoUltraschallHCSR04 SVN: DemoUltraschallHCSR04]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoDebug2MATLAB SVN: DemoDebug2MATLAB]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoDebug2MATLAB SVN: DemoDebug2MATLAB]
Zeile 132: Zeile 196:
# Schneider, U.: ''Programmierrichtlinie für für die Erstellung von Software in C.'' Lippstadt: 1. Auflage 2022. [[Medium:Programmierrichtlinie.pdf|PDF-Dokument (212&thinsp;kb)]]
# Schneider, U.: ''Programmierrichtlinie für für die Erstellung von Software in C.'' Lippstadt: 1. Auflage 2022. [[Medium:Programmierrichtlinie.pdf|PDF-Dokument (212&thinsp;kb)]]


== FAQ ==
* Muss ich die Lösungen selbst programmieren? '''Ja, nur Eigenleistung wird bewertet.'''
* Darf ich die Musterlösung 1:1 kopieren und als meine Leistung ausgeben? '''Nein, das ist ein [[Software_Plagiat|Plagiat]] und wird als Täuschungsversuch gewertet.'''


----
----
→ 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>
→ Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2025|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 SoSe25|11]]<br>
→ zurück zum Hauptartikel: [[AlphaBot_SoSe23|Informatik Praktikum 2]]
→ zurück zum Hauptartikel: [[AlphaBot_SoSe25|Informatik Praktikum 2]]

Aktuelle Version vom 26. März 2025, 13:37 Uhr

Abb. 1: Vergleich rauschunterdrückender Filter
Autor: Prof. Dr.-Ing. Schneider
Modul: Praxismodul II
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

  1. Wozu werden rekursive Filter benötigt?
  2. Nennen Sie die Formel für ein gl. Mittelwertfilter.
  3. Welche Parameter hat ein gl. Mittelwertfilter? Was bedeuten die Parameter?
  4. Nennen Sie die rekursive Formel für ein Tiefpassfilter.
  5. Welche Parameter hat ein Tiefpassfilter? Was bedeuten die Parameter?
  6. Vergleichen Sie die zwei rekursiven Filter. Nennen Sie Vor- und Nachteile.
  7. Wurde der Quelltext durch Header und Kommentare aufgewertet?
  8. Wurde auf magic numbers verzichtet?
  9. Wurde die Programmierrichtlinie eingehalten?

Vorbereitung

Führen Sie als Vorbereitung den MATLAB® Onramp Kurs durch.


Arbeitsergebnis in SVN: MATLAB® Kurszertifikat

Versuchsdurchführung

Aufgabe 1.1: Positionserfassung mit Ultraschall

  1. Lesen Sie die Messwerte des Ultraschall-Sensors auf ein statisches Ziele aus. Schreiben Sie hierzu ein Arduino-Programm messeEntfernung.ino. Messen Sie zyklisch die Zeit mit dem Befehl millis().
  2. Messen Sie 10 s auf ein statisches Ziel (z. B. einen Karton) in 30 cm Entfernung.
  3. Nutzen Sie das Programm Putty, um die Daten der seriellen Schnittstelle in der ASCII-Datei UltraschallMessung.txt zu speichern. Eine Anleitung finden Sie unter der URL Einrichtung von PuTTY.
  4. Schreiben Sie einmalig als Header die Bezeichnung der Messwerte Zeit in ms und Strecke in cm in die Textdatei.

Nützliche Befehle: pinMode(), digitalWrite(), pulseIn(), delayMicroseconds(), millis()

Arbeitsergebnisse in SVN: UltraschallMessung.txt, messeEntfernung.ino

Tipp: Nutzen Sie das Demoprogramm DemoUltraschallHCSR04 als Programmierstart.


Aufgabe 1.2: Darstellung und Speicherung in MATLAB®

  1. Kopieren Sie das Demo DemoDebugTxt2MATLAB.ino in Ihr Arbeitsverzeichnis und passen Sie es an.
  2. Laden und visualisieren Sie die Messdaten in Ultraschallmessung.txt mit MATLAB®.
  3. Sichern Sie die Achsenbeschriftung im 2x1 Cell-Array stTitel.
  4. Stellen Sie die Messdaten in einem Diagramm in cm über der Zeit in s dar.
  5. Beschriften Sie die Graphen.
  6. Speichern Sie die Messung in der Datei UltraschallMessung.mat.

Nützliche Befehle: plot, xlabel, ylabel, save

Arbeitsergebnisse in SVN: zeigeUltraschallMessung.m, UltraschallMessung.mat

Gegeben (vgl. Abb. 1):

  • fZeit: 1x100 Messwertarray der Zeit in s
  • fMesswerte: 1x100 Messwertarray der Ultraschallwerte in cm

save('UltraschallMessung.mat','fZeit',fMesswerte','stTitel')


Aufgabe 1.3: Zyklische Messdatenverarbeitung in MATLAB®

  1. Schreiben Sie die Funktion (fZeit, fEntfernung)=LeseUltraschall(k) und speichern Sie diese in der Datei LeseUltraschall.m.
  2. Laden Sie darin UltraschallMessung.mat einmalig nur bei ersten Durchlauf und speichern Sie fZeit, fEntfernung als persistente Variablen.
  3. (fZeit, fEntfernung)=LeseUltraschall(k) gibt zwei Werte fZeit(k) und fEntfernung(k) zurück (z. B. [0 30] für 0 s und 30 m).
  4. Schreiben Sie das Rahmenprogramm zeigeZyklischUltraschallMessung.m, welches LeseUltraschall zyklisch aufruft.
  5. Stellen Sie im Rahmenprogramm die Messdaten in einem Diagramm in cm über der Zeit in s dar.
  6. Beschriften Sie den Graphen entsprechend Abb. 1.

Nützliche Befehle: plot, xlabel, ylabel, load, global, persistent, isempty, for, function

Arbeitsergebnisse in SVN: zeigeZyklischUltraschallMessung.m, LeseUltraschall.m


Abb. 2: PAP für die zyklische Messdatenverarbeitung

Aufgabe 1.4: Gleitendes Mittelwertfilter

Ein gleitendes Mittlwertfilter bildet einen Mittelwert über k Messwerte mittels FIFO.

  1. Schreiben Sie die Funktion GleitendesMittelwertFilter.m, welches die Eingangswerte zyklisch filtert. Hier bei wird der Mittelwert über die letzten k Messwerte gebildet.
  2. Testen Sie Ihre Funktion mit Ultraschallmesswerten mit statischen Zielen mit Ihrem Framework zeigeZyklischUltraschallMessung.m und UltraschallMessung.mat Aus den Aufgaben 1.3 und 1.4.
  3. Visualisieren Sie Messwerte und Filterergebnis in einem Plot mit Achsenbeschriftung und Legende.
  4. Testen Sie Ihre Funktion mit Ultraschallmesswerten mit dynamischen Zielen.
  5. 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: x¯GM(k)=x(1)+x(2)++x(k)k für k Messwerte

Aufgabe 1.5: Rekursives Tiefpassfilter

Ein rekursives Filter kann Messwerte in Echtzeit während der Laufzeit filtern. Nutzen Sie ein Tiefpassfilter, um die Messwerte zu filtern.

  1. Schreiben Sie die Funktion TiefpassFilter.m, welches die Eingangswerte zyklisch filtert. Hierbei wird der Tiefpass berechnet.
  2. Testen Sie Ihre Funktion mit Ultraschallmesswerten mit statischen Zielen mit Ihrem Framework zeigeZyklischUltraschallMessung.m und UltraschallMessung.mat Aus den Aufgaben 1.3 und 1.4.
  3. Visualisieren Sie Messwerte und Filterergebnis in einem Plot mit Achsenbeschriftung und Legende.
  4. Testen Sie Ihre Funktion mit Ultraschallmesswerten mit dynamischen Zielen.
  5. 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: x¯TP(k)=αx¯(k1)+(1α)x(k) für den aktuellen Messwert x(k).
  • α ist hierbei ein Filterparameter 0<α<1.

Aufgabe 1.6: Filtervergleich

  1. Vergleichen Sie die Ergebnisse des Tiefpasses mit denen des gleitenden Mittelwertfilters.
  2. Zeigen Sie das ungefilterte und die gefilterten Signal in MATLAB® in einem Plot vergleichend an (vgl. Abb.1).
  3. Beschriften Sie die Achsen und nutzen Sie eine Legende.

Lernzielkontrollfragen:

  1. Wurde das Signalrauschen geglättet?
  2. Ist das gefilterte Signal verzögert?
  3. Welchen Einfluss haben die Filterparameter?
  4. Wie verhalten sich die gefilterten Signal bei Ausreißern?

Arbeitsergebnisse in SVN: testeFilterVergleich.m

Tutorial zum Einstieg

Demos

Literatur

  1. Kim, P.: Kalman-Filter für Einsteiger: mit MATLAB Beispielen. CreateSpace Independent Publishing: 2016. ISBN-13: 978-1502723789
  2. Schneider, U.: Programmierrichtlinie für für die Erstellung von Software in C. Lippstadt: 1. Auflage 2022. PDF-Dokument (212 kb)

FAQ

  • Muss ich die Lösungen selbst programmieren? Ja, nur Eigenleistung wird bewertet.
  • Darf ich die Musterlösung 1:1 kopieren und als meine Leistung ausgeben? Nein, das ist ein Plagiat und wird als Täuschungsversuch gewertet.

→ Termine 1 2 3 4 5 6 7 8 9 10 11
→ zurück zum Hauptartikel: Informatik Praktikum 2