Hallo, ich habe die Aufgabe ein Mikrofon Array (habe erstmal nur 8
Mikrofone) zu Kalibrieren, dazu habe ich ein Paper gefunden,
in dem das Mikrofon Array mithilfe einer bewegten Schallquelle
kalibriert wird. Diese Art von
Kalibrierung würde perfekt zu meiner Aufgabenstellung passen jedoch,
komme ich nicht wirklich
so ganz mit den Informationen klar.
Es wird beschrieben, dass ein Sensor Array bestehend aus i sensoren mit
den koordinaten xMi,yMi und zMi
und Schallquellen mit den Koordinaten xSi,ySi und zSi vorhanden sind.
Mit der euklidischen Formel kann die Distanz von Mi zu Si bestimmt
werden.
dMiSi=sqrt((xSi-xMi)^2+(ySi-yMi)^2+(zSi-zMi)^2)
Diese wiederrum kann durch die Laufzeitdifferenz von Mi und Si und der
Schallgeschwindigkeit berechnet werden.
Die Laufzeitdifferenz ergibt sich aus der Messung des gesendeten Puls
und des Empfangenen Signals mit hilfe einer Autokorrelation.
Im Algorithmus wird darauf eingangen die Koordinaten mit der
nichtlinearen Methode der kleinsten Quadrate
zu optimieren. Dabei wird im ersten Schritt des Algorithmus die
Koordinaten der Mikrofonen (x,y,z)
und Schallquellen (x,y,z) zufällig generiert (für ein Reibungslosen
Verlauf des Algorithmus sollten die Mikrofon Koordinaten annähernd
passen),
diese Koordinaten werden dann immer weiter aufgewertet.
Die Frage die sich mir stellt ist, wie etwas verbessert werden kann? Die
Methode der kleinsten Quadrate
erzeugt doch eigentlich nur eine Ausgleichskurve aus , ich brauche
jedoch konkrete Koordinaten.
Wie sollten sich die Koordinaten verbessern, wenn ich nur die Distanz
von einer jeder Schallquelle zu
jedem einzelnen Mikrofon als Variable habe? Im Endeffekt könnte ich
Mi*Si Gleichungen aufstellen, bei denen
dMiSi immer anders ist aber die Koordinaten xSi,ySi,zSi und xMi,yMi,zMi
immer fest sind ?!
Ich kann mir das einfach nicht vorstellen, vielleicht hat jemand ein
Tipp für mich.
Im Anhang habe ich den Paper beigefügt. Im Kapitel 6 ist der Algorithmus
aufgezeigt.
Hi
> Im Endeffekt könnte ich Mi*Si Gleichungen aufstellen,> bei denen dMiSi immer anders ist aber die Koordinaten> xSi,ySi,zSi und xMi,yMi,zMi immer fest sind ?!
Genau, das gibt dann ein deutlich überbestimmtes Lineares
Gleichungssystem. Das musst du dann lösen (so gut es eben geht). Am
einfachsten wohl in dem Du die Matrix invertierst, das geht nur nicht so
einfach wie gewöhnlich weil die Matrix nicht quadratisch ist, aber die
kannst eine Pseudoinverse bilden, z.B. die Moore-Penrose-Invers.
Also, so weit mal auf die Schnelle und ohne das Paper gelesen zu haben,
da hab ich grad keine Zeit dafür.
Grüße
Flo
Aber nach was löse ich die Gleichung denn wenn dMiSi aus der Messung
keine Variable mehr ist und alle Koordinaten durch Zufall gesetzt
werden. Was sind meine Variablen? Wird im ersten Schritt nur eine
Koordinate als Variable gesetzt und diese nach Methode der kleinsten
Quadrate optimiert, das wiederholt sich dann für die zweite Koordinate
usw ?
Hi Dave,
naja, die xMi,yMi, zMi und die xSj,ySj, zSj sind die Unbekannten, die
dMiSj sind bekannt. Mit jeder neuen Messung/Schallquellenposition n
bekommst neue Gleichungen und leider auch ein paar neue Unbekannte (xSn,
ySn, zSn) aber du bekommst mehr unabhängige (i.A. jedenfalls) neue
Gleichungen als neue Unbekannte, nach genug Messungen (12) hast Du genug
Gleichungen (60) um alle Mi, Sj (60) auszurechnen.
Das Gleichungssystem ist i.A. überbestimmt drum brauchst Du irgendeine
Art der Ausgleichsrechnung um die beste Lösung zu finden.
Und etwas ins blaue hinein, denke ich du solltest wohl noch ein Mikrofon
einfach auf 0 setzen (Koordinatenursprung) und überlegen wie Du zwei
weitere Nutzen kannst um eine kartesische Basis zu konstruieren.
Zeichne das mal in 2D mit drei Mikros und drei Schallquellen auf, ich
glaub dann sieht mans eigentlich.
Nur die Sache mit der Pseudoinverse war Käse bzw. ists nicht so einfach,
da das ja alles gar nicht linear ist, Du braucht also irgendein
Lösungsverfahren für nichtlineare überbestimmte Gleichungssysteme, z.B.
das Gauß-Newton-Verfahren. Oder man erfindet sich was ähnliches selber
weils angeblich besser funktioniert und man machts so wie Paper. Das
Verfahren klingt zumindest langsam, ist aber ja egal, weil Computer
schnell sind und man das nur einmal macht.
Grüße
Flo
Florian R. schrieb:> Hi Dave,> naja, die xMi,yMi, zMi und die xSj,ySj, zSj sind die Unbekannten, die> dMiSj sind bekannt. Mit jeder neuen Messung/Schallquellenposition n> bekommst neue Gleichungen und leider auch ein paar neue Unbekannte (xSn,> ySn, zSn) aber du bekommst mehr unabhängige (i.A. jedenfalls) neue> Gleichungen als neue Unbekannte, nach genug Messungen (12) hast Du genug> Gleichungen (60) um alle Mi, Sj (60) auszurechnen.
Ich glaube ich habe es verstanden! Nur dass ich keine Fehler drin hab
schreibe ich meinen Gedankenweg nochmal auf.
DS1M1=sqrt((xS1-xM1)^2+(yS1-yM1)^2+(zS1-zM1)^2)
In der Gleichung wären zum Beispiel 6 Unbekannte (wenn wir M1 in den
Ursprung des Koordinatensystems legen dann sind es immer noch 3
Unbekannte)
Bei einer neuen Schallquellenposition/Messung kommen Grundsätzlich immer
3 weitere Unbekannte dazu (die 3 Koordinaten x,y,z):
DS2M1=sqrt((xS2-xM1)^2+(yS2-yM1)^2+(zS2-zM1)^2)
Das ändert sich auch nicht für n Schallquellen.
DSnM1=sqrt((xSn-xM1)^2+(ySn-yM1)^2+(zSn-zM1)^2)
Also wenn wir n Schallquellen haben, haben wir schonmal n Gleichungen
mit n*3 Unbekannten.
Bei 12 Messungen hätten wir also bei einem Mikrofon mindestens 36 (39
wenn wir den Uhrsprung nicht in den Koordinatenursprung setzen)
Unbekannte, jedoch nur 12 Gleichungen.
Bei 12 Messungen und 2 Mikrofonen hätten wir 24 Gleichungen und 39 (42)
Unbekannte
Bei 12 Messungen und 3 Mikrofonen hätten wir 36 Gleichungen und 42 (45)
Unbekannte
Bei 12 Messungen und 4 Mikrofonen hätten wir 48 Gleichungen und 45 (48)
Unbekannte
Bei 12 Messungen und 5 Mikrofonen hätten wir 60 Gleichungen und 48 (51)
Unbekannte und somit ist das Gleichungssystem überbestimmt und lässt
sich mit der Methode der kleinsten Quadrate näherungsweise lösen. Die
exakte Lösung ist aufgrund der Messergebnisse nicht berechenbar, weil
sich die Gleichungen widersprechen.
Hallo,
ja, so in etwa verstehe ich das auch.
Was mir nicht ganz klar ist, wie man mit Lage und Orientierung des
Koordinatensystems, in dem man die Ms lokalisieren will, umgeht.
Klar ist, dass man M0 einfach ein de Uhrsprung legen (drei Variablen
weg) kann. Gut. Bleibt noch die Orientieren, also nochmal drei
Freiheitsgrade. Ich denke, auch die kannst du beliebig festlegen und so
noch drei Variablen eliminieren. Wie man das jetzt aber genau macht weiß
ich grad nicht.
Du könntest vielleicht M0 = (0,0,0) und M1 = (xM1,0,0) setzten und dann
M2 = (xM2' * xM1, yM2, 0) und M3 = (xM3' * xM1, yM3' * yM2, zM3) und Mi
= (xMi' * xM1, yMi' * yM2, zMi' * zM3), oder so. Und dann xM1, yM2, zM3
und M' ausrechnen, und am ende dann wieder alles in M ohne Strich
umrechnen. Das wird nur blöd, wenn zM3 klein ist, der skizzierte
Algoritmus ist glaub ich eh schon nicht sonderlich stabil, das wird dann
vielleicht noch schlimmer, oder vielleicht auch nicht. Naja, gib auf
diese Idee mal nicht sonderlich viel, keine Ahnung ob das so geht, aber
eigentlich müsste man insgesamt 6 Variablen weg bekommen.
Grüße
Flo
Hi,
Positionsbestimmung aus Laufzeitdifferenzen ist ein uraltes Problem, das
gibt's seit LoranC : Hyperbelnavigation bei Wikipedia ( Die Punkte
konstanter Laufzeitdifferenzen liegen auf Hyperbeln) . Ich habe das mal
auf matheplanet.de für zwei Dimensionen erfragt (such nach
Hyperbelnavigation und 'cheers', ich kann auf meinem Telefon keine links
kopieren :-/) und beantwortet bekommen, dort auch ein link für drei
Dimensionen, das lösen die
GPS Receiver für jede Koordinate. Ich hoffe,ich habe die Frage richtig
verstanden, mein Screen ist urlaubsbedingt klein :-)))
Cheers
Detlef
Du brauchst in jedem Fall mehrere Impulsfolgen bei einer
Mikrokalibrierung, weil schon geringe Temperaturunterschiede zu
relevanten Laufzeitunterschieden führen. In größeren Distanzen braucht
es dann auch mehrere Messungen zur Realzeit, um keine schwammigen Werte
zu bekommen.
Statt einer Bewegten Schallquelle kann man das gfs auch mit einem
LS-Array und den entstehenden Phantomschallquellen lösen.
Habe mal was Ähnliches gemacht:
http://www.96khz.org/oldpages/soundsourcelocalisation.htm