# Construyendo un receptor SDR GPS en STM32 sin chips especializados
El STM32F4 puede capturar y procesar en tiempo real un flujo de datos de 2 bits proveniente del front-end de RF GNSS MAX2769 a 16.368 MHz. Toda la cadena, desde la ADC hasta la correlación, se implementa en software —sin ASICs ni FPGAs— utilizando DMA y operaciones optimizadas en bits.
Arquitectura del receptor GNSS
Los receptores GPS tradicionales dependen de correladores dedicados como el GP2021 para encontrar picos de correlación del código PRN. Este proyecto reemplaza esa cadena de hardware con un MCU:
- Front-end de RF (MAX2769) digitaliza la señal a IF de 4.092 MHz
- DMA captura datos en un buffer circular
- Procesamiento en software: eliminación de portadora, eliminación de código, correlación
Un período PRN (1 ms) contiene 16368 muestras —exactamente 16 por chip (1023 chips). Los datos empaquetados en bits se agrupan en 2 bytes por chip.
Hardware: Front-end MAX2769
El MAX2769 en modo de estado de dispositivo preconfigurado (PGM=1, variante 2) genera una señal de signo de un bit en I1 sin configuración SPI. La placa incluye:
- TCXO a 16.368 MHz
- Regulador LDO de 3.0 V
- Antena activa en J3
- Salida de reloj en P5
- Datos en P3
Las frecuencias están elegidas para una alineación perfecta: 16368 / 1023 = 16 muestras/chip. Patrón de chip ideal en IF: 0b1100110011001100.
Captura de datos en STM32F4-Discovery
El STM32F4 (Cortex-M4, 168 MHz, 192 KB RAM, 1 MB Flash) usa SPI + DMA en modo circular para 16 Mbps.
- Doble buffer: interrupciones a la mitad/lleno del buffer de 4 KB
- 2 KB por PRN (2046 bytes)
- Buffer extra para procesamiento sin detener el DMA
El código DMA asegura recepción continua: perder incluso un byte rompe la sincronización.
DSP optimizado en bits
Sin procesamiento estilo FPU (16 Msamples/s), usamos una técnica de un receptor GPS/GLONASS casero: reemplazar multiplicación por XOR para datos de signo.
XNOR (XOR invertido) equivale a multiplicación (*-1 -1 = 1, -1 1 = -1*). XOR secuenciales manejan la inversión.
Las operaciones se vectorizan en palabras de 32 bits para mayor velocidad.
Cadena de procesamiento de señales
- NCO de portadora: Genera armónicos I/Q considerando Doppler, error del TCXO y IF de 4.092 MHz. Mezcladores duales desplazan a banda base.
- NCO de código: PRN local (1023 chips) interpolado a 16 muestras/chip.
- Correlación: XOR elemento a elemento de datos de entrada con código local + acumulación.
La forma compleja I/Q separa bandas laterales.
// Ejemplo de correlación en bits (pseudocódigo)
for (i = 0; i < 2046; i += 4) {
uint32_t input = buffer[i];
uint32_t replica = prn_replica[i];
corr += __builtin_popcount(input ^ replica) - 16;
}
Uso de recursos y límites
- 4 canales de correlación: ~70% CPU a 168 MHz
- RAM: 12 KB/canal (buffers + estados)
- Sin seguimiento ni datos de navegación en versión base
- Inicialización manual de efemérides
El proyecto logra arranque en frío en 30–60 s con SNR > 35 dB·Hz.
Lecciones clave
- Cadena GPS completa en software en STM32 —sin ASIC/FPGA
- XOR en bits supera multiplicación: aceleración 10x en DSP
- 16 muestras/chip para interpolación precisa de PRN
- Captura continua con DMA es crítica para sincronización
- Escala a 6–8 canales en F4/F7
- Código open-source para experimentos L1 C/A
— Editorial Team
Aún no hay comentarios.