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.