La meilleure façon d'envoyer un signal dans une très basse fréquence (250 Hz)?

8

Je suis un programmeur confronté à une question électronique, alors j'ai pensé que c'était l'endroit à poser!

  • J'ai un capteur de champ magnétique qui me fournit des valeurs de champ magnétique (axe XYZ) 250 fois par seconde.
  • Un circuit électronique avec un microprocesseur programmable contrôle une bobine, ce qui peut modifier le champ magnétique suffisamment près de ce capteur. Pourtant, les deux appareils ne sont pas strictement positionnés, donc je ne peux pas relayer sur la mesure de positionnement.
  • Je souhaite envoyer 2 types de signaux différents du circuit au capteur, qui peuvent résister à de forts bruits sur le champ magnétique, et être plus courts qu'une demi-seconde (Oui, secondes - nous sommes à 250 Hz!)

La solution actuelle consiste à transmettre une onde carrée de 17 Hz, puis 12 Hz, puis 17 Hz pour le signal A, inversant l'ordre du signal B. Mais pour détecter ces signaux, il est nécessaire d'envoyer des ondes suffisamment longues, ce qui porte les signaux à une longueur d'environ 1,5 secondes.

Donc, ma question est la suivante: existe-t-il un moyen, disons un modèle, comme un modèle musical, qui peut être utilisé pour signaler plus rapidement, tout en étant fiable?

rubmz
la source

Réponses:

7

Avec un taux d'échantillonnage de 250 Hz, vous pouvez facilement envoyer 100 bits / seconde ou plus. En 0,5 seconde, ce serait de l'ordre de 50 à 60 bits.

La question est, quels modèles de bits devriez-vous sélectionner qui se distinguent facilement les uns des autres ainsi que du bruit extérieur et des interférences? Une solution courante consiste à utiliser des séquences de bits pseudo-aléatoires, également appelées codes Barker , qui ont la faible corrélation croisée souhaitée.

Une technique DSP connue sous le nom de " filtre adapté " peut être utilisée pour détecter les codes.

Dave Tweed
la source
Ça semble intéressant! Mais, je me demandais à quel point le "filtre adapté" pouvait être complexe sur le plan informatique? Cela nécessiterait-il des calculs FFT / autres lourds?
rubmz
J'ai vérifié les implémentations c ++ pour un filtre adapté, et il semble que cela nécessiterait des calculs assez lourds pour détecter le signal. Donc, cela pourrait ne pas être aussi utile pour moi, car mon code côté capteur fonctionnerait dans un environnement RT, donc y a-t-il un autre filtre qui pourrait me permettre d'envoyer 2 types de signaux, en moins de 0,5 seconde, sans trop de calculs ?
rubmz
2
Il ne nécessite pas de transformée de Fourier, mais il nécessite l'équivalent d'un filtre FIR (réponse impulsionnelle finie) sur chacun des trois canaux d'entrée, ce qui est mathématiquement équivalent à faire un produit scalaire sur deux vecteurs de 128 échantillons pour chaque nouveau échantillon entrant (128 multiplications et 128 ajouts, 250 fois par seconde, pour un total de ~ 33 000 opérations de multiplication par seconde par filtre, soit environ 100 000 secondes MAC / s au total). Même une puce DSP très bas de gamme telle que le Microchip dsPIC peut facilement gérer ce type de calcul en temps réel.
Dave Tweed
2
Juste pour être clair, vous devez exécuter ce calcul séparément pour chaque code différent que vous souhaitez pouvoir détecter. Ainsi, par exemple, si vous avez 10 codes différents, dont chacun peut être transmis à tout moment, vous devrez exécuter dix filtres correspondants en parallèle, pour un total de 1 M MAC / s - toujours dans la capacité de une puce dsPIC ou similaire. Si vous trouvez que des codes plus courts sont suffisamment robustes dans votre application, vous pouvez utiliser des filtres plus courts correspondants et la charge de calcul diminue proportionnellement.
Dave Tweed