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).
źródło
Odpowiedzi:
To nie są kody, których szukasz ...
Jak wspomniałem w komentarzach, istnieje wiele sposobów na wykonanie solidnego TDOA. (Korelacja krzyżowa z liniowym ćwierkaniem, ćwierkaniem wykładniczym i metodami typu CDMA). Zbudowałeś już system TDOA wykorzystujący kody (i jest to rzeczywiście dobry wybór w porównaniu do ćwierkania liniowego, jeśli potrzebujesz solidności do dopplera), jednak ograniczasz się sztucznie na dwa sposoby:
Użyj sekwencji PN:
Tak więc, bardzo prosto, zmień kody, których używasz do modulowania swojego przewoźnika poprzez: Zamiast tego użyj Sekwencji PN. Kody generowane przez PN mogą mieć (prawie) dowolną długość i mogą być generowane za pomocą LFSR . (W niektórych tekstach używają również nazwy „wybielacze”). Oto trzy sekwencje PN długości31 , 61 , i 127 odpowiednio.
Kołowe i liniowe autokorelacje sekwencji pokazano poniżej. Wyraźnie uzyskają białe widma, ale co więcej, nie jesteśmy już ograniczeni13 długości wiórów. W rzeczywistości ostatni kod, PN_127, daje zysk kodowania na poziomie10 log[12713]≈10 Wzmocnienie dB w stosunku do sekwencji szczekania, gwarantując jednocześnie białe widma.
Prześlij preambułę:
W swojej konkretnej aplikacji wspomniałeś, że transmitujesz tylko jeden bit. Powinieneś spróbować tego uniknąć, jeśli możesz pomóc, i przesłać tyle bitów, ile pozwala twoja aplikacja, aby uzyskać dalsze korzyści kodowania.
Jest to często wykonywane w protokołach komunikacyjnych w celu wyrównania z początkiem pakietu. Przesyłana jest (znana) preambuła złożona z wielu bitów. Każdy bit składa się z wielu żetonów. (W naszym przykładzie31 , 61 lub 127 chipy z jednym z powyższych kodów PN). Wreszcie, sama sekwencja bitów może składać się z jeszcze innej sekwencji PN, a jeśli chcesz, możesz przesłać13 bity tworzące wzór barkera, przy czym każdy bit składa się z jednej z powyższych sekwencji PN.
Wypróbuj jedno lub oba z tych rozwiązań i przedstaw wyniki. Oczekuję, że nastąpią namacalne ulepszenia, nad którymi będziemy mogli powtarzać. (Kształtowanie impulsu, różne / dłuższe sekwencje PN itp.).
źródło