Con una cuenta desbloqueas el cuestionario, el foro de dudas y el tutor con IA de esta lección, además del registro de progreso y el certificado verificable al terminar «Estaciones Terrenas y SDR: Recibir Satélites desde Cero».
Supón que tu demodulador funciona a la perfección y te entrega una secuencia impecable: ...0110100111010010.... Enhorabuena, y ahora ¿qué? No sabes dónde empieza el mensaje, dónde termina, qué campos tiene ni si alguno de esos bits se corrompió por el camino. Un flujo de bits es como un texto sin espacios, sin mayúsculas y sin puntos: contiene la información pero no se puede leer. El framing es el conjunto de convenciones que le devuelven la puntuación, y esta lección recorre las dos familias que cubren prácticamente todo lo que vas a recibir: AX.25 en el mundo amateur y de los cubesats, y CCSDS en las misiones profesionales.
El delimitador: la bandera 0x7E
La idea más simple para marcar los límites de una trama es reservar un patrón de bits que signifique "aquí empieza" y "aquí termina". AX.25 usa la bandera (flag) 0x7E, que en binario es 01111110: un cero, seis unos y un cero. El receptor no busca datos, busca ese patrón; en cuanto lo encuentra, sabe que lo que sigue es el primer byte de la trama y que la trama termina cuando vuelva a aparecer. Entre transmisiones el emisor manda banderas continuamente, lo que además mantiene ocupado al lazo de sincronismo de bit.
Pero surge un problema evidente: ¿qué pasa si los datos de usuario contienen la secuencia 01111110? El receptor cortaría la trama por la mitad. La solución se llama bit stuffing (relleno de bits): el transmisor inserta un 0 después de cada cinco 1 consecutivos que aparezcan en los datos, de modo que la secuencia de seis unos de la bandera no puede producirse dentro del contenido. El receptor hace lo inverso: tras ver cinco unos seguidos, descarta el cero que venga a continuación. El coste es un pequeño aumento de longitud, variable según los datos.
A esto se suma la codificación NRZI (non-return-to-zero inverted): un 0 se representa como un cambio de nivel y un 1 como ausencia de cambio. Combinada con el bit stuffing, garantiza que nunca haya más de cinco intervalos seguidos sin transición, y las transiciones son justamente lo que el lazo de recuperación de reloj necesita para no derivar. Es un detalle elegante: dos mecanismos pensados para cosas distintas se refuerzan mutuamente.
Anatomía de una trama AX.25
AX.25 es el protocolo de enlace del packet radio de radioaficionado, y por herencia directa el más usado en telemetría de cubesats. Una trama UI (unnumbered information, la variante sin conexión que emplean las balizas) tiene esta estructura:
Campo
Bytes
Contenido
Bandera
1
0x7E
Dirección de destino
7
6 caracteres del indicativo desplazados un bit a la izquierda + SSID
Dirección de origen
7
igual, con el bit final marcando el fin de la lista de direcciones
Control
1
0x03 para una trama UI
PID
1
0xF0: sin protocolo de capa 3
Información
0–256
la carga útil (telemetría, texto, binario)
FCS
2
CRC-16 de la familia X.25, calculado sobre todo lo anterior salvo banderas
Bandera
1
0x7E
Ejemplo resuelto: leer y cronometrar una baliza real
Recibes una trama cuyos campos, ya desencapsulados, son: destino CQ-0, origen XE1SAT-11, control 0x03, PID 0xF0 e información de 42 bytes con el texto TLM 0142 VBAT=8.12 IBAT=0.34 T=-4.5 MODE=NOM. La convención de visualización invierte el orden del cable, de modo que la trama se anota XE1SAT-11>CQ-0. Con eso ya puedes leer la telemetría: la baliza número 142, con la batería a 8.12 V y consumiendo 0.34 A, a −4.5 °C y en modo nominal.
Calculemos ahora cuánto ocupa en el aire. La sobrecarga de framing es:
1+7+7+1+1+2+1=20bytes
de modo que la trama completa mide 42+20=62 bytes, es decir 62×8=496 bits. A la tasa AFSK-1200 de la lección anterior:
ttrama=1200bit/s496bits=0.413s
A eso hay que sumar el preámbulo de banderas que el transmisor emite antes de los datos (el clásico TXDELAY, del orden de 300 ms) para que el receptor enganche el reloj, así que la emisión real ronda los 0.71 s. La eficiencia de trama es 42/62=67.7%: una tercera parte del aire se va en framing. Si la carga útil subiera a 128 bytes, la eficiencia treparía a 128/148=86.5%. Conclusión operativa: en enlaces lentos conviene agrupar telemetría en tramas grandes en vez de enviar muchas pequeñas. Y en un pase de 11 minutos con una baliza cada 30 s recibirás como mucho unas 22 tramas; que decodifiques la mitad o el 90 % de ellas es exactamente la diferencia que aporta cuidar la cadena.
CCSDS: el mismo problema a escala de misión
El CCSDS (Consultative Committee for Space Data Systems) es el organismo que estandariza las comunicaciones de las agencias espaciales, y sus recomendaciones son lo que hablan las misiones profesionales. La lógica es idéntica a la de AX.25 —delimitar, direccionar, verificar— pero organizada en capas limpias y dimensionada para enlaces de espacio profundo.
La pieza análoga a la bandera es el ASM (attached sync marker, marcador de sincronismo adjunto): una palabra fija de 32 bits, 0x1ACFFC1D, que precede a cada trama de transferencia. Como es fija y conocida, el receptor la busca por correlación en vez de por comparación exacta, lo que le permite encontrarla incluso con varios bits erróneos: una ventaja decisiva cuando la señal está en el límite. Las tramas tienen longitud fija —lo que simplifica el hardware— y el flujo se aleatoriza (se combina con una secuencia pseudoaleatoria conocida) para garantizar transiciones abundantes con independencia del contenido, cumpliendo el mismo papel que NRZI y el bit stuffing en AX.25.
Detectar no es corregir
Aquí vive la confusión más común del principiante. El CRC (cyclic redundancy check, comprobación de redundancia cíclica) del campo FCS detecta errores: si el CRC no cuadra, la trama se descarta y punto. Un CRC-16 detecta todos los errores de hasta 16 bits consecutivos y deja pasar sin detectar, para patrones aleatorios, del orden de una trama corrupta de cada 216≈65000. Es una salvaguarda excelente y barata, pero no recupera absolutamente nada: con un solo bit mal, pierdes la trama entera.
La corrección de errores hacia adelante (FEC, forward error correction) es otra cosa: añade redundancia estructurada de modo que el receptor pueda reconstruir los bits perdidos sin pedir retransmisión — algo imprescindible cuando el emisor está a 400 km de altura y pasa una vez cada 90 minutos. Dos familias dominan:
Reed-Solomon, que trabaja sobre símbolos de un byte y es excelente contra errores en ráfaga. El código canónico de CCSDS es RS(255, 223): a 223 bytes de datos añade 32 de paridad para formar una palabra de 255. Puede corregir hasta t=(255−223)/2=16 bytes erróneos por palabra, estén donde estén, con una redundancia de 32/255=12.5%.
Códigos convolucionales, que se decodifican con el algoritmo de Viterbi y son excelentes contra errores aislados distribuidos. En CCSDS se concatenan con Reed-Solomon: el convolucional limpia el grueso del ruido y deja ráfagas residuales que Reed-Solomon barre. La ganancia de codificación combinada es de varios decibelios, y cada decibelio ahorrado es potencia, antena o dinero que la misión no gasta.
La intuición que basta para operar una estación: el CRC te dice si la trama está bien; la FEC hace que lo esté. Y añadir un 12.5 % de bits para ganar varios decibelios de margen es, casi siempre, el mejor negocio disponible.
El camino completo desde las muestras hasta un número con unidades es este:
Las herramientas que ya existen
Nada de esto hay que implementarlo desde cero, y no deberías. Tres piezas de software libre cubren casi todo el terreno:
direwolf: un TNC (terminal node controller) por software que demodula AFSK-1200 desde una tarjeta de sonido y entrega tramas AX.25. Es la puerta de entrada clásica.
gr-satellites: un conjunto de decodificadores sobre GNU Radio que cubre más de un centenar de satélites, cada uno con su modulación, su framing y su formato de telemetría particular. Es el estado del arte de la comunidad.
SatDump: orientado a satélites de imagen (APT, LRPT, HRPT y varias bandas S), procesa desde la grabación IQ hasta el producto georreferenciado.
El eslabón final es social más que técnico: las tramas decodificadas se suben a bases de datos comunitarias como SatNOGS DB, donde se agregan las observaciones de estaciones de todo el mundo y se convierten en series temporales públicas de la salud de cada satélite. Un operador en Aguascalientes recibe la baliza que otro en Nueva Zelanda no alcanzó, y entre los dos reconstruyen la órbita completa. Esa lógica de red es el tema de la lección 9.
Comprueba que separas detección de corrección:
Una trama AX.25 llega con un bit invertido dentro del campo de información. ¿Qué ocurre?
Con la trama ya convertida en números con unidades, solo falta una cosa para tener una estación de verdad: que todo esto ocurra sin que nadie esté delante. Ese es el asunto de la lección 8.