Matched-Filter

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

Autoren: Phillip Blunck, Marius Schaffer

Betreuer: Prof. Schneider

"Unter Optimalfilter (engl. matched filter) versteht man in der Nachrichtentechnik ein Filter, welches das Signal-Rausch-Verhältnis (engl. signal to noise ratio, SNR) optimiert. In der Literatur findet man auch häufig die Bezeichnungen Korrelationsfilter, Signal-angepasstes Filter (SAF) oder nur angepasstes Filter. Das Optimalfilter dient zur optimalen Bestimmung des Vorhandenseins (Detektion) der Amplitude oder der Lage einer bekannten Signalform in Gegenwart von Störungen (Parameterschätzung)" [1].

Aufgaben

  • Analysieren Sie die Funktion des Matched-Filters im Ardumower Quellcode.
  • Setzen Sie das Matched-Filter in Simulink um.
  • Testen Sie die Funktion.
  • Dokumentieren Sie Ihre Ergebnisse wissenschaftlich.

Deadline für diese Teilaufgabe: 09.11.17

Anforderungen

Die Anforderungen des Matched-Filters beziehen sich auf die Anforderungen der Perimeterschleife. Mithilfe dieses Filters soll die Perimeterschleife erkannt und der Abstand des ArduMowers zu der Schleife ermittelt werden.

Herangehensweise

  1. Machen Sie sich mit dem Quelltext des Ardumower Projektes vertraut.
    1. Mit welcher Abtastrate wird der ADU betrieben?
    2. Wie funktioniert das Matched-Filter?
  2. Machen Sie sich anhand der Literatur unten mit der Theorie des Matched-Filters vertraut.
  3. Machen Sie Aufzeichnungen mit dem Oszilloskop. Im Vergleich müssen hier die Eingangsgrößen für das Filter aufgezeichnet werden.-erledigt
  4. Machen Sie Aufzeichnungen für unterschiedliche Abstände von Draht sowie außerhalb, innerhalb und auf dem Draht.-erledigt
  5. Lesen Sie diese Aufzeichnungen sequenziell in Simulink ein.-erledigt
  6. Wenden Sie das Matched-Filter darauf an, so dass der Wert 1 für innerhalb und -1 für außerhalb der Perimeterschleife ausgegeben wird.-erledigt
  7. Ersetzen Sie die offline Datenquelle durch die Echtzeitmessungen vom Arduino.-erledigt
  8. Testen Sie das System, so dass auch für die Echtzeitmessungen der Wert 1 für innerhalb und -1 für außerhalb der Perimeterschleife ausgegeben wird.-erledigt
  9. Lässt sich aus der Signalstärke der Abstand zum Draht schätzen? -erledigt
  10. Dokumentieren Sie Messaufbau, Durchführung und Ergebnis in diesem Artikel.

Theorie des Matched-Filters

Abb.1: Perimeterschleife Signal
Abb.1: Perimeterschleife Signal

Das Ausgangssignal wird durch das Umgebungsrauschen so gestört, sodass das Signal nur noch sehr schlecht interpretiert werden kann. Aus diesem Grund sendet der Sender ein ausgewähltes digitales Signal, welches oben in der Abbildung 1 zu sehen ist. Dieses Signal wird mit dem Umgebungsrauschen überlagert und muss nun gefiltert werden. Dies wird mit dem Matched-Filter gemacht. Nach Anwenden des Matched-Filter erhält man ein Signal, was entweder Piecks ins Positive oder Negative zur Folge hat. Anhand dieses Ergebnisses lässt sich einfach bestimmen, ob sich der ArduMower innerhalb oder außerhalb der Perimeterschleife befindet. Der Matched-Filter vergleicht das eingehende Signal mit einem Referenzsignal und korreliert es. Findet sich wie in der Abbildung 1 eine Korrelation wieder, erhält der Matched-Filter das entsprechende Piek. Umso mehr Piecks entstehen, umso höher ist die vorherrschende Korrelation.












Versuchsaufbau/Auswertung mit Oszilloskop

Als erste Simulation eines Matched-Filters werden mit einem Oszilloskop die empfangenen Signale innerhalb und außerhalb einer Perimeterschleife aufgenommen und aufgezeichnet. In den Abbildungen 1 bis 3 sind die verschiedenen Aufzeichnungen des Oszilloskops zu sehen. In Gelb ist jeweils das Signal der Senderbox und in Blau das empfangene Signal der Empfängerspule zu sehen. Die aufgezeichneten Werte werden nun mit einem USB-Stick ausgelesen und im nächsten Kapitel mit Matlab/Simulink auf den Matched-Filter angewendet.

Matched Filter Anwendung in Simulink

