Stworzyłem dość prosty system TDOA, który wykorzystuje sygnały ultradźwiękowe emitowane z dwóch głośników do geolokalizacji (w stosunku do głośników) telefonów komórkowych. Dwa sygnały są oddzielone częstotliwością.
System ma następujące ograniczenia:
- Sygnały muszą być niesłyszalne. W tym celu trzymamy się częstotliwości powyżej 17 kHz. Kilka osób wciąż to słyszy, ale większość nie.
- Częstotliwość próbkowania wynosi 44,1 kHz.
- Muzyka zwykle będzie odtwarzana, więc na niższych częstotliwościach jest dużo zakłóceń.
- Nie mamy kontroli nad tym, jak głośniki i mikrofony działają na wyższych częstotliwościach, dlatego utrzymaliśmy górny limit na poziomie około 20 kHz.
Szczególnym sygnałem, którego używam, jest modulowany przez BPSK 13-bitowy kod Barkera ze względu na ich dobre właściwości autokorelacji. Autokorelacja wygląda następująco:
Kiedy jednak koreluję krzyżowo oczekiwany sygnał z odbieranym sygnałem w prawdziwym życiu, to, co otrzymuję, zwykle wygląda tak:
Niebieski to korelacja krzyżowa z sygnałem głośnika 1, a czerwony to korelacja krzyżowa z sygnałem głośnika 2. Wygląda na to, że echa są znaczące i niestety często silniejsze niż bezpośredni sygnał ścieżki ze względu na wzmocnienie kierunkowe mikrofonu.
Próbowałem po prostu wykryć najwcześniejszy pojawienie się sygnału, ponieważ jest to prawdopodobnie bezpośrednia ścieżka. To podejście jest bardzo wrażliwe na próg, którego używam do decydowania, kiedy sygnał jest obecny, a więc nie jest wcale solidny.
Chciałbym solidnego podejścia do określania „prawdziwego” czasu przybycia sygnału, tj. Czasu przybycia sygnału ścieżki bezpośredniej. Być może jakaś forma oszacowania kanału i dekonwolucji? Jeśli tak, jak to by działało?
Dane / Kod: Chcę wyjaśnić, że nie oczekuję od nikogo analizowania danych ani sprawdzania mojego kodu. Udostępniłem je na wypadek, gdybyś chciał to zrobić. Najbardziej interesują mnie pomysły.
Udostępniłem nieprzetworzony odebrany sygnał i modulowane oczekiwane sygnały do pobrania. Wszystkie są próbkowane przy 44,1 kHz. Korelacja odbieranego sygnału z oczekiwanymi sygnałami da w wyniku coś podobnego, ale nie identycznego z powyższym obrazem, ponieważ przesuwam odebrane sygnały do pasma podstawowego i deklamuję przed korelacją z oczekiwanymi sygnałami.
Skrypty Matlab Skrypty Matlab zawierają zarówno skrypt generowania sygnału (genLocationSig.m), jak i mój skrypt odbierania / przetwarzania (calcTimingOffset.m).