Retour à l'accueil

SDR GPS sur STM32 : traitement sans ASIC

L'article décrit l'implémentation d'un récepteur SDR GPS sur STM32F4 avec front-end MAX2769. Le traitement logiciel des données brutes utilise XOR bitwise pour la corrélation du code PRN au lieu d'ASIC traditionnel. La capture via SPI+DMA assure le temps réel.

Récepteur GPS logiciel sur microcontrôleur STM32
Advertisement 728x90

Construction d'un récepteur SDR GPS sur STM32 sans puces spécialisées

Le STM32F4 peut capturer et traiter en temps réel un flux de données 2 bits provenant du front-end RF GNSS MAX2769 à 16,368 MHz. Toute la chaîne, de l'ADC à la corrélation, est implémentée en logiciel — sans ASIC ni FPGA — en utilisant le DMA et des opérations sur bits optimisées.

Architecture du récepteur GNSS

Les récepteurs GPS traditionnels s'appuient sur des corrélateurs dédiés comme le GP2021 pour détecter les pics de corrélation des codes PRN. Ce projet remplace cette chaîne matérielle par un MCU :

  • Front-end RF (MAX2769) numérise le signal à IF 4,092 MHz
  • DMA capture les données dans un tampon circulaire
  • Traitement logiciel : suppression du porteuse, suppression du code, corrélation

Une période PRN (1 ms) contient 16368 échantillons — exactement 16 par puce (1023 puces). Les données compactées en bits sont regroupées en 2 octets par puce.

Google AdInline article slot

Matériel : Front-end MAX2769

Le MAX2769 en mode Preconfigured Device State (PGM=1, variante 2) délivre un signal de signe 1 bit sur I1 sans configuration SPI. La carte inclut :

  • TCXO à 16,368 MHz
  • Régulateur LDO 3,0 V
  • Antenne active sur J3
  • Sortie d'horloge sur P5
  • Données sur P3

Les fréquences sont choisies pour un alignement parfait : 16368 / 1023 = 16 échantillons/puce. Motif idéal de puce sur IF : 0b1100110011001100.

Capture de données sur STM32F4-Discovery

Le STM32F4 (Cortex-M4, 168 MHz, 192 Ko RAM, 1 Mo Flash) utilise SPI + DMA en mode circulaire pour 16 Mbps.

Google AdInline article slot
  • Double tamponnage : interruptions à mi-rempli du tampon 4 Ko
  • 2 Ko par PRN (2046 octets)
  • Tampon supplémentaire pour le traitement sans arrêter le DMA

Le code DMA assure une réception continue : perdre ne serait-ce qu'un octet rompt la synchronisation.

DSP optimisé sur bits

Sans traitement de type FPU (16 échantillons/s), nous adoptons une technique issue d'un récepteur GPS/GLONASS maison : remplacer la multiplication par un XOR pour les données de signe.

XNOR (XOR inversé) équivaut à une multiplication (-1 -1 = 1, -1 1 = -1). Des XOR séquentiels gèrent l'inversion.

Google AdInline article slot

Les opérations sont vectorisées sur des mots 32 bits pour plus de vitesse.

Chaîne de traitement du signal

  • Générateur NCO porteuse : Produit des harmoniques I/Q tenant compte du Doppler, de l'erreur TCXO et de l'IF 4,092 MHz. Deux mélangeurs décalent vers la bande de base.
  • Générateur NCO code : Code PRN local (1023 puces) interpolé à 16 échantillons/puce.
  • Corrélation : XOR élément par élément des données d'entrée avec le code local + accumulation.

La forme complexe I/Q sépare les flancs de bande.

// Exemple de corrélation sur bits (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;
}

Utilisation des ressources et limites

  • 4 canaux de corrélation : ~70 % CPU à 168 MHz
  • RAM : 12 Ko/canal (tampons + états)
  • Pas de suivi ni données de navigation dans la version de base
  • Initialisation manuelle des éphémérides

Le projet parvient à un démarrage à froid en 30–60 s à SNR > 35 dB·Hz.

Points clés

  • Chaîne GPS logicielle complète sur STM32 — sans ASIC/FPGA
  • XOR sur bits surpasse la multiplication : gain de vitesse DSP x10
  • 16 échantillons/puce pour interpolation PRN précise
  • Capture DMA continue essentielle pour la synchronisation
  • Évolutif vers 6–8 canaux sur F4/F7
  • Code open source pour expériences L1 C/A

— Editorial Team

Advertisement 728x90

Lire ensuite