Melhor maneira de enviar um sinal em uma frequência muito baixa (250Hz)?

8

Eu sou um programador enfrentando uma pergunta eletrônica, então pensei que aqui é o lugar para perguntar!

  • Eu tenho um sensor de campo magnético que me fornece valores de campo magnético (eixo XYZ) 250 vezes por segundo.
  • Um circuito eletrônico com um microprocessador programável controla uma bobina, o que pode alterar o campo magnético próximo o suficiente desse sensor. No entanto, os dois dispositivos não estão estritamente posicionados, então não posso retransmitir a medição de posicionamento.
  • Desejo enviar 2 tipos diferentes de sinais do circuito para o sensor, que podem suportar ruídos fortes no campo magnético e ter menos de meio segundo (sim, segundos - estamos em 250 Hz!)

A solução atual é transmitir uma onda quadrada de 17Hz, depois 12Hz e 17Hz para o sinal A, revertendo a ordem do sinal B. Mas, para detectar esses sinais, é necessário enviar ondas longas o suficiente, o que aumenta o comprimento dos sinais em torno de 1,5 segundos.

Então, minha pergunta aqui é: existe uma maneira, digamos, de um padrão, como um padrão musical que possa ser usado para sinalizar mais rapidamente e ainda ser confiável?

rubmz
fonte

Respostas:

7

Com uma taxa de amostragem de 250 Hz, você pode enviar facilmente 100 bits / segundo ou mais. Em 0,5 segundo, isso seria da ordem de 50 a 60 bits.

A questão é: quais padrões de bits você deve selecionar que sejam prontamente distinguíveis um do outro e também do ruído e interferência externos? Uma solução comum é usar sequências de bits pseudo-aleatórias, também conhecidas como códigos de barras , que possuem a baixa correlação cruzada desejada.

Uma técnica DSP conhecida como " filtro correspondente " pode ser usada para detectar os códigos.

Dave Tweed
fonte
Soa interessante! Mas eu estava pensando em como o "filtro correspondente" computacionalmente complexo pode ser? Exigiria cálculos pesados ​​de FFT / outros?
rubmz
Eu verifiquei as implementações do c ++ em busca de um filtro correspondente e parece que seria necessário cálculos bastante pesados ​​para detectar o sinal. Portanto, pode não ser tão útil para mim, porque o código do lado do sensor seria executado em um ambiente RT, então existe algum outro filtro que me permita enviar 2 tipos de sinais, em menos de 0,5 segundo, sem muitos cálculos ?
rubmz
2
Ele não requer uma transformação de Fourier, mas exige o equivalente a um filtro FIR (resposta de impulso finito) em cada um dos três canais de entrada, o que é matematicamente equivalente a produzir um produto escalar em dois vetores de 128 amostras para cada novo amostra que aparece (128 multiplica e 128 adiciona, 250 vezes por segundo, para um total de ~ 33k operações de adição múltipla por segundo por filtro ou cerca de 100k segundo MAC / s no total). Mesmo um chip DSP de gama baixa, como o Microchip dsPIC, pode lidar facilmente com esse tipo de cálculo em tempo real.
Dave Tweed
2
Só para esclarecer, você precisa executar esse cálculo separadamente para cada código diferente que deseja detectar. Assim, por exemplo, se você tiver 10 códigos diferentes, qualquer um dos quais pode ser transmitido a qualquer momento, será necessário executar dez filtros correspondentes em paralelo, para um total de 1 milhão de MACs / s - ainda dentro da capacidade de um chip dsPIC ou similar. Se você achar que códigos mais curtos são robustos o suficiente em seu aplicativo, poderá usar filtros correspondentemente mais curtos e a carga computacional cai proporcionalmente.
21815 Dave McLaughlin #