Lectura de frecuencias sin filtros

3

¿Es posible leer un conjunto de frecuencias con un PIC de tal manera que para cada frecuencia se llame una función diferente?

La idea era enviar múltiples frecuencias en diferentes momentos (sin superposición o súper posicionamiento) a través de una portadora y leerlas en el otro extremo dando como resultado diferentes salidas. Esperaba evitar tener que implementar muchos filtros de paso de banda para canalizar cada frecuencia a un pin diferente, lo que permite al PIC distinguir entre las entradas.

Al final debería haber ~ 1000 frecuencias diferentes en el rango audible, bien distinguibles para un microcontrolador.

Gracias

    
pregunta Max Z.

3 respuestas

9

Como mencionó Brian, hay algo que se llama FFT (transformada rápida de Fourier). Toma un fragmento de tiempo de la señal y devuelve la amplitud de los componentes de frecuencia en grupos de frecuencia y ancho de banda predeterminados. El algoritmo FFT es una transformación de Fourier general optimizada computacionalmente que opera con una potencia de dos grupos de frecuencias distribuidos linealmente desde 0 hasta el extremo superior del rango de frecuencia para el que está configurado.

Una FFT es computacionalmente costosa y solo se puede realizar en fragmentos fijos de la señal del dominio del tiempo. Si desea obtener un contenido de frecuencia general, entonces puede ser apropiado. Si solo desea detectar la presencia de un pequeño número de frecuencias específicas y conocidas, entonces probablemente no sea apropiado. Un ejemplo de esto último sería la decodificación DTMF (tono de toque) ya que solo hay 8 frecuencias específicas y generalmente desea realizar la decodificación de tonos de manera continua, y las frecuencias están bastante separadas entre sí.

Para detectar la amplitud de una frecuencia específica en una señal compuesta, multiplique esa señal por el seno y el coseno de la frecuencia deseada. Filtro de paso bajo cada una de estas dos señales de producto por separado. El ancho de banda de este filtro es la mitad del ancho de banda en el que se detectará la frecuencia de interés. Otra forma de decirlo es que este es el ancho de banda de la salida de amplitud resultante. Ahora cuadre las dos señales filtradas de paso bajo y súmelas. El resultado es el cuadrado de la amplitud de la señal de interés. Puede ver dónde lo he simulado con tres tonos DTMF adyacentes:

La señal de entrada fue de tres frecuencias DTMF adyacentes durante 50 ms cada una con 50 ms de separación. La frecuencia de detección se configuró para coincidir con la ráfaga central. La línea azul es la señal de amplitud al cuadrado resultante. Las constantes de tiempo del filtro de paso bajo se ajustaron para rechazar las frecuencias adyacentes, pero aún así responden lo suficientemente bien dentro de los 50 ms (la longitud de tono DTMF mínima válida).

Si necesita una amplitud verdadera, entonces tendría que tomar la raíz cuadrada del resultado que se muestra aquí. Para detectar simplemente la presencia de una frecuencia particular, la magnitud al cuadrado es lo suficientemente buena. Para otras aplicaciones, la verdadera magnitud puede ser necesaria.

    
respondido por el Olin Lathrop
9

Es posible que una solución mucho más simple de lo que algunos han sugerido esté sujeta a que el sistema cumpla con las restricciones que especifique.

Usted dice que está enviando un tono a la vez. Si es así, y si puede "cuadrar la señal", se presenta al MC (microcontrolador) como una onda cuadrada y si no hay otro ruido significativo, puede determinar la frecuencia fácilmente por cualquiera de varios métodos.

  • Cuenta el número de ciclos de señal en un período finito. Puedes hacer esto varias veces y comparar resultados. La resolución es ~ = 1 / (f.t), por ejemplo, a 400 Hz con 1 segundo de cuenta, se obtiene sobre 1: 400 de precisión. A 200 Hz con una muestra de 3 segundos se obtiene una precisión de ~ = 1: 600. La precisión de la medición del período de tiempo es importante y la precisión de la frecuencia de envío. Como antes, cualquier ruido afectará este método simple.

    No dice cuántos "canales" quiere o qué tan rápida es la velocidad de datos que desea, pero si dice que transmitió de 1 Khz a 2 Khz en pasos de 100 Hz, 1000, 1100, 1200 ... 2000) Podría obtener 11 canales. Si contara 0.1 segundos, obtendría 1000, 110, 120 ... ciclos con una diferencia entre cada uno de los 10 conteos. Con un reloj adecuadamente preciso en cada extremo, podría resolverlo fácilmente. Podría caer tan bajo como diferencias de 5 ciclos y probablemente trabajar bien. Cuando llegas a las diferencias de alrededor de 2 ciclos, tienes que mirar con mucho cuidado cómo funciona todo para evitar errores.

  • Cuenta el período de un ciclo o de N ciclos. Una vez más, la precisión de su reloj establece un límite. También aquí es importante la precisión de establecer cruces por cero. En presencia de ruido, este método también necesitaría múltiples envíos para permitir la comparación de resultados.

  • No dices lo que intentas hacer y por qué, y son una parte importante de la pregunta. Hay muchas formas de enviar datos a través de un canal de audio: todos son "módems" efectivos, pero algunos son mucho más rápidos y más a prueba de errores que otros. Conocer más detalles ayudaría a determinar el mejor método "módem".

respondido por el Russell McMahon
3

Sí. Muestra a una velocidad de al menos la tasa de Nyquist. Ejecutar un FFT.

Necesitará un LPF para evitar el alias.

    
respondido por el Brian Carlton

Lea otras preguntas en las etiquetas