Ultraschallsignalerkennung

9

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: Signalautokorrelation

Wenn ich das erwartete Signal mit dem empfangenen Signal im wirklichen Leben kreuzkorreliere, sieht das, was ich bekomme, normalerweise so aus: Typische Kreuzkorrelation

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.

Empfangenes Signal

Erwartetes Signal Nr. 1

Erwartetes Signal Nr. 2

Matlab-Skripte Die Matlab-Skripte enthalten sowohl das Signalerzeugungsskript (genLocationSig.m) als auch mein Empfangs- / Verarbeitungsskript (calcTimingOffset.m).

Jim Clay
quelle
Können Sie Ihre RX1-, RX2- und Vorlagendaten freigeben?
Tarin Ziyaee
@ user4619 Ich werde heute Abend versuchen, das zu tun.
Jim Clay
Ganz schnell: Ich habe Ihre Daten erhalten und eine kontrastmittelverstärkte STFT-PSD erstellt . Ich vermute, diese 5 Punkte unten sind Ihre beiden Signale, die durch die Frequenz getrennt sind. Es scheint, als ob Ihre Signale in Ordnung übertragen werden, aber ich glaube nicht, dass Echos oder Mehrwege Ihr Problem sind. Wie Sie sehen können, gibt es zumindest zu Beginn viel intermittierendes (Breitband-) Rauschen zwischen den Impulsen. Was sehen Sie, wenn Sie eine komplexe Bandverschiebung, ein Downsample, eine Korrelation mit Ihrer Barker-Sequenz und einen Blick auf die Hüllkurve haben?
Tarin Ziyaee
1
Ok, ein paar Dinge: I) Haben Sie darüber nachgedacht, einen linearen Chirp anstelle von codierten Wellenformen wie dieser zu verwenden? Sie haben viel mehr Flexibilität und es sind drastisch weniger bewegliche Teile beteiligt. II) Was sind, wenn überhaupt, Ihre Bandbreitenbeschränkungen? Zum Beispiel scheinen Ihre Vorlagen etwa 1 kHz breit zu sein. Gibt es einen Grund dafür? Kannst du höher gehen? Mit einem linearen Zwitschern ist dies einfach. III) Obwohl ich bezweifle, dass irgendetwas mit Ihrer Demodulation nicht stimmt, würde es helfen, sie aufzustellen. Das und es würde mir die Mühe ersparen, es zu schreiben!
Tarin Ziyaee
1
In Bezug auf die Bit-Kommentare gibt es ein Missverständnis: Nennen wir jeden der 13 Zustände des Barker-Codes einen "Chip". Wenn ich also ein bisschen sende, sende ich 13 Chips. Wenn ich 2 Bits sende, sende ich 26 Chips usw. usw. Meine Frage war also, wie viele Bits senden Sie? Ich gehe davon aus, dass Sie nur 1 Bit übertragen, und ich sage, dass Sie möglicherweise auch viel mehr übertragen möchten, um Ihren Codierungsgewinn zu steigern. Ist das sinnvoll?
Tarin Ziyaee

Antworten:

3

Dies sind nicht die Codes, die Sie suchen ...

Wie ich in den Kommentaren erwähnt habe, gibt es eine ganze Reihe von Möglichkeiten, eine robuste TDOA durchzuführen. (Kreuzkorrelation mit linearen Chirps-, Exponential-Chirps- und CDMA-Methoden). Sie haben bereits ein TDOA-System mit Codes erstellt (und das ist in der Tat eine gute Wahl gegenüber linearen Chirps, wenn Sie eine Robustheit gegenüber Doppler benötigen), aber Sie beschränken sich künstlich auf zwei Arten:

  • 13
  • 1

Verwenden Sie eine PN-Sequenz:

3161127

PN_31 = [ 1  1 -1 -1  1  1 -1  1 -1 -1  1 -1 -1 -1 -1  1 -1  1 -1  1  1  1 -1  1  1 -1 -1 -1  1  1  1];

