Solche Systeme gibt es ganz professionell, ich komme nur gerade nicht auf den Namen einer der Firmen die das regelmäßig auf der Sensor + Test in Nürnberg demonstrieren.
Wenn das Geräusch länger andauert, oder öfters zu hören ist, könnte ich auch eine etwas unelegantere, aber leichtere Lösung anbieten:
man isoliert einen Lautsprecher von hinten und von den Seiten und dreht ihn dann mit einem Servo so weit, bis man die lautesten Töne hört. Von dort kommt dann ungefähr das Geräusch.
Gruß, Yaro
Solche Systeme gibt es ganz professionell, ich komme nur gerade nicht auf den Namen einer der Firmen die das regelmäßig auf der Sensor + Test in Nürnberg demonstrieren.
Ich war mal auf einem AES-Vortrag in Wien, da haben sie das vorgestellt
http://www.acoustic-camera.com/
War ziemlich interessant, ist aber mit einem uC nicht realisierbar
Was für einen "Ton" willst Du denn orten? Liegende Sinnüsse, Sprache, Impulse? Bedenke, dass ein Mensch auch hauptsächlich über die Laufzeit lokalisiert, allerdings frequenzabhängig über Fasenlaufzeiten und die erste Wellenfront (also die erste Schallwelle eines Geräusches). Liegende Töne lassen sich nur sehr schwer lokalisieren, meistens nimmt man ihn an dem Ort wahr an dem man ihn bei seinem Beginn (erste Wellenfront) geortet hat. Dort vermuten wir ihn dann, selbst wenn er sich bewegt.
voll digital wird das vermutlich etwas übel werden, da die 2-4
Mikrofone quasi gleichzeitig aufgenommen
werden müssten und noch dazu in hoher Auflösung um den
Zeitversatz rausrechnen zu können.
Ich denk analog wird das etwas einfacher.
Im Prinzip sollte es so gehen, die Mikrofonsignale durch
Bandpässe auf den gewünschten Frequenzbereich filtern,
evtl. vorher per OpAmp verstärken und die Signale auf nen
Subtrahierer (Op-Schaltung) lassen ... dann haste nur noch
die Unterschiede. Das Ergebnis wäre dann z.B.
positiver Wert = Schall von rechts, negativer Wert = Schall von links
Vor den Erfolg haben die Götter den Schweiß gesetzt
Hallo!
Die von Besserwessi angeschprochene Korrelation der Signale ist notwendig, da sie für kleine Phasenunterschiede fast gleiche Lautstärke haben und die Amplitudendifferenz ist fast immer gleich Null. Die von Vitis vorgeschlagene Idee ist besser wenn man Richtungsmikrofone verwendet und sie um Korrelator ergänzt. Dann könnte man anhand der Phasenverschiebung die seitliche Lage und anhand der Lautstärke die Entfernung der Geräuschquelle orten (also quasi zweiaxig).
Die Korrelation lässt sich analog ziemlich einfach per Synchrondetektor realisieren, wobei Signall von einem Kanal das andere Kanal abtastet. Dann ist die Ausgangspannung proportional zur Phasenverschiebung der Signale. Fraglich ist nur, was man tatsächlich erreicht für mehre Frequenzen gleichzeitig in einem Raum wo Echos gibt. Eigentlich um ein komplexes Geräusch zu orten reicht eine selektiv gefilterte Frequenz.
MfG
DANKE für die vielen antworten!
Die Korrelationsmethode hat keine Probleme mit verschiedener Ampltidude auf beiden Mikrofonen. In die Korrelationsfunktion geht das Produkt der Amplituden einfach als Vorfaktor ein. Wie die Verteilung ist, ist dabei völlig egal. Man sollte schon wegen der Phasenverschiebungen 2 gleiche Mikrofone und auch Verstärker nehmen, wer kommt auch schon auf die Idee hier 2 verschiedene Lösungen probieren zu wollen. Damit hat man auch automatisch eine fast gleiche Amplitude.
Die Korrelationsfunktion kann man zwar auch analog bestimmen, aber dafür 20 Verzögerungsleitungen, mutipliezierer und Filter aufzubauen, kommt mir deutlich aufwendiger vor als die digitale Lösung mit einem Mega88. Die Abschätzung zeigt ja gerade das es für die relativ grobe Auflösung in Software reichen sollte.
Eine einfache Hochpassfilterung sollte man der Auswertung wohl auch noch spendieren, denn zu niedriege Töne geben relativ viel Amplitude , aber wenig Richtingsinformaltion. Das sollte aber kein Problem sein.
Wenn man unbedingt will gibt es auch noch einen Methode die korrelationsfunktion mit hilfe der FFT zu berechenen. Da braucht man allerdings mehr Speicher um Rechenzeit einzusparen und die einfache Möglichkeit sich auf einzelen Frequenzen zu beschränken.
Die korreltaionsmethode sollte auch mit durchgehenden Geräschen gehen. Nur wenn man nur hohe Freuqnezn hat, dann gibt es probleme.
Eine wirkliche Begrenzung sind aber Echos und Refelxionen des Schalls.
witzig ... wieviele Mikrofone willst Du denn mit wieviel
kHz abfragen? Mit nem ATMega? ....
n ATMega schafft auf einem Kanal in 10Bit Auflösung rund 15KHz
Samplerate, macht ne maximale Oberkante für das Signal von
7,5kHz auf einem (1!) Kanal ... Bei 2 Kanälen teilt sich das
nicht nur durch 2, sondern noch weniger, weil ja der interne Mux
umgeschaltet werden muss .. optimistisch gerechnet 3kHz
Und die Werte willste wirklich noch korrelieren? Bin mal
gespannt wies weiter geht, drück aber die Daumen
für mehr wirste nen externen adc brauchen denke ich ... was schnelles halt
Vor den Erfolg haben die Götter den Schweiß gesetzt
Die 15 kHz sind für die volle 10 bit Auflösung. Bei 20 kHz hat man noch nicht viel verlust in der Auflösung. Duch das umschalten des MUX hat man keinen weiteren Zeitverlust. Man mißt im Autotrigger modus, abwechseld links und rechts. Das ist kein Problem, solange die Quelle niederohmig (< 5 kOhm) ist.
Wegen der recht groben Einstellung des Teilers für den AD wird das dann wohl statt der 10 kHz mehr auf etwa 9800 Hz bei einem 16 MHz Quarz oder etwa 12,3 kHz bei einem 20 MHz Quarz hinauslaufen.
Die Rechenzeit für die Krrelation sollte reichen, wie oben gezeigt. Man hat ja etwa 100 Zyklen für je eine Multiplication und Addiition.
Ich habe mal probiert wie schnell GCC beim Berechnen der Korrelationsfunktion wird: es reicht gerade so für 10 Verzögerungszeiten bei einem ADC Sample alle 1024 Zyklen. Da man Wechselweise jeweils die Hälfte neu berechet gibt das dann 20 Stützstellen. Allerdings ist das noch ohne einen Software-Hochpassfilter und ein paar kleine Tests. Vermutlich wird man also doch auf ein klein bischen inline ASM zurückgreifen müssen um 20 Stützstellen für die AKF sinnvoll zu berechenen.
Edit:
Mit etwas inline ASM klappt es von der Zeit ganz gut: ca. 690 Zyklen für die AD-Wandler ISR. Das reicht also für einen Teiler von 64 beim AD-Takt.
Da sollte auch noch etwas Luft für einen Filter sein.
Wenn man die ganze ISR in ASM schreibt, hat man noch etwas mehr Luft mit der Rechenzeit.
Lesezeichen