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:
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 -
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.
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).
la source
Réponses:
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:
Utilisez une séquence PN:
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 .
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.).
la source