Ich habe ein ziemlich einfaches TDOA-System entwickelt, das Ultraschallsignale von zwei Lautsprechern verwendet, um Mobiltelefone (relativ zu den Lautsprechern) zu lokalisieren. Die beiden Signale sind durch die Frequenz getrennt.
Das System hat die folgenden Einschränkungen:
- Die Signale müssen unhörbar sein. Zu diesem Zweck halten wir uns an Frequenzen über 17 kHz. Einige Leute können das immer noch hören, aber die meisten können es nicht.
- Die Abtastrate beträgt 44,1 kHz.
- Musik wird normalerweise abgespielt, daher treten bei den niedrigeren Frequenzen viele Störungen auf.
- Wir haben keine Kontrolle darüber, wie gut die Lautsprecher und Mikrofone bei den oberen Frequenzen funktionieren, daher haben wir unsere Obergrenze bei etwa 20 kHz gehalten.
Das spezielle Signal, das ich verwende, sind BPSK-modulierte 13-Bit-Barker-Codes aufgrund ihrer guten Autokorrelationseigenschaften. Die Autokorrelation sieht wie folgt aus:
Wenn ich das erwartete Signal mit dem empfangenen Signal im wirklichen Leben kreuzkorreliere, sieht das, was ich bekomme, normalerweise so aus:
Das Blau ist die Kreuzkorrelation mit dem Signal von Lautsprecher 1 und das Rot ist die Kreuzkorrelation mit dem Signal von Lautsprecher 2. Es scheint, dass die Echos aufgrund der Richtungsverstärkung des Mikrofons signifikant und leider oft stärker als das direkte Wegsignal sind.
Ich habe versucht, einfach das früheste Auftreten des Signals zu erkennen, da dies wahrscheinlich der direkte Weg ist. Dieser Ansatz reagiert sehr empfindlich auf den Schwellenwert, den ich für die Entscheidung verwende, wann das Signal vorhanden ist, und ist daher überhaupt nicht robust.
Ich möchte einen robusten Ansatz zur Bestimmung der "wahren" Ankunftszeit des Signals, dh der Ankunftszeit des Direktpfadsignals. Vielleicht irgendeine Form der Kanalschätzung und Entfaltung? Wenn ja, wie würde das funktionieren?
Daten / Code: Ich möchte klarstellen, dass ich nicht erwarte, dass jemand die Daten analysiert oder meinen Code überprüft. Ich habe sie zur Verfügung gestellt, falls Sie dies möchten. Ich interessiere mich hauptsächlich für Ideen.
Ich habe das rohe empfangene Signal und die modulierten erwarteten Signale zum Download bereitgestellt. Sie werden alle mit 44,1 kHz abgetastet. Das Korrelieren des empfangenen Signals mit den erwarteten Signalen erzeugt etwas Ähnliches, aber nicht identisches wie das obige Bild, da ich die empfangenen Signale auf das Basisband verschiebe und dezimiere, bevor ich mit den erwarteten Signalen korreliere.
Matlab-Skripte Die Matlab-Skripte enthalten sowohl das Signalerzeugungsskript (genLocationSig.m) als auch mein Empfangs- / Verarbeitungsskript (calcTimingOffset.m).