Manera simple de decodificar FSK

Estoy tratando de construir un transmisor y receptor fsk simple, el transmisor es solo un FPGAcable, la lógica es bastante simple, mezclo (con un XOR) la frecuencia de transmisión con una frecuencia más baja, eso crea algunas distorsiones que se pueden seleccionar con un simple receptor de FM.

El receptor se basa en el TDA7000 (sí, ya sé que está obsoleto) con una frecuencia de sintonización fija. Aquí está el espectro recibido para dos casos diferentes, el pico en 1.1 KHzdebería indicar lógica LOWy el pico en 1.6 KHzdebería indicar HIGH, los picos son aproximadamente 300mV, pero supongo que puede variar

espectro recibido

Tenga en cuenta que hay distribuciones en 2.1 Khzy y 3 Khz.

¿Cómo puedo alimentar la señal a un FPGA, que debe contar e identificar la frecuencia, con un número mínimo de partes, supongo que LM741es demasiado para ese tipo de tarea. ¿Cómo trato las distorsiones? ¿Cualquier otra sugerencia?

Respuestas (2)

esquemático

simular este circuito : esquema creado con CircuitLab

Puede obtener la señal en el FPGA ejecutándola a través de un amplificador operacional para darle un desplazamiento de CC (y posiblemente aumentar la amplitud, aunque eso no es estrictamente necesario), luego en un ADC; el ADC no necesita ser particularmente rápido dado que sus señales tienen una frecuencia bastante baja, y un FPGA puede controlar cualquier ADC con una interfaz SPI (o paralela) con una lógica muy simple.

Una vez que el FPGA puede "ver" la señal a través del ADC, tiene varias opciones de DSP para decodificarla. Xilinx, por ejemplo, tiene núcleos IP gratuitos para filtros digitales y/o motores FFT, cualquiera de los cuales puede hacer lo que necesita: descartar frecuencias no deseadas (incluidas las distorsiones a las que se refiere) y detectar las frecuencias deseadas.

Me las arreglé para identificar las frecuencias con arduinos adc y un boceto simple usando el fft, intentaré portarlo a algo más pequeño como el attiny 13, supongo que podría salvar el desorden con núcleos incrustados

Esto debería ser un comentario, pero no hay suficiente espacio.

No se moleste en votar/votar negativamente sobre esa base.

El trazo superior parece 1,6 kHz (alto) y el trazo inferior parece 1,1 kHz (bajo). ¿Qué equipo está utilizando para obtener estos rastros de espectro? Además, ¿en qué parte del TDA7000 estás midiendo? Además, ¿qué frecuencia portadora estás usando?

El trazo superior también muestra un pico de aproximadamente 3 kHz y no se sorprenda porque su método de modulación apesta y producirá armónicos de la frecuencia del modulador y la frecuencia de la portadora.

Diría que la distorsión que está viendo en el trazo superior es de 3,2 kHz y en el trazo inferior diría que está viendo 2,2 kHz y 3,3 kHz.

No estoy tan seguro porque no sabemos nada sobre la pantalla con los rastros verdes encendidos.

Conecté la salida del TDA7000 a los parlantes y obtuve el espectro con una aplicación de Android que traza el espectro del micrófono. La frecuencia de la portadora es 105.33Mhz
¿Cómo se llama la aplicación de Android? Hay una buena llamada FrequenSee. Lo uso para verificaciones de audio en el lugar. Por cierto, ¿cómo extrajiste los datos de la pantalla?
Sí, eso es, estoy usando este también. Tomé una captura de pantalla, intente mantener juntas dos teclas físicas
@KirillKulakov ¡Debo estar quedándome ciego!
¿alguna sugerencia sobre el circuito decodificador?
@KirillKulakov Me sentiría tentado a decodificar usando un detector de FM en cuadratura. O tal vez mire el pin 6 del TDA7000. Este pin alimentado a un detector de AM podría funcionar. Si está utilizando el TDA7000 de la mejor manera y transmitiendo datos continuamente, el tanque LC debe mantenerse totalmente centrado en su portador y, a medida que la modulación lo empuja hacia un lado u otro, es posible que obtenga amplitudes reducidas para 1 y 0. Alternativamente, use filtros de paso de banda en audio y AM detecte cada BPF. Por cierto, no soy un experto en el chip.