Zurück zur Startseite

SDR GPS auf STM32: Verarbeitung ohne ASIC

Der Artikel beschreibt die Implementierung eines SDR GPS-Empfängers auf STM32F4 mit MAX2769-Front-End. Softwareverarbeitung roher Daten verwendet bitweise XOR für PRN-Code-Korrelation statt traditionellem ASIC. Aufnahme via SPI+DMA gewährleistet Echtzeit.

Software-GPS-Empfänger auf STM32-Mikrocontroller
Advertisement 728x90

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.

Google AdInline article slot

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.

Google AdInline article slot
  • 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.

Google AdInline article slot

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

Advertisement 728x90

Weiterlesen