Mithilfe der aufgenommenen Werte des Oszilloskops ist es möglich mit dem Signal Generator Block in Matlab/Simulink die empfangenen und gesendeten Signale zu erzeugen und diese an den Matched-Filter weiterzugeben. In der Abb. 4 sind das Sendersignal und die 3 verschiedenen empfangenen Signale der Empfängerspule mit dem Signalgenerator erzeugt worden. Anhand der Messwerte des Oszilloskops erzeugt der Signal Generator das passende Signal. Das Simulink Matched-Filter-Modell (Abb.5) besteht aus dem Signal Generator, dem Matched-Filter und 3 verschiedenen Scopes. Der Matched-Filter erhält zwei inputs und gibt einen Output heraus. Im Eingang X erhält der Matched-Filter das empfangene Signal der Spule und vergleicht dieses an dem Coeff Eingang zu bestimmten Sample Times mit dem Sendersignal. In den Abbildungen 6 bis 8 sind die verschiedenen Ergebnisse des Matched-Filters aufgezeichnet.

Aufgrund der erhaltenen gefilterten Werte des Matched-Filters aus der Simulink Library ist eine eindeutige Zuordnung des Standortes in Bezug auf die Perimeterschleife nicht gewährleistet. Eine eindeutige Zuweisung eines Wertes zum Zustand kann nicht getroffen werden. Außerdem kann anhand dieses Filters ebenfalls nicht der Abstand des Roboters zur Perimeterschleife detektiert werden. Als Lösung für dieses Problem wird eine eigenständige S-Function mit dem vorhandenen Arduino C-Code umgesetzt. Diese Lösung wird im nächsten Kapitel erläutert.

Ergebnis der Umseztung in Matlab/Simulink anhand einer S-Function

Mithilfe des S-Function Builder Blocks ist es möglich, selbst einen Block mit den gewünschten Anforderungen zu erstellen. Dieser Block erhält von dem Pin A5 des Arduinos das empfangene Signal an der Empfängerspule und matched dieses Signal mit einem vorher festgelegten Referenzsignal und gibt ein Magnitude, d.h die Stärke des Signals, in Abhängigkeit von dem Abstand und dem Zustand in Bezug auf die Perimeterschleife aus. Die Magnitude-Werte befinden sich im Intervall von ca. -1300 bis 1300. Ist der Wert negativ befindet sich die Spule außerhalb der Schleife und ist er positiv so befindet sie sich innerhalb der Schleife. Umso negativer das Signal ist, desto näher befindet sich die Spule an der Schleife und umso höher der positive Wert ist, umso näher ist die Spule innerhalb der Schleife. Diese Magnitude-Werte haben wir in Bezug auf den Abstand zur Perimeterschleife in einer Look-Up Table festgehalten. Anhand dieser Werte können wir aufgrund der Stärke des Magnitude Wertes auf den Abstand zur Perimeterschleife schließen und diesen abschließend mit der passenden Polarität an die Mähstrategie weitergeben, die dadurch auf die Position des ArduMowers zurückschließen kann.

Abb.9:Matched_Filter Simulink Modell mit S_Function














Quelltext

Der erzeugte Quelltext durch den selbst erstellten Matched-Filter S-function Block ist in der nachfolgenden Abbildung dargestellt. Der entwickelte Arduino C-Code wurde mithilfe des S-Function Builder Blocks in Simulink übertragen. Die Erstellung und Nutzung eines solchen S-Function Builder Blocks ist in dem angehängten Artikel erläutert. Erstellen_eigener_S-Functions

/*
 * Include Files
 *
 */
#if defined(MATLAB_MEX_FILE)
#include "tmwtypes.h"
#include "simstruc_types.h"
#else
#include "rtwtypes.h"
#endif



/* %%%-SFUNWIZ_wrapper_includes_Changes_BEGIN --- EDIT HERE TO _END */
#ifndef MATLAB_MEX_FILE
#include <math.h>
#include <Arduino.h>
#include "Wire.h"
#include "Wire.cpp"
#include "twi.h"
#include "twi.c"
#include "EEPROM.h"
#include "EEPROM.cpp"
#include "drivers.h"
#include "drivers.cpp"
#include "adcman.h"
#include "adcman.cpp"
#include "perimeter.h"
#include "perimeter.cpp"
#endif
/* %%%-SFUNWIZ_wrapper_includes_Changes_END --- EDIT HERE TO _BEGIN */
#define y_width 1

Perimeter perimeter;

/*
 * Create external references here.  
 *
 */
/* %%%-SFUNWIZ_wrapper_externs_Changes_BEGIN --- EDIT HERE TO _END */
/* extern double func(double a); */
/* %%%-SFUNWIZ_wrapper_externs_Changes_END --- EDIT HERE TO _BEGIN */

/*
 * Output functions
 *
 */
