Archiv verlassen und diese Seite im Standarddesign anzeigen : herkunft eines tones orten
Christian3
06.07.2009, 11:09
Hallo,
ich will das mein RP6 die herkunft eines tones *orten*
kann da hab ich mir volgenes überlegt:
http://christian1603.lima-city.de/RP6.bmp
der soll jetzt schauen welches mikro von 1-4 am meisen strom erzeugt und so rausfinden von wo der ton kommt meint ihr das die kleinen abstende zwichen 1-4 dafür reichen? und ob das überhaupt so gehen kann?
wenn nicht wie könnte icch das anders machen ?
ich frag lieber voher bevor ich mein geld ausm fenster raus werfeXD
DANKE SCHONMAL
LG
Chistian
drei reichen theoretisch auch am besten wird es sein wenn du die micros im quadrat ausrichtest das macht die rechnerei kleines bisschen einfacher. bevor du geld aus dem fenster wirfst was willst du kaufen? paar operationverstärker und 4 micros. und dann soll er wohl die schallquella anfahren und kurz davor stehen bleiben?
Yossarian
06.07.2009, 12:42
Hallo
1. Schreibt mal vernünftig mit Punkt und Komma, damit der Text lesbar wird.
2. Du meinst wohl orten, nicht ordnen.
3. Die Mikros sind nicht so teuer, daß man von rausgeschmissenen Geld sprechen muß, da die dann gemachten Erfahrungen in der Wertigkeit wohl höher angesetzt werden können.
Mit freundlichen Grüßen
Benno
Die Ortung über die Unterschiede in der Lautstärke dürfte schwierig werden, weil die Unterschiede ziemlich klein ausfallen werden. Du brauchst Mikrofone mit einer ausgeprägten Richtwirkung, die für Schall von hinten unempfindlich sind.
Wenn der Ton plötzlich kommt (Klatschen etc.), dann könnte man vielleicht auch über die Laufzeit des Schalls auswerten. 20cm sind etwa 0,58ms Laufzeitdifferenz.
Tach zusammen,
ich hab auf Knolles Bastelpage ein "Richtmikrofon" gefunden.
Richtmikrofon (http://home.berg.net/opering/projekte/37/index.htm)
vielleicht kann man daraus was machen.
Gruß,
Randel
P.s. Bin ebenfalls seid einer Woche RP6 besitzer und trage gerade Informationen und Ideen für kleine und große Projekte zusammen ;)
Christian3
06.07.2009, 15:26
Tach zusammen,
ich hab auf Knolles Bastelpage ein "Richtmikrofon" gefunden.
Richtmikrofon (http://home.berg.net/opering/projekte/37/index.htm)
vielleicht kann man daraus was machen.
Gruß,
Randel
wenn ich das richtig verstanden haben muss ich das zwei mal bauen um vorne hinten links und recht unterscheiden zu können. aber es müsste meiner meinung nach gehen DANKE
P.s. Bin ebenfalls seid einer Woche RP6 besitzer
Glückwunsch
Hallo!
Bevor jemand die Schaltung nachbauen würde, möchte ich empfehlen realistisch zu sein. Der Bereich Audiofrequenzen umfasst 20 Hz bis 20 000 Hz, was bedeutet, dass die Wellenlenge (angenommen die Wellengeschwindigkeit 300 m/s) verstreckt sich von 15 m bis 1,5 cm.
Wenn man nur die Sprache mit Frequenzen 300 bis 3000 Hz nimmt, sind es noch 1m bis 10cm. Für festen Abstand zwischen Mikrofonen 20 cm haben wir eine Mittelfrequenz um 1500 Hz. Diese Idee stellt also ein selektiven Filter dar mir verstreuter und frequenzabhängiger Raumcharakteristik.
Der Author scheibt selber rote Warnung:
Ich habe die Schaltung sowie das Layout noch nicht getestet, von daher hab ich keine Ahnung ob und wie die Sache so funktioniert.
Wer sie dennoch nachbaut bitte Infos an mich !!!! Damit ich sehe ob's geht oder ob's Probleme gibt.
Diese Aussage möchte ich nicht kommentieren... O:)
MfG
Besserwessi
06.07.2009, 17:52
Eine Möglichkeit ein Schallquelle zu orten ist es die Verzögerung zwischen den Signalen der Mikrofone zu bestimmen. Allerdings kann das ziehmlich rechenzeitintensiv werden, und einiges an Speicher brauchen. Vermutlich wird etwas viel für den AVR, wenn man sich nicht einschränkt auf z.B. einen kleinen Frequenzbereich.
Wenn man such auf plötzliche Geräuse wie klatschen beschränkt wird es einfacher.
Die idee mit dem Richtmikrofon ist auch nicht so schlecht. Allerdings ist die Richtwirkung mit 2 Mikrofonen noch nicht besonders hoch. Die Frequenzabhängigkeit der Richtwirkung stört weniger, da man die Frequenz ja mit auswerten kann und ggf. Frequenzen die nicht gebündelt werden einfach ignoriert.
Hallo!
Bevor jemand die Schaltung nachbauen würde, möchte ich empfehlen realistisch zu sein.
War nur ein Hinweis. Ich hab mich mit sowas absolut noch nicht befasst und mir is es nur eingefallen das ichs mal gesehen hatte.
Wie gesagt, vielleicht kann man was draus machen.
Gruß,
Randel
Besserwessi
07.07.2009, 23:11
Ich habe noch mal etwa über die Schallortung nachgedacht:
Die wesenliche Aufgabe ist es die Verzögerung zwischen dem Schall an 2 Mikrofonen zu bestimmen. Wenn man mehr Mikrofone hat, hat man halt ein paar mehr Mikrofonpaare, das Prinzip kann aber gleich bleiben.
Der direkte Weg, sozusagen brute force, ist gar nicht so aufwendig. Ist zum Teil etwas Mathematisch, aber noch nicht so schlimm wie es sein könnte wenn man es elegant machen will.
Eine gute Methode um verzögerungen zu bestimmen, ist es die Korrelationsfunktion. Dazu wird das eine Signal mit dem andern um eine bestimmte Zeit verzögernten multipliziert, und das ganze über ein Gewisses Zeitfenster gemittelt. Im Idealfall kommt dabei ungefähr Null raus, wenn die Verzögerungszeit nicht mit der Zeitverschiebung der beiden Signale übereinstimmt. Wenn die Verzögerung Stimmt, hat man 2 mal praktisch das Gleiche, und man bekommt den RMS wert, also die Lautstärke. Wenn man jetzt für verschieden Verzögerungen diese Korrelationsfunktion berechenet kreigt man soetwas wie eine Lautstärke als Funtion der Verzögerung. Wobei man die VErzögerung ja in einen Winkel übersetzen kann.
Die umetzung ist gar nicht so rechenzeitaufwendig wie gedacht. Wenn die beien Mikrofone etwa 30 cm auseinader liegen, hat man eine maximale Verzögerung von etwa 1 ms. Es macht also keinen sinn die Korrelationsfunktion für längere Zeiten zu berechnen.
Die maximale Absatrate für die Signale sollte bei etwa 10 kHz liegen. Das sollte immerhin für Frequenzen bis fast 5 kHz reichen. Damit hat man eine Zeitauflösung von 0.1 ms. Insgesamt sind es also nur 21 Korrelationsfunktionen zwischen -1 ms und + 1ms die man berechen muß. Für jedes Datenpaar das man neu bekommt braucht man dafür 21 Multiplikationen und 21 Additionen. Das kann der µC in Echtzeit (d.h, innerhalb der 0.1 ms oder 2000 Zyklen bei 20 MHz) schaffen, zumindestens in C oder ASM. Auch der Speicherplatzbedarf hält sich in Grenzen: 21 Werte für die Summen und jeweils 11 Messwerte der beiden Mikrofone.
Das einzige was dann noch übrig bleibt, ist zu sehen ob da irgendwann mal was großes positives bei rauskommt: dann hat man eine genügend laute Schallquelle gefunden. Eventuell könnte man danach den Winkel noch etwa feiner als eine der 21 möglichen Verzögerungen bestimmen.
Allerdings wird das mehr ein Aufgabe für eine Seperaten µC, für eine weitere Steurung des Bots bleibt da nicht mehr viel Rechenzeit übrig.
Eine Prinzipelle Schwierigkeit bleibt allerdings noch: Wenn man Echos oder ähnliches hat kann das Ganze auch daneben gehen, wenn man sich nicht auf ganz kurze Geräusche wie ein Klicken beschränkt.
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.
Herkulase
08.07.2009, 08:39
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
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
Christian3
08.07.2009, 12:30
DANKE für die vielen antworten!
Besserwessi
08.07.2009, 18:53
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
Besserwessi
09.07.2009, 19:31
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.
Besserwessi
10.07.2009, 21:26
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.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.