Zpět na domů

SDR GPS na STM32: zpracování bez ASIC

Článek popisuje implementaci SDR GPS přijímače na STM32F4 s MAX2769 front-end. Programové zpracování surových dat používá bitové XOR pro korelaci PRN kódů místo tradičních ASIC. Zachyt přes SPI+DMA zajišťuje reálný čas.

Programový GPS přijímač na mikrokontroléru STM32
Advertisement 728x90

Realizace SDR GPS přijímače na STM32 bez specializovaných čipů

STM32F4 dokáže zachytit a zpracovat dvoubitový datový proud z GNSS RF front-endu MAX2769 rychlostí 16,368 MHz v reálném čase. Celý řetězec od A/D převodníku po korelaci je realizován čistě softwarově bez ASIC nebo FPGA, s využitím DMA a optimalizovaných bitových operací.

Architektura GNSS přijímače

Tradiční GPS přijímače používají specializované korelační čipy jako GP2021 pro hledání špičky korelace PRN kódů. V tomto projektu je celý řetězec nahrazen mikrokontrolérem:

  • RF front-end (MAX2769) digitalizuje signál na IF 4,092 MHz
  • DMA zachycuje data do kruhového bufferu
  • Softwarové zpracování: carrier wipeoff, code wipeoff, korelaci

Jeden PRN period (1 ms) obsahuje 16368 vzorků, přesně 16 na čip (1023 čipů). Bitová data jsou seskupena po 2 bajtech na čip.

Google AdInline article slot

Hardware: MAX2769 front-end

MAX2769 v režimu Preconfigured Device State (PGM=1, varianta 2) vydává jednobitový sign-signál s I1 bez SPI konfigurace. Deska obsahuje:

  • TCXO 16,368 MHz
  • LDO 3,0 V
  • Aktivní anténa na J3
  • Takclocký výstup P5
  • Data na P3

Frekvence jsou vybrány pro přesné shody: 16368 / 1023 = 16 vzorků/čip. Ideální čip na IF: 0b1100110011001100.

Zachyt dat na STM32F4-Discovery

STM32F4 (Cortex-M4, 168 MHz, 192 KB RAM, 1 MB Flash) používá SPI + DMA v kruhovém režimu pro 16 Mbit/s.

Google AdInline article slot
  • Dvojité bufferování: přerušení na půlce/konci 4 KB bufferu
  • 2 KB na PRN (2046 bajtů)
  • Dodatečný buffer pro zpracování bez zastavení DMA

DMA kód zajišťuje nepřetržitý příjem: ztráta bajtu ničí synchronizaci.

Optimalizovaná DSP na bitech

Bez FPU-like zpracování (16 Mvzorků/s) je použita metoda z domácího GPS/GLONASS přijímače: nahrazení násobení XOR pro sign-data.

XNOR (inverze XOR) je ekvivalent násobení (-1 -1 = 1, -1 1 = -1). Sekvenční XOR kompenzují inverzi.

Google AdInline article slot

Operace jsou vektorizovány na 32bitová slova pro rychlost.

Řetězec zpracování signálu

  • Carrier NCO: Generování I/Q harmonik s ohledem na Doppler, chybu TCXO a IF 4,092 MHz. Dva směšovače přenáší na baseband.
  • Code NCO: Lokální PRN (1023 čipů) s interpolací na 16 vzorků/čip.
  • Korelaci: Prvkové XOR vstupních dat s lokálním kódem + sčítání.

Komplexní I/Q forma umožňuje oddělit boční pásma.

// Příklad bitové korelace (pseudokód)
for (i = 0; i < 2046; i += 4) {
    uint32_t input = buffer[i];
    uint32_t replica = prn_replica[i];
    corr += __builtin_popcount(input ^ replica) - 16;
}

Náročnost na zdroje a limity

  • 4 kanály korelace: ~70 % CPU na 168 MHz
  • RAM: 12 KB/kanál (bufry + stavy)
  • Bez sledování (tracking) nebo navigačních dat v základní verzi
  • Inicializace efemeri manuálně

Projekt dosahuje cold start za 30–60 s při SNR > 35 dB·Hz.

Co je důležité

  • Plně softwarová realizace GPS řetězce na STM32 bez ASIC/FPGA
  • Bitové XOR místo násobení: 10x zrychlení DSP
  • 16 vzorků/čip zajišťuje přesnou interpolaci PRN
  • Nepřetržitý DMA zachyt je klíčový pro synchronizaci
  • Škálovatelné na 6–8 kanálů na F4/F7
  • Otevřený kód pro experimenty s L1 C/A

— Editorial Team

Advertisement 728x90

Číst dál