PN_61 = [ 1  1  1 -1  1  1 -1  1 -1 -1  1 -1 -1  1  1  1 -1 -1 -1  1 -1  1  1  1  1 -1 -1  1 ...
     -1  1 -1 -1 -1  1  1 -1 -1 -1 -1  1 -1 -1 -1 -1 -1  1  1  1  1  1  1 -1  1 -1  1 -1 ...
      1  1 -1 -1  1  1 -1];

PN_127 = [-1     1     1     1    -1     1    -1    -1     1    -1     1     1    -1    -1    -1     1     1    -1     1     1     1     1    -1     1     1    -1     1    -1 ...
       1     1    -1     1     1    -1    -1     1    -1    -1     1    -1    -1    -1     1     1     1    -1    -1    -1    -1     1    -1     1     1     1     1     1 ...
      -1    -1     1    -1     1    -1     1     1     1    -1    -1     1     1    -1     1    -1    -1    -1     1    -1    -1     1     1     1     1    -1    -1    -1 ...
       1    -1     1    -1    -1    -1    -1     1     1    -1    -1    -1    -1    -1     1    -1    -1    -1    -1    -1    -1     1     1     1     1     1     1     1 ...
      -1     1    -1     1    -1     1    -1    -1     1     1    -1    -1     1     1     1];

1310 log[12713]10

Geben Sie hier die Bildbeschreibung ein

Senden Sie eine Präambel:

In Ihrer speziellen Anwendung haben Sie erwähnt, dass Sie nur ein Bit übertragen haben. Sie sollten versuchen, dies zu vermeiden, wenn Sie helfen können, und so viele Bits übertragen, wie Ihre Anwendung zulässt, um weitere Codierungsgewinne zu erzielen.

316112713


Probieren Sie eine oder beide dieser Lösungen aus und stellen Sie Ihre Ergebnisse auf. Ich erwarte konkrete Verbesserungen, die wir dann wiederholen können. (Pulsformung, verschiedene / längere PN-Sequenzen usw.).

Tarin Ziyaee
quelle
1
Ja, ich habe vor, längere Sequenzen auszuprobieren. Ich wusste nicht, dass die zirkulären Autokorrelationen von pn-Sequenzen so schön interessant sind. Leider ist für meine Anwendung die lineare Autokorrelation von Bedeutung. In Bezug auf die Präambel ist die gesamte Sequenz in gewisser Weise eine "Präambel" in dem Sinne, dass eine Präambel nützlich ist, weil es sich um ein bekanntes Datenmuster handelt. Mein gesamtes Signal ist a priori bekannt.
Jim Clay
Ich habe mich entschlossen, die Signallänge ein wenig zu übertreiben, indem ich eine Bestellung von 10 lfsr (1023 Chips) verwende, um zu beweisen oder auszuschließen, dass das Problem durch Verlängerung des Signals lösbar ist. Ich werde posten, was passiert.
Jim Clay
1
@ JimClay Freut mich das zu hören. Ich bin gespannt, wie die empfangenen xcorrs / Signale jetzt aussehen. Das ist aber großartig.
Tarin Ziyaee
1
@endolith Ja, Doppler ist ein Problem. Ich gehe damit um, indem ich mehrmals korreliere und die Frequenz des empfangenen Signals jedes Mal um einen anderen Betrag verschiebe. Dies ist einfach, wenn Sie im Frequenzbereich korrelieren.
Jim Clay
1
@endolith Wie Jim Clay seine Methode beschrieb, berechnet er im Grunde genommen die sogenannte Ambiguity-Funktion . Das heißt, Cross-Corr-Ergebnisse, wobei die zweite Dimension der Grundfrequenz entspricht. Dies zeigt dann den Peak und daher, da wir die ursprüngliche Frequenz kennen, ihren Doppler-Grad.
Tarin Ziyaee