Détection de signal ultrasonique

9

J'ai créé un système TDOA assez simple qui utilise des signaux ultrasoniques émis par deux haut-parleurs pour géolocaliser (par rapport aux haut-parleurs) les téléphones portables. Les deux signaux sont séparés par fréquence.

Le système présente les contraintes suivantes:

  • Les signaux doivent être inaudibles. À cette fin, nous nous en tenons aux fréquences supérieures à 17 kHz. Quelques personnes peuvent encore entendre cela, mais la plupart ne le peuvent pas.
  • La fréquence d'échantillonnage est de 44,1 kHz.
  • La musique est généralement jouée, il y a donc beaucoup d'interférences aux basses fréquences.
  • Nous n'avons aucun contrôle sur le bon fonctionnement des haut-parleurs et des microphones aux fréquences supérieures, nous avons donc gardé notre limite supérieure à environ 20 kHz.

Le signal particulier que j'utilise est les codes Barker 13 bits modulés BPSK en raison de leurs bonnes propriétés d'autocorrélation. L'autocorrélation ressemble à ceci: Autocorrélation du signal

Cependant, lorsque je corrèle le signal attendu avec le signal reçu dans la vie réelle, ce que j'obtiens ressemble généralement à ceci - Corrélation croisée typique

Le bleu est la corrélation croisée avec le signal du haut-parleur 1, et le rouge est la corrélation croisée avec le signal du haut-parleur 2. Il apparaît que les échos sont significatifs et, malheureusement, souvent plus forts que le signal direct en raison du gain directionnel du microphone.

J'ai essayé de détecter simplement la première apparition du signal car il s'agit probablement du chemin direct. Cette approche est très sensible au seuil que j'utilise pour décider quand le signal est présent et n'est donc pas du tout robuste.

Je voudrais une approche robuste pour déterminer le "vrai" temps d'arrivée du signal, c'est-à-dire le temps d'arrivée du signal de chemin direct. Peut-être une certaine forme d'estimation et de déconvolution des canaux? Si oui, comment cela fonctionnerait-il?

Données / Code: Je tiens à préciser que je ne m'attends pas à ce que quelqu'un analyse les données ou inspecte mon code. Je les ai mis à disposition au cas où vous le souhaiteriez. Je suis surtout intéressé par les idées.

J'ai mis le signal brut reçu et les signaux modulés attendus à télécharger. Ils sont tous échantillonnés à 44,1 kHz. La corrélation du signal reçu avec les signaux attendus produira quelque chose de similaire mais pas identique à l'image ci-dessus car je déplace les signaux reçus en bande de base et décime avant de corréler avec les signaux attendus.

Signal reçu

Signal attendu # 1

Signal attendu # 2

Scripts Matlab Les scripts Matlab ont à la fois le script de génération de signal (genLocationSig.m) et mon script de réception / traitement (calcTimingOffset.m).

Jim Clay
la source
Pouvez-vous partager vos données rx1, rx2 et modèle?
Tarin Ziyaee
@ user4619 Je vais essayer de faire ça ce soir.
Jim Clay
Très vite: j'ai reçu vos données et produit un STFT-PSD à contraste amélioré . Je suppose que ces 5 blips en bas sont vos deux signaux, séparés par la fréquence. Il semble que vos signaux soient bien transmis, mais je ne pense pas que les échos ou les trajets multiples soient votre problème. Comme vous pouvez le voir, il y a beaucoup de bruit intermittent (large bande) entre les impulsions, au moins au début. Si vous changez de bande complexe, sous-échantillonnez, corrélez avec votre séquence d'aboiement et regardez l'enveloppe, que voyez-vous?
Tarin Ziyaee
1
Ok, quelques petites choses: I) avez-vous envisagé d'utiliser un chirp linéaire au lieu de formes d'onde codées comme celle-ci? Vous avez beaucoup plus de flexibilité avec eux et il y a considérablement moins de pièces mobiles impliquées. II) Quelles sont, le cas échéant, vos contraintes de bande passante? Par exemple, vos modèles semblent avoir une largeur d'environ 1 kHz, une raison à cela? Pouvez-vous aller plus haut? Avec un chirp linéaire, c'est facile. III) Bien que je doute qu'il y ait quelque chose de mal avec votre démodulation, le mettre en place aiderait. Ça, et ça me sauverait la peine de l'écrire!
Tarin Ziyaee
1
En ce qui concerne les commentaires, il y a un malentendu: appelons chacun des 13 états du code Barker une «puce». Donc, si je transmets un peu, je transmets 13 puces. Si je transmets 2 bits, je transmets 26 puces, etc. etc. Ma question était donc: combien de bits transmettez-vous? Je suppose que vous transmettez juste 1 bit, et donc je dis que vous pouvez également envisager de transmettre beaucoup plus, pour augmenter votre gain de codage. Cela a-t-il du sens?
Tarin Ziyaee

Réponses:

3

Ce ne sont pas les codes que vous recherchez ...

Comme je l'ai mentionné dans les commentaires, il existe un certain nombre de façons de réaliser un TDOA robuste. (Corrélation croisée avec les chirps linéaires, les chirps exponentiels et les méthodes de type CDMA). Vous avez déjà construit un système TDOA utilisant des codes (et c'est en effet un bon choix par rapport aux gazouillis linéaires si vous avez besoin de robustesse pour doppler), mais vous vous limitez artificiellement de deux manières:

  • 13
  • 1

Utilisez une séquence 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];

13dix log[12713]dix

entrez la description de l'image ici

Transmettez un préambule:

Dans votre application particulière, vous avez mentionné que vous ne transmettiez qu'un bit. Vous devriez essayer d'éviter cela si vous pouvez l'aider et transmettre autant de bits que votre application le permet, pour obtenir un gain de codage supplémentaire .

316112713


Essayez l'une de ces solutions ou les deux et affichez vos résultats. J'espère qu'il y aura des améliorations tangibles sur lesquelles nous pourrons ensuite répéter. (Mise en forme d'impulsion, séquences PN différentes / plus longues, etc.).

Tarin Ziyaee
la source
1
Oui, j'ai l'intention d'essayer des séquences plus longues. Je ne savais pas que les autocorrélations circulaires des séquences pn étaient si agréables - intéressantes. Malheureusement pour mon application, c'est l'autocorrélation linéaire qui compte. En ce qui concerne le préambule, la séquence entière est, en quelque sorte, un "préambule", en ce sens que ce qui rend un préambule utile, c'est qu'il s'agit d'un modèle de données connu. Tout mon signal est connu a priori.
Jim Clay
J'ai décidé d'aller un peu trop loin sur la longueur du signal en utilisant un ordre 10 lfsr (1023 chips) pour prouver ou exclure que le problème est résoluble en allongeant le signal. Je posterai ce qui se passe.
Jim Clay
1
@ JimClay Heureux d'entendre cela. Je suis curieux de voir à quoi ressemblent les xcorrs / signaux reçus. C'est génial cependant.
Tarin Ziyaee
1
@endolith Oui, doppler est un problème. Je gère cela en corrélant plusieurs fois, en décalant la fréquence du signal reçu à chaque fois d'une quantité différente. C'est facile à faire si vous êtes en corrélation dans le domaine fréquentiel.
Jim Clay
1
@endolith Comme Jim Clay a décrit sa méthode, il calcule essentiellement ce que l'on appelle la fonction d'ambiguïté . C'est-à-dire des résultats de corrélation croisée, la deuxième dimension correspondant à la fréquence de base. Cela révélera alors le pic, et donc, puisque nous connaissons la fréquence d'origine, son degré doppler.
Tarin Ziyaee