SDR-GPS-Empfänger auf STM32 ohne Spezialchips bauen
Der STM32F4 kann einen 2-Bit-Datenstrom vom GNSS-RF-Frontend MAX2769 mit 16,368 MHz in Echtzeit aufnehmen und verarbeiten. Die gesamte Kette vom ADC bis zur Korrelation wird in Software umgesetzt – ohne ASICs oder FPGAs – mit DMA und optimierten Bitoperationen.
GNSS-Empfänger-Architektur
Traditionelle GPS-Empfänger setzen auf dedizierte Korrelatoren wie den GP2021, um Korrelationspeaks der PRN-Codes zu finden. Dieses Projekt ersetzt diese Hardwarekette durch einen Mikrocontroller:
- RF-Frontend (MAX2769) digitalisiert das Signal bei IF 4,092 MHz
- DMA nimmt Daten in einem kreisförmigen Puffer auf
- Softwareverarbeitung: Trägerentfernung, Code-Entfernung, Korrelation
Ein PRN-Periode (1 ms) umfasst 16368 Samples – genau 16 pro Chip (1023 Chips). Bitgepackte Daten werden zu 2 Bytes pro Chip gruppiert.
Hardware: MAX2769-Frontend
Der MAX2769 im Preconfigured Device State-Modus (PGM=1, Variante 2) liefert ein ein-Bit-Zeichen-Signal auf I1 ohne SPI-Konfiguration. Das Board enthält:
- TCXO bei 16,368 MHz
- 3,0-V-LDO
- Aktive Antenne an J3
- Taktausgang an P5
- Daten an P3
Frequenzen sind für perfekte Ausrichtung gewählt: 16368 / 1023 = 16 Samples/Chip. Ideales Chip-Muster auf IF: 0b1100110011001100.
Datenerfassung auf STM32F4-Discovery
Der STM32F4 (Cortex-M4, 168 MHz, 192 KB RAM, 1 MB Flash) nutzt SPI + DMA im kreisförmigen Modus für 16 Mbps.
- Double Buffering: Unterbrechungen bei halb/vollem 4-KB-Puffer
- 2 KB pro PRN (2046 Bytes)
- Extra-Puffer für Verarbeitung ohne DMA-Stopp
DMA-Code gewährleistet durchgängigen Empfang: Schon ein verlorenes Byte zerstört die Synchronisation.
Optimierte DSP auf Bits
Ohne FPU-ähnliche Verarbeitung (16 Msamples/s) greifen wir auf eine Technik aus einem selbstgebauten GPS/GLONASS-Empfänger zurück: Multiplikation durch XOR für Zeichen-Daten ersetzen.
XNOR (umgekehrtes XOR) entspricht Multiplikation (-1 -1 = 1, -1 1 = -1). Sequenzielle XORs bewältigen Inversionen.
Operationen werden auf 32-Bit-Wörter vektorisiert für mehr Geschwindigkeit.
Signalverarbeitungskette
- Träger-NCO: Erzeugt I/Q-Harmonische unter Berücksichtigung von Doppler, TCXO-Fehler und 4,092 MHz IF. Duale Mixer verschieben auf Basisband.
- Code-NCO: Lokaler PRN (1023 Chips) interpoliert auf 16 Samples/Chip.
- Korrelation: Elementweises XOR von Eingabedaten mit lokalem Code + Akkumulation.
Komplexe I/Q-Form trennt Seitbänder.
// Bit-Korrelationsbeispiel (Pseudocode)
for (i = 0; i < 2046; i += 4) {
uint32_t input = buffer[i];
uint32_t replica = prn_replica[i];
corr += __builtin_popcount(input ^ replica) - 16;
}
Ressourcennutzung und Grenzen
- 4 Korrelationskanäle: ~70 % CPU bei 168 MHz
- RAM: 12 KB/Kanal (Puffer + Zustände)
- Kein Tracking oder Nav-Daten in Basisversion
- Manuelle Ephemeriden-Initialisierung
Das Projekt erreicht Cold Start in 30–60 s bei SNR > 35 dB·Hz.
Wichtige Erkenntnisse
- Vollständige Software-GPS-Kette auf STM32 – ohne ASIC/FPGA
- Bit-XOR schlägt Multiplikation: 10x DSP-Beschleunigung
- 16 Samples/Chip für präzise PRN-Interpolation
- Durchgängige DMA-Erfassung entscheidend für Sync
- Skalierbar auf 6–8 Kanäle mit F4/F7
- Open-Source-Code für L1 C/A-Experimente
— Editorial Team
Noch keine Kommentare.