- für ATMega8 (ATMEL)
- Lokalisation von Schallquellen mit 2 Kanälen
- Übertragungsmedium: Luft
- präzise Richtungserkennung
Ganz genau müsste die Überschrift wahrscheinlich Richtungslokalisation lauten, da sich der Begriff Ortung auf die Auswertung der Reflektion von zuvor ausgesendeten Signalen bezieht, wie etwa bei Radar und Echolot. Die zurückgeworfenen Signale werden dann als sog. Sekundärschall bezeichnet. Der populärere Begriff Passive Schallortung ist dem einen oder anderen vielleicht aus der U-Boot-Technik des Zweiten Weltkriegs geläufig. Hier wurde der direkt von der Schallquelle auf kürzestem Wege zu den Mikrofonen gelangte Schall (sog. Primärschall) auf seine Richtung hin analysiert. Reichhaltige Informationen zu dem Themenkomplex Schall finden sich z.B. bei Wikipedia.
Mit dem vorliegenden Projekt
wird eine recht einfache aber erstaunlich gut funktionierende Methode
beschrieben, die Richtung der momentan lautesten Schallquelle mithilfe
zweier Electret-Kondensator-Mikrofone (ECM) zu lokalisieren.
Übertragungsmedium ist Luft. Vielleicht könnte dieses, wie später
beschrieben noch ausbaufähige Projekt, als Ausgangspunkt für eigene
Versuche dienen.
Auf die Funktionstüchtigkeit eines Nachbaus wird natürlich keine Gewährleistung gegeben.
Hardware
Als
Mikrocontroller kommt der ATmega8 (ATMEL) zum Einsatz. Er hat ein für
diese Anwendung ausreichend großes RAM. Programmiert wir z.B. mit dem
Adapter: my Smart USB V.2.11. Der Systemtakt wird über das Fuse-Low-Byte
auf 2 MHz eingestellt. Ein Quarz ist nicht notwendig. Die Messwerte
können mithilfe des Moduls aus dem Lernpaket Mikrocontroller (Franzis)
an den PC gesendet und mit dem Terminal von Lpmikros.exe dargestellt
werden. Die Programmierung ist mit dem Modul aber leider nicht möglich.
Zusätzlich
erfolgt die Datenausgabe über eine zweistellige 7-Segment-Anzeige mit
gemeinsamer Kathode. Jeder Anode wird ein 1-k-Widerstand vorgeschaltet
(Im Schaltplan nicht eingezeichnet!). Mit dieser Anzeige kann man das
Gerät auch ohne die störenden Lüftergeräusche des PC verwenden. Es
werden zwei handelsübliche, aber unbedingt baugleiche ECM's benötigt.
Sie müssen in einem Abstand von genau 19 cm zueinander montiert werden.
Die Mikrofonleitungen müssen abgeschirmt sein.
Die Verstärkung erfolgt auf einfache Weise mir einem Zweifach-Operationsverstärker (OPV). Getestet wurden die Typen MC1458 und LM358. Die Verstärkung ist für Experimente in weiten Grenzen bis zu 1000-fach einstellbar. Es ist wichtig, die Verstärkung bei beiden OPV's stets gleich hoch einzustellen. Der Abgleich kann dafür an den Messpunkten P1 und P2 erfolgen. Wer hierzu kein Oszilloskop besitzt, kann sich eines für die PC-Soundkarte als Freeware aus dem Internet herunterladen. Verzerrungen und gelegentliche Übersteuerungen, die bei einer solch einfachen Verstärkerschaltung eher auftreten, können toleriert werden, da sie die Ortung nicht maßgeblich stören. Als Trimmer sollten sog. Präzisions-Einstellregler (CONRAD) bzw. Miniatur-Regler Ø 6,6mm (REICHELT) verwendet werden, da sie aufgrund der geringen Größe nahe am OPV platziert werden können und so weniger empfindlich gegen Störeinflüsse sind.
Natürlich wären auch hochwertigere Vorverstärker einsetzbar. Die Schallortung funktioniert aber auch schon so. Zur Spannungsstabilisierung auf 5V wird ein Festspannungsregler verwendet.
Laufzeitdifferenz
Während das menschliche Gehör Schalllokalisation mit einer Vielzahl von Mechanismen durchführt, beschränkt sich dieses Projekt nur auf das wohl Wichtigste, die Messung von sog. Laufzeitdifferenzen: Befinden sich zwei Mikrofone und eine Schallquelle an unterschiedlichen Stellen im Raum, so trifft ein sich kreisförmig von dieser Quelle ausbreitendes Schallereignis aufgrund der Schallgeschwindigkeit zeitlich versetzt bei beiden Mikrofonen ein. Dieser Zeitunterschied wird Laufzeitdifferenz genannt und ist, bezogen auf die beiden Mikrofone, ein Maß für die Richtung zur Schallquelle. Sind die Mikrofone von der Quelle gleichweit entfernt, kommt der Schall also genau von vorne oder hinten, so tritt keine Differenz auf.
Schallquelle frontal
Je „seitlicher" der Schall auf die beiden Mikrofone trifft, desto größer ist die Laufzeitdifferenz.
Schallquelle seitlich
Die größte Differenz wird erreicht, wenn sich Schallquelle und beide Mikrofone auf einer gedachten Linie befinden.
Schallquelle ganz seitlich
In schneller Folge werden mit einer Rate von insgesamt ca. 40 kHz stets abwechselnd je ein Sample zuerst für den linken Kanal (ADC 0) und dann für den rechten Kanal (ADC 1) als 8-bit-ADC-Wert im RAM gespeichert. Pro Seite sind dies 250 Samples. Die dabei für den einzelnen Kanal zur Verfügung stehende Samplerate von ca. 20 kHz gestattet nach dem sog. Abtasttheorem (Shannon) eine obere Grenzfrequenz von ca. 10 kHz.
Sinussignal (10 kHz)
Hier
wurden die zuvor im RAM gespeicherten Werte einer 2-Kanal-Aufnahme mit
EXCEL dargestellt. Aufgenommen wurde ein NF-Signal von 10 kHz. Zu
erkennen ist, dass jedes Sample gerade eben noch einen Welleberg bzw.
ein Tal des Signals erfasst.
Um nun die aktuelle Laufzeitdifferenz eines Schallereignisses zu bestimmen, müssen die beiden Aufzeichnungen für den rechten und linken Kanal in Schritten von einem Sample gegeneinander verschoben werden, bis sie möglichst gut übereinstimmen. Dies wird berechnet, indem für jede Verschiebung die Summe aller 239 Differenzen der sich entsprechenden Samples von links und rechts gebildet wird. Die kleinste Summe steht dabei für die beste Übereinstimmung.
Bestimmung der Laufzeitdifferenz
Berechnungen
Wieviele Verschiebungen durchgeführt werden müssen, ist neben der Samplerate abhängig vom Abstand der Mikrofone zueinander. Für die Schallgeschwindigkeit gilt allgemein:
Für die temperaturabhängige Schallgeschwindigkeit in Luft gilt näherungsweise:
Bei Raumtemperatur ist somit:
Nach folgender Rechnung wurde ein „handlicher" Mikrofonabstand von 19 cm gewählt:
Benötigte Aufnahmezeit für 11 Samples bei 20 KHz:
Vom Schall bei Raumtemperatur zurückgelegte Strecke bei 11 Samples pro Kanal:
Es
müssen also bei einem Abstand von 19 cm und einer Rate von 20 kHz pro
Kanal jeweils 11 Verschiebungen durchgeführt werden. Zusammen mit der
Mittelposition sind somit 23 Stellungen miteinander zu vergleichen. Die
Anzahl für die bestmögliche Übereinstimmung (geringste Differenz)
entspricht dem Winkel der Schallrichtung.
Winkel und Positionen
Bei 23 Positionen beträgt die kleinste Auflösung:
Dies dürfte für die meisten Anwendungen genügen. Wer's genauer will, müsste den Mikrofonabstand und damit die Zahl der verschiebbaren Samples erhöhen.
Da die Bestimmung der Laufzeit auf der Messung von
differierenden Pegeln beruht, werden insbesondere die Signalanteile mit
der höchsten Lautstärke detektiert. Dabei dürfte es sich vor allem um
den richtungweisenden Primärschall handeln, da der Schalldruckpegel des
Sekundärschalls durch Absorption und Reflexion meist abnimmt. Bei jeder
der 23 Stellungen werden 239 Differenzen gebildet. Diese hohe Anzahl
wirkt zudem als Filter gegen Störungen.
Programmbeschreibung
Das Fuse-Low-Byte muss gem. der Tabelle im Programmcode auf 2 MHz eingestellt werden (0xE2). Im folgenden werden die einzelnen Programmsegmente dargestellt. Zunächst erfolgen die üblichen Konstanten- und Variablendefinitionen. Es werden keine Interrupts benötigt.
Hauptprogramm ab: STILLE EINMALIG KALIBRIEREN:
Nur
bei der allerersten Messwertaufnahme nach dem Einschalten ist die
Variable Stille = 0. In diesem Fall wird zunächst bei WARTEN_STILLE:
einen Moment gewartet, bis das Einschaltgeräusch verhallt ist und dann
nach Messwertaufnahme der höchste aller Werte in Stille gespeichert.
Während der Kalibration sollte der Geräuschpegel niedrig und die zu
lokalisierenden Signale nicht zu hören sein! Die Konstante Pegeldiff
wird zu Stille hinzuaddiert.
ab: TEST_MIN_PEGEL:
Bei jeder
weiteren Messwertaufnahme wird geprüft, ob mindestens ein Wert größer
als Stille ist. Nur dann erfolgt die weitere Signalverarbeitung. Je
niedriger also Pegeldiff ist, desto empfindlicher wird die Schallortung.
ab: LOOP_LINKS:
Laufzeitberechnungen
für die unteren 11 Positionen. Hierfür werden die Werte des linken
Kanals mithilfe von Routine Y_POSITION 11x um je ein Sample verschoben
und in jeder Stellung die Summe aller Differenzen der sich
entsprechenden Samples gebildet. Die kleinste Differenz wird in Diff_Min
(16bit) gespeichert. Zugleich wird die zugehörige Position in Diff_Step
gesichert.
ab: LOOP_RECHTS:
Laufzeitberechnungen für die
oberen 11 Positionen und die Mittelstellung. Hierfür werden die Werte
des rechten Kanals mit der Routine Z_POSITION 11x um je ein Sample
verschoben. Die weiteren Berechnungen erfolgen analog zu LOOP_LINKS.
ab: EXIT_LAUFZEIT:
Hier
enden die Laufzeitberechnungen. Falls zweimal hintereinander dieselbe
Position errechnet wurde, wird sie nun mithilfe der Routine LED_DISLPLAY
auf der 7-Segment-Anzeige ausgegeben und außerdem mit der Routine
WrCOM_2 an den PC gesendet. Wird einige Sekunden lang keine
Schallrichtung mehr erkannt, so wird die Anzeige gelöscht. Dieses
Zeitintervall wird mit der Variable Dauer und der Konstante Durchlauf
bestimmt.
WrCOM_2: Für einen Prozessortakt von 2 MHz modifizierte Version aus dem Lernpaket Mikrocontroller (FRANZIS). Ausgabe erfolgt mit dem Terminal von Lpmikros.exe.
ADC_START:
Initialisierung des ADC-Wandlers: Die Ergebnisse sind left-adjusted
(8bit). Wegen der geringen Auflösung kann der ADC-Takt auf 1 MHz erhöht
werden.
ADC_Rd_LEFT: ADC-Wandlung für den linken Kanal
ADC_Rd_RIGHT: ADC-Wandlung für den rechten Kanal
WARTEN: Allgemeine Warteschleife. Die Dauer wird mit der Variablen i gesteuert.
Y_POSITION: Errechnung der Startposition im RAM für die Verschiebung der Werte des linken Kanals mithilfe von Variable Step.
Z_POSITION: Errechnung der Startposition im RAM für die Verschiebung der Werte des rechten Kanals mithilfe von Variable Step.
LED_DISPLAY:
Wertausgabe von i durch die zweistellige 7-Segment-Anzeige. Die Anzeige
ist dunkel bei i = 0. Ausgabe von „Er" (Error) für i > 29.
Mögliche Verbesserungen
Die Schaltung könnte wie folgt optimiert werden:
Analoge Elektronik: Signale oberhalb von 10 KHz werden lt. dem og. Abtasttheorem fälschlicherweise als niedrigere Frequenzen detektiert. Da dieser Fehler an beiden Kanälen auftrifft, scheint er sich weitgehend selbst zu eliminieren. Einen Versuch mit einem Tiefpass wär's aber wohl wert. Wenn das zu lokalisierende Signal bekannt ist (z.B. Motorengeräusch, Sprache), könnte man mit einem Bandpass den wichtigsten Frequenzbereich herausfiltern und damit die Empfindlichkeit der Ortung erhöhen. Vielleicht liefert auch eine hochwertigere Mikrofonvorverstärkung bessere Ergebnisse.
Autokalibration für Ruherauschen: Anstelle der einfachen Kalibration direkt nach dem Einschalten wäre es denkbar, für einige Minuten den niedrigsten Schallpegel zu suchen und diesen dann als Referenzwert zu verwenden.
Bessere Signalauswertung: Momentan erfolgt die Anzeige einer neuen Richtung immer nur dann, wenn zweimal hintereinander der gleiche Wert gemessen wird. Erkannt werden müssten außerdem Messungen, die zwischen zwei Zahlen „hin- und herpendeln" (z.B. zwischen 14 und 15). Zusätzliche Genauigkeit könnte eine „statistische Auswertung" ermöglichen, bei der gleiche oder ähnliche Richtungswerte innerhalb eines bestimmten Zeitraumes auf ihre Häufigkeit hin überprüft werden. Würde das Ortungssystem z.B. zur Zielverfolgung genutzt, könnte auch eine „Plausibilitätsprüfung" stattfinden: Passt der aktuelle Winkel zu den Vorwerten entsprechend der bisherigen Bewegung des Zieles und der eigenen Bewegung ... ?
Richtmikrofone: Sollen weiter entfernte Signale lokalisiert werden, könnten die Mikrofone zu Richtmikrofonen umgestaltet werden. Entsprechende Konstruktionen dürften dabei das Klangbild durch Resonanzen nicht verfälschen!
Drittes Mikrofon: Mit zwei Mikrofonen ist die Schallortung nur in einem Radius von 180 Grad möglich, d.h. es wird nicht erkannt, ob das Signal von vorne oder hinten kommt. Für den vollen Radius von 360 Grad wäre ein drittes Mikrofon nötig. Sollte bei den drei Mikrofonaufnahmen die Grenzfrequenz von 10 kHz nicht unterschritten werden, müsste die Samplerate weiter erhöht werden, da in der gleichen Zeit jetzt drei anstatt zuvor zwei Kanäle aufgezeichnet werden würden. Dies könnte beim ATmega8 zu Geschwindigkeitsproblemen führen.
Haben Sie ein ähnliches Projekt entwickelt, Verbesserungsvorschläge oder Anregungen? E-Mails an elo@franzis.de werden an den Autor weiter geleitet.
Downloads: