Eu criei um sistema TDOA bastante simples que usa sinais ultrassônicos emitidos por dois alto-falantes para geolocalizar (em relação aos alto-falantes) os telefones celulares. Os dois sinais são separados por frequência.
O sistema possui as seguintes restrições:
- Os sinais devem ser inaudíveis. Para esse fim, mantemos frequências acima de 17 kHz. Algumas pessoas ainda conseguem ouvir isso, mas a maioria não consegue.
- A taxa de amostragem é 44,1 kHz.
- A música normalmente está tocando, portanto, há muita interferência nas frequências mais baixas.
- Não temos controle sobre o quão bem os alto-falantes e microfones funcionam nas frequências superiores, por isso mantivemos nosso limite superior em torno de 20 kHz.
O sinal específico que estou usando são os códigos Barker de 13 bits modulados por BPSK devido às suas boas propriedades de autocorrelação. A autocorrelação se parece com o seguinte:
Porém, quando eu correlaciono o sinal esperado com o sinal recebido na vida real, o que recebo normalmente se parece com isso-
O azul é a correlação cruzada com o sinal do alto-falante 1 e o vermelho é a correlação cruzada com o sinal do alto-falante 2. Parece que os ecos são significativos e, infelizmente, muitas vezes mais fortes que o sinal do caminho direto devido ao ganho direcional do microfone.
Tentei simplesmente detectar a primeira aparência do sinal, pois esse provavelmente é o caminho direto. Essa abordagem é muito sensível ao limite que eu uso para decidir quando o sinal está presente e, portanto, não é robusto.
Eu gostaria de uma abordagem robusta para determinar a hora de chegada "verdadeira" do sinal - ou seja, a hora de chegada do sinal de caminho direto. Talvez alguma forma de estimativa e deconvolução de canal? Se sim, como isso funcionaria?
Dados / Código: quero deixar claro que não espero que ninguém analise os dados ou inspecione meu código. Eu os disponibilizei caso você queira fazê-lo. Estou mais interessado em idéias.
Eu disponibilizei o sinal bruto recebido e modulei os sinais esperados para download. Todos são amostrados em 44,1 kHz. Correlacionar o sinal recebido com os sinais esperados produzirá algo semelhante, mas não idêntico à imagem acima, porque movo os sinais recebidos para a banda base e dizimamos antes de correlacionar com os sinais esperados.
Scripts do Matlab Os scripts do Matlab possuem o script de geração de sinal (genLocationSig.m) e o meu script de recebimento / processamento (calcTimingOffset.m).
fonte
Respostas:
Estes não são os códigos que você está procurando ...
Como mencionei nos comentários, existem várias maneiras de executar um TDOA robusto. (Correlação cruzada com os métodos Linear Chirps, Exponential Chirps e CDMA-type). Você já construiu um sistema TDOA utilizando códigos (e essa é realmente uma boa escolha em relação aos chirps lineares, se você precisar de robustez ao doppler); no entanto, você está se limitando artificialmente de duas maneiras:
Use uma sequência PN:
Transmitir um preâmbulo:
Em seu aplicativo em particular, você mencionou que estava transmitindo apenas um bit. Você deve evitar isso se puder ajudá-lo e transmitir o máximo de bits que seu aplicativo permitir, para obter mais ganhos de codificação.
Tente uma ou ambas as soluções e apresente seus resultados. Espero que haja melhorias tangíveis nas quais possamos iterar. (Modelagem de pulso, sequências PN diferentes / mais longas, etc).
fonte