extern "C" void sMatched_filter_Outputs_wrapper(int16_T *MAG,
			const real_T *xD)
{
/* %%%-SFUNWIZ_wrapper_Outputs_Changes_BEGIN --- EDIT HERE TO _END */
/* This sample sets the output equal to the input
      y0[0] = u0[0]; 
 For complex signals use: y0[0].re = u0[0].re; 
      y0[0].im = u0[0].im;
      y1[0].re = u1[0].re;
      y1[0].im = u1[0].im;
 */

if (xD[0]==1) {
    #ifndef MATLAB_MEX_FILE
          
    ADCMan.run();  
    //ADCMan.calibrate();
    MAG[0]=(int)perimeter.getMagnitude(0);
    # endif
}
/* %%%-SFUNWIZ_wrapper_Outputs_Changes_END --- EDIT HERE TO _BEGIN */
}

/*
 * Updates function
 *
 */
extern "C" void sMatched_filter_Update_wrapper(int16_T *MAG,
			real_T *xD)
{
/* %%%-SFUNWIZ_wrapper_Update_Changes_BEGIN --- EDIT HERE TO _END */
/*
 * Code example
 *   xD[0] = u0[0];
 */

if (xD[0] != 1){
    # ifndef MATLAB_MEX_FILE
    ADCMan.init();
    perimeter.setPins(A5, A4);          
    perimeter.useDifferentialPerimeterSignal = true;
    ADCMan.calibrate();
    #endif
    xD[0]=1;
}
/* %%%-SFUNWIZ_wrapper_Update_Changes_END --- EDIT HERE TO _BEGIN */
}

Der Quelltext in dem S-Function Builder Block ruft ausschließlich Funktionen aus den angehängten Header-Dateien des ArduMower Arduino Codes auf. Zum Verständnis der Funktion des ganzen Blocks müssen die einzelnen Header Dateien betrachtet werden. Der Quellcode ist auf der ArduMower Seite frei erhältlich.

Bewertung

Der selbst erstellte Matched-Filter mithilfe eines S-Function Builder Blocks ist nach einer kurzen Einarbeitungszeit einfach umzusetzen. Der Matched-Filter ist vollständig implementiert und funktionsfähig. Die Erstellung dieses Filters ist enthalten in den Anforderungen der Perimeterschleife und wird daher auch in dem Kapitel bewertet. Perimeterschleife

Zusammenfassung

Da eine Nutzung des in Simulink vorhandenen Blocks nicht möglich ist, wurde mit der Selbsterstellung eines Blocks die Verarbeitung des Perimeterschleifensignals umgesetzt. Das Modell ist einfach aufgebaut und Quellcode musste nicht eigenständig entwickelt werden, da lediglich der mitgelieferte Arduino C-Code in dem Simulink Block eingefügt werden konnte.

Ausblick

Einzig muss die Look-Up Table an die Umgebung angepasst werden, da in diesem Projekt eine Funktion in Anhängigkeit der Signalstärke zum Abstand zur Schleife erstellt wurde. Wünschenswert ist ebenfalls eine automatische Kalibrierung der Look-Up Table in Abhängigkeit zum Abstand.

Quellen

http://www.grauonline.de/alexwww/ardumower/filter/filter.html

Literatur

  1. Ardumower Wiki: Sendeschleife
  2. YouTube-Video: Ardumower: perimeter wire, correlation, matched filter (theory) - www.ardumower.de
  3. Matched filter simulator
  4. Mathworks Artikel - Matched Filtering (R2017b) inkl. Beispiel
  5. Mathworks Artikel - phased.MatchedFilter System object
  6. Handbuch Radar und Radarsignalverarbeitung S. 157-195: Matched Filter, Likelihood Ratio Filter und Prewhitening Filter
  7. Hufschmid, M.: Information und Kommunikation: Grundlagen und Verfahren der Informationsübertragung.. Wiesbaden: Teubner, 2007, S. 157-161. ISBN-13: 978-3835190771
  8. Mark Richards, Mark Richards: Fundamentals of Radar Signal Processing. Mcgraw-Hill Education Ltd, 2. Aufl. 2013. ISBN-13: 978-0071798327
  9. Skolnik, Merrill: Introduction to Radar Systems. Mcgraw Hill Book Co, 3. Aufl. 2003. ISBN-13: 978-0072881387
  10. Oppenheim, A.; Schafer,R: Discrete-Time Signal Processing. Pearson Education Limited. 3. Aufl. 2013. ISBN-13: 978-1292025728
  11. Ohm, J.-R.; Lüke, H. D.: Signalübertragung: Grundlagen der digitalen und analogen Nachrichtenübertragungssysteme. Berlin: Springer, 12. Auflage 2014. ISBN=3540692568

Einzelnachweise


→ zurück zum Hauptartikel: Perimeterschleife