Ho creato un sistema TDOA abbastanza semplice che utilizza segnali ultrasonici emessi da due altoparlanti per geolocalizzare (rispetto agli altoparlanti) i telefoni cellulari. I due segnali sono separati per frequenza.
Il sistema ha i seguenti vincoli:
- I segnali devono essere impercettibili. A tal fine ci atteniamo alle frequenze sopra 17 kHz. Alcune persone riescono ancora a sentirlo, ma la maggior parte no.
- La frequenza di campionamento è di 44,1 kHz.
- In genere la musica verrà riprodotta, quindi vi sono molte interferenze alle frequenze più basse.
- Non abbiamo il controllo del funzionamento degli altoparlanti e dei microfoni alle frequenze superiori, quindi abbiamo mantenuto il limite superiore a circa 20 kHz.
Il segnale particolare che sto usando sono i codici Barker a 13 bit modulati BPSK a causa delle loro buone proprietà di autocorrelazione. L'autocorrelazione è simile al seguente:
Quando correlo in modo incrociato il segnale atteso con il segnale ricevuto nella vita reale, tuttavia, ciò che ottengo in genere assomiglia a questo-
Il blu è la correlazione incrociata con il segnale dell'altoparlante 1 e il rosso è la correlazione incrociata con il segnale dell'altoparlante 2. Sembra che gli echi siano significativi e, sfortunatamente, spesso più forti del segnale del percorso diretto a causa del guadagno direzionale del microfono.
Ho provato semplicemente a rilevare il primo aspetto del segnale in quanto è probabilmente il percorso diretto. Questo approccio è molto sensibile alla soglia che uso per decidere quando il segnale è presente e quindi non è affatto robusto.
Vorrei un approccio solido per determinare il "vero" tempo di arrivo del segnale, ovvero il tempo di arrivo del segnale del percorso diretto. Forse una qualche forma di stima e deconvoluzione del canale? In tal caso, come funzionerebbe?
Dati / codice: voglio chiarire che non mi aspetto che nessuno analizzi i dati o controlli il mio codice. Li ho resi disponibili nel caso tu voglia farlo. Sono principalmente interessato alle idee.
Ho reso disponibili per il download il segnale ricevuto grezzo e i segnali previsti modulati. Sono tutti campionati a 44,1 kHz. La correlazione del segnale ricevuto con i segnali previsti produrrà qualcosa di simile ma non identico all'immagine sopra perché sposto i segnali ricevuti in banda base e decimo prima di correlarli con i segnali previsti.
Script Matlab Gli script Matlab hanno sia lo script di generazione del segnale (genLocationSig.m) che il mio script di ricezione / elaborazione (calcTimingOffset.m).