¿La mejor manera de enviar una señal en una frecuencia muy baja (250Hz)?

8

Soy un programador que enfrenta una pregunta electrónica, ¡así que pensé que este es el lugar para preguntar!

  • Tengo un sensor de campo magnético que me proporciona valores de campo magnético (eje XYZ) 250 veces por segundo.
  • Un circuito electrónico con un microprocesador programable controla una bobina, que puede cambiar el campo magnético lo suficientemente cerca de este sensor. Sin embargo, los dos dispositivos no están ubicados estrictamente, por lo que no puedo transmitir la medición de posicionamiento.
  • Deseo enviar 2 tipos diferentes de señales desde el circuito al sensor, que pueden soportar ruidos fuertes en el campo magnético y ser más cortos que medio segundo (¡Sí, segundos, estamos en 250 Hz!)

La solución actual es transmitir una onda cuadrada de 17Hz, luego 12Hz, luego 17Hz para la señal A, invirtiendo el orden de la señal B. Pero para detectar estas señales es necesario enviar ondas lo suficientemente largas, lo que hace que las señales tengan una longitud de alrededor de 1.5 segundos.

Entonces, mi pregunta aquí es: ¿Hay alguna forma, digamos un patrón, como un patrón musical, que se pueda usar para señalar más rápido y aún ser confiable?

rubmz
fuente

Respuestas:

7

Con una frecuencia de muestreo de 250 Hz, puede enviar fácilmente 100 bits / segundo o más. En 0,5 segundos, eso sería del orden de 50-60 bits.

La pregunta es, ¿qué patrones de bits debe seleccionar que sean fácilmente distinguibles entre sí y también del ruido exterior y la interferencia? Una solución común es utilizar secuencias de bits pseudoaleatorias, también conocidas como códigos de Barker , que tienen la baja correlación cruzada deseada.

Se puede utilizar una técnica DSP conocida como " filtro adaptado " para detectar los códigos.

Dave Tweed
fuente
¡Suena interesante! Pero, estaba divagando cuán computacionalmente complejo podría ser un "filtro combinado". ¿Requeriría grandes cálculos de FFT / otros?
rubmz
Verifiqué las implementaciones de c ++ para un filtro adaptado, y parece que requeriría cálculos bastante pesados ​​para detectar la señal. Por lo tanto, podría no ser tan útil para mí, porque mi código del lado del sensor se ejecutaría en un entorno RT, por lo tanto, ¿hay algún otro filtro que me permita enviar 2 tipos de señales, en menos de .5 segundos, sin demasiados cálculos? ?
rubmz
2
No requiere una transformada de Fourier, pero sí requiere el equivalente de un filtro FIR (respuesta de impulso finito) en cada uno de los tres canales de entrada, que es matemáticamente equivalente a hacer un producto punto en dos vectores de 128 muestras para cada nuevo muestra que viene (128 multiplicaciones y 128 sumas, 250 veces por segundo, para un total de ~ 33k operaciones de sumar múltiples cada segundo por filtro, o aproximadamente 100k MAC / s de segundo total). Incluso un chip DSP de gama muy baja, como el Microchip dsPIC, puede manejar fácilmente este tipo de cálculo en tiempo real.
Dave Tweed
2
Para que quede claro, debe ejecutar ese cálculo por separado para cada código diferente que desea poder detectar. Entonces, por ejemplo, si tiene 10 códigos diferentes, cualquiera de los cuales se puede transmitir en cualquier momento, necesitará ejecutar diez filtros coincidentes en paralelo, para un total de MAC de 1M / seg, aún dentro de la capacidad de un dsPIC o chip similar. Si encuentra que los códigos más cortos son lo suficientemente robustos en su aplicación, entonces puede usar filtros correspondientemente más cortos, y la carga computacional cae proporcionalmente.
Dave Tweed