La mayoría de los receptores disponen de cortadores de datos que se ajustan dinámicamente a la intensidad de la señal entrante. De este modo, siempre se obtiene un flujo de bits, incluso cuando no hay señal transmitida que cortar. En ese caso, el cortador de datos sólo está cortando ruido.
De un modo u otro, el receptor tiene que ser capaz de identificar el inicio de un mensaje manchester, aunque el cortador de datos escupa continuamente 1s y 0s. Hay varios esquemas, pero en general se requiere que cada mensaje vaya precedido de algo que sea identificable pero que se garantice que no está contenido en ninguna parte de un mensaje válido. Este algo se conoce generalmente como el preámbulo .
El descodificador siempre busca esta firma especial de preámbulo, ya sea en medio de la descodificación de un mensaje o no. Detectar el preámbulo incluso cuando el descodificador cree que está en el fondo del mensaje es importante por dos razones. Puede estar en el mensaje erróneamente, y podría estar en un mensaje débilmente recibido que está siendo pisoteado por un nuevo mensaje fuertemente recibido. En este último caso, el mensaje original nunca podrá ser descifrado. Lo mejor que puedes hacer es que el mensaje parcial original no te distraiga de la decodificación del mensaje posterior que sí puedes decodificar.
Hay muchos esquemas de preámbulos. Aparentemente, en este caso utilizaron deliberadamente una frecuencia de reloj diferente para que sea detectado como un mensaje no válido después de algunos ciclos. Esa es una forma válida de hacer las cosas.
Suelo utilizar el mismo reloj pero una larga secuencia de niveles largos sucesivos, que serían 000000.... o 111111... dentro de un mensaje real. Sin embargo, utilizo un esquema de relleno de bits en el cuerpo del mensaje para que no sea posible más de un número predeterminado de niveles largos consecutivos. Por ejemplo, si las reglas de relleno de bits permiten como máximo 7 bits consecutivos del mismo valor, entonces puede haber como máximo 14 niveles largos consecutivos dentro de un mensaje válido. Mi preámbulo viola deliberadamente esta regla. Tan pronto como el decodificador ve el 15º nivel largo consecutivo, aborta cualquier lógica en la que se encuentre y pasa al estado de preámbulo detectado, esperando un bit de inicio con la polaridad correcta.
Añadido sobre el corte de datos
El corte de datos se refiere a la interpretación de la señal analógica entrante en una señal digital. Lo ideal sería que la señal analógica que sale del receptor de radio sin procesar se pareciera ya a una señal digital, pero eso no ocurre en la realidad por diversas razones. Incluso si lo hiciera, la amplitud de esa señal dependería bastante de la distancia al transmisor, sólo por enumerar una variable. Como resultado, la señal de radio desmondulada en bruto no puede ser interpretada directamente por una puerta lógica digital. El proceso de pasar de la señal analógica recibida a una verdadera señal digital se llama corte de datos .
Los antiguos cortadores de datos analógicos eran poco más que un comparador con la señal recibida en una entrada y una versión filtrada de paso bajo de esa señal en la otra. La frecuencia del filtro de paso bajo se ajustaba lo suficientemente baja como para no reaccionar mucho a los bits individuales, sino para encontrar el promedio de CC sobre unos cuantos bits. Esto se utilizaba como el nivel medio de la señal para decidir si la señal instantánea era alta o baja.
Una de las razones por las que la codificación manchester es popular con este tipo de señales es que cada bit es alto la mitad del tiempo y bajo la otra mitad, promediando el nivel medio en cada bit. Aun así, los cortadores de datos analógicos necesitaban unos cuantos bits para asentarse adecuadamente y empezar a producir la señal digital correcta tras un gran cambio en el nivel de la señal recibida. Esta es otra razón para el preámbulo, que es para dar al cortador de datos tiempo para asentarse.
Hoy en día, con los microcontroladores fácilmente disponibles y que probablemente decodifican la señal de datos cortada de todos modos, la señal demodulada en bruto puede introducirse directamente en el micro y el corte de datos se realiza en el firmware. Esto permite emplear fácilmente operaciones no lineales en el cortador de datos que serían difíciles en el hardware analógico.
Un esquema que he utilizado algunas veces es muestrear la señal analógica recibida alrededor de 10 veces por bit manchester. Mantengo un búfer con algo más de un bit de muestras, encuentro su mínimo y su máximo, y uso la media de estos como umbral de corte. Como un nivel alto o bajo nunca dura más de 1 bit en un flujo manchester, esto garantiza que tanto un nivel alto como uno bajo están en el buffer cuando importa. Una de las ventajas de este esquema es que el rebanador de datos se asienta mucho más rápido que si se utiliza un filtro analógico de paso bajo.
A menudo ayuda aplicar quizás dos polos de filtrado de paso bajo al flujo de lecturas A/D antes de cualquier otro procesamiento. Esto ayuda a reducir el ruido aleatorio y un poco el ruido de cuantificación. El filtro debería establecerse en torno al 80-90% en un tiempo de 1/2 bit.
Lo anterior se realiza en la rutina de interrupción A/D. Después de cortar, la interrupción A/D puede empujar el resultado en un FIFO drenado por el decodificador que se ejecuta en primer plano, o puede clasificar cada nivel como largo, corto o inválido, y empujar eso en un FIFO para que el decodificador lo maneje.
He implementado este algoritmo en un dsPIC con un A/D de 12 bits decodificando un flujo manchester de 10 kbit/s. Funcionó tan bien que decodificó correctamente paquetes enteros en los que la amplitud alta/baja era sólo de unos pocos LSB. No pude distinguir los bits en el osciloscopio, pero el cortador de datos digitales los recogió de todos modos, y el decodificador fue capaz de decodificar el paquete. El paquete contenía una suma de control CRC de 20 bits, por lo que sé que el decodificador decodificó el paquete correctamente.