fec, crate de Rust para corrección de errores en radio definida por software y enlaces espaciales

Fuentes: fec: A Rust crate for Forward Error Correction in SDR and space links

fec es una biblioteca (crate) escrita en Rust que implementa técnicas de corrección de errores hacia adelante (Forward Error Correction, FEC) orientadas a aplicaciones de radio definida por software (SDR), comunicaciones espaciales y enlaces por satélite. Su objetivo es ofrecer, en un crate único, los dos esquemas de codificación más extendidos en estos entornos, con un rendimiento igual o superior al de las bibliotecas en C ya consolidadas.

La primera pieza del crate es un codificador/decodificador convolucional con decodificador de Viterbi, disponible en decisión dura y decisión blanda. Incluye los códigos más empleados en misiones espaciales —rate-1/2 k=7 (el código de la NASA), rate-1/2 k=9, rate-1/3 k=9 y rate-1/6 k=15— y, en general, cualquier tasa entre 1/2 y 1/8 con órdenes de k=4 a k=16. Sobre el compilador nightly de Rust, la feature simd activa una versión acelerada del decodificador de Viterbi con instrucciones SSE/AVX2/AVX512.

La segunda pieza son los códigos Reed–Solomon sobre GF(2⁸), con decodificación de errores y de erasures. Se proporciona el código estándar CCSDS (255,223), tanto en su representación convencional como en la representación dual-basis (Berlekamp) tal y como aparece en el enlace físico.

El proyecto se inspira en libcorrect, una biblioteca en C del mismo autor, y mantiene compatibilidad a nivel de bit con libfec de Phil Karn (KA9Q), de modo que los datos codificados con una pueden decodificarse con la otra. Existe además un crate satélite, fec-shim, que expone la misma funcionalidad bajo la ABI C de libfec (create_viterbi27, init_rs_char, encode_rs_ccsds, etc.) para integrarla como sustituto directo en bases de código C existentes. El proyecto se distribuye bajo licencia BSD-3-Clause y contempla futuras ampliaciones —anchos de Reed–Solomon distintos de GF(2⁸), erasure en decisión dura para Viterbi y soporte de códigos punteados—.