Rilevazione del segnale ad ultrasuoni


9

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: Autocorrelazione del segnale

Quando correlo in modo incrociato il segnale atteso con il segnale ricevuto nella vita reale, tuttavia, ciò che ottengo in genere assomiglia a questo- Correlazione incrociata tipica

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.

Segnale ricevuto

Segnale atteso n. 1

Segnale atteso n. 2

Script Matlab Gli script Matlab hanno sia lo script di generazione del segnale (genLocationSig.m) che il mio script di ricezione / elaborazione (calcTimingOffset.m).


È possibile condividere i dati di rx1, rx2 e template?
Tarin Ziyaee,

@ user4619 Proverò a farlo stasera.
Jim Clay

Molto veloce: ho ricevuto i tuoi dati e prodotto un STFT-PSD con contrasto migliorato . Immagino che quei 5 segnali acustici in basso siano i tuoi due segnali, separati per frequenza. Sembra che i tuoi segnali vengano trasmessi ok, ma non credo che l'eco o il multipath siano il tuo problema. Come puoi vedere c'è un sacco di rumore intermittente (banda larga) tra gli impulsi, almeno all'inizio. Se il complesso spostamento di banda, il downsample, la correlazione con la sequenza di barker e si osserva l'inviluppo, cosa vedi?
Tarin Ziyaee,

1
Ok, un paio di cose: I) hai considerato di usare un chirp lineare invece di forme d'onda codificate come questa? Hai molta più flessibilità con loro e ci sono parti drasticamente meno mobili coinvolte. II) Quali sono, se del caso, i tuoi vincoli di larghezza di banda? Ad esempio, i tuoi modelli sembrano avere una larghezza di circa 1 KHz, qual è il motivo? Puoi andare più in alto? Con un cinguettio lineare è facile. III) Anche se dubito che ci sia qualcosa di sbagliato nella tua demodulazione, metterla in pratica aiuterebbe. Quello, e mi risparmierebbe la fatica di scriverlo!
Tarin Ziyaee,

1
Per quanto riguarda i commenti dei bit, c'è un malinteso: chiamiamo ciascuno dei 13 stati del codice barker un "chip". Quindi, se trasmetto un po ', sto trasmettendo 13 chip. Se trasmetto 2 bit, sto trasmettendo 26 chip, ecc. Ecc. Quindi la mia domanda era: quanti bit stai trasmettendo? Suppongo che stai trasmettendo solo 1 bit, e quindi sto dicendo che potresti anche considerare di trasmettere molto di più, per rafforzare il tuo guadagno di codifica. Ha senso?
Tarin Ziyaee,

Risposte:


3

Questi non sono i codici che stai cercando ...

Come ho già detto nei commenti, ci sono molti modi per fare un TDOA robusto. (Correlazione incrociata con i chirp lineari, i chirp esponenziali e i metodi di tipo CDMA). Hai già creato un sistema TDOA utilizzando codici (e questa è davvero una buona scelta rispetto ai chirp lineari se hai bisogno di robustezza per doppler), tuttavia ti stai limitando artificialmente in due modi:

  • 13
  • 1

Usa una sequenza PN:

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

inserisci qui la descrizione dell'immagine

Trasmettere un preambolo:

Nella tua particolare applicazione, hai detto che stavi trasmettendo solo un bit. Dovresti cercare di evitarlo se puoi aiutarlo e trasmettere tutti i bit che la tua applicazione può consentire, per ottenere ulteriori guadagni di codifica.

316112713


Prova una o entrambe queste soluzioni e metti i tuoi risultati. Mi aspetto che ci siano miglioramenti tangibili su cui possiamo procedere. (Pulse shaping, sequenze PN diverse / più lunghe, ecc.).


1
Sì, ho intenzione di provare sequenze più lunghe. Non sapevo che le autocorrelazioni circolari delle sequenze in pn fossero così belle, interessanti. Sfortunatamente per la mia applicazione è l'autocorrelazione lineare che conta. Per quanto riguarda il preambolo, l'intera sequenza è, in un certo senso, un "preambolo", nel senso che ciò che rende utile un preambolo è che si tratta di un modello di dati noto. Tutto il mio segnale è noto a priori.
Jim Clay,

Ho deciso di andare un po 'eccessivo sulla lunghezza del segnale usando un ordine 10 lfsr (1023 chip) per provare o escludere che il problema sia risolvibile allungando il segnale. Pubblicherò cosa succede.
Jim Clay,

1
@JimClay Lieto di sentirlo. Sono curioso di vedere come appaiono gli xcorr / segnali ricevuti ora. È fantastico però.
Tarin Ziyaee,

1
@endolith Sì, il doppler è un problema. Lo gestisco correlando più volte, spostando la frequenza del segnale ricevuto ogni volta di una quantità diversa. Questo è facile da fare se si esegue la correlazione nel dominio della frequenza.
Jim Clay,

1
@endolith Mentre Jim Clay ha descritto il suo metodo, sta sostanzialmente calcolando quella che è conosciuta come la Funzione Ambiguità . Cioè, risultati di cross-corr, con la seconda dimensione corrispondente alla frequenza di base. Questo rivelerà quindi il picco e quindi, poiché conosciamo la frequenza originale, il suo grado di doppler.
Tarin Ziyaee,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.