Files
DSP/QAM/todo.md
2025-10-20 20:16:24 +02:00

158 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🧭 Ordre dimplémentation dune chaîne de réception QAM (réelle)
## **Étape 0 — Environnement et base de test**
🎯 Objectif : avoir une base stable de simulation avant toute boucle adaptative.
**À faire :**
* Lire un **flux IQ** (fichier ou SDR)
* Implémenter un **filtre RRC de réception**
* Visualiser constellations, spectre, symboles
🧠 But : voir des symboles flous mais reconnaissables — aucun algorithme adaptatif encore.
---
## **Étape 1 — Correction de fréquence (CFO / Carrier Recovery)**
🎯 Objectif : supprimer le décalage de fréquence de la porteuse avant le timing recovery.
**Pourquoi en premier ?**
* Si ton signal tourne dans le plan complexe, **Mueller & Müller échouera** complètement.
* Il faut un signal “quasistationnaire” avant de chercher le bon instant déchantillonnage.
**Méthodes à implémenter :**
* Estimation grossière de CFO (par corrélation / FFT)
* Boucle de Costas ou PLL de phase
📘 Résultat attendu : constellation QAM fixe mais “floue” (problème de timing restant).
---
## **Étape 2 — Synchronisation temporelle (Timing Recovery : M&M)**
🎯 Objectif : trouver linstant exact déchantillonnage par symbole.
**Tu connais déjà :**
* Interpolateur fractionnaire
* Détecteur derreur M&M
* Boucle PI
💡 Astuce : commence avec un signal *parfaitement corrigé en fréquence* avant dactiver la boucle timing.
📘 Résultat attendu : points de constellation bien centrés, toujours un peu brouillés (canal non corrigé).
---
## **Étape 3 — Égalisation adaptative (FFE / CMA / DD-LMS)**
🎯 Objectif : supprimer lISI et compenser la distorsion de canal.
**Méthodes typiques :**
* **CMA** (Constant Modulus Algorithm) pour pré-verrouillage (aveugle)
* Puis **DD-LMS** (Decision Directed) une fois la décision fiable
💡 Légaliseur doit venir **après** le timing (sinon le signal est mal échantillonné).
📘 Résultat attendu : constellation nette, points regroupés correctement autour des symboles 16-QAM.
---
## **Étape 4 — Décision + Mapping**
🎯 Objectif : convertir les symboles QAM en bits.
**À faire :**
* Implémenter la décision dure (±1, ±3)
* Mapping / demapping Gray
* Vérifier BER par rapport à trame connue
💡 Teste dabord sans bruit pour valider le mapping bit ↔ symbole.
---
## **Étape 5 — Boucles de phase fines (Costas loop fine)**
🎯 Objectif : corriger la phase résiduelle après timing et égalisation.
* Souvent intégrée dans la boucle M&M ou séparée (PLL de phase fine)
* Sert à verrouiller la dernière rotation du plan IQ
---
## **Étape 6 — Correction derreurs / décodage (FEC)**
🎯 Objectif : terminer la chaîne par le décodage des bits.
* LDPC, Viterbi, Turbo selon ton système
* Cest la couche “bitstream”, plus logique que DSP
---
## **Étape 7 — Optimisation et intégration**
🎯 Objectif : passer du prototype à la version embarquée.
* Conversion float → fixe (Q-format)
* Pipeline temps réel (DMA, buffers circulaires)
* Profiling CPU / mémoire
* Test sur matériel SDR, puis en RF réelle
---
# ⚙️ En résumé — Ordre dimplémentation
| Étape | Bloc | Type | Pourquoi cet ordre |
| ----- | ------------------------------------ | --------------- | --------------------------- |
| 0 | RRC + acquisition IQ | statique | Base stable et visualisable |
| 1 | **Correction de fréquence (CFO)** | boucle 1 | sinon M&M échoue |
| 2 | **Synchronisation temporelle (M&M)** | boucle 2 | aligner les symboles |
| 3 | **Égalisation adaptative** | boucle 3 | corriger canal |
| 4 | **Décision + mapping bits** | logique | extraire données |
| 5 | **Boucle de phase fine (Costas)** | ajustement | phase finale |
| 6 | **Décodage FEC** | post-traitement | fiabiliser le bitstream |
| 7 | **Optimisation C/FPGA** | système | rendre temps réel |
---
# 🧠 Ordre de test conseillé
1. Simule tout en **float** dans Python/MATLAB
2. Valide chaque bloc **indépendamment**
3. Assemble et teste avec bruit / décalage
4. **Ensuite seulement**, porte en C (ou sur DSP/FPGA)
---
---
| # | Bloc / Étape | Objectif principal | Priorité | Ce quil faut coder / comprendre | Test / Validation |
| - | --------------------------------------- | ----------------------------------------------- | ---------- | ----------------------------------------------- | ------------------------------------------------ |
| 0 | **Acquisition & Filtrage RRC** | Lire le signal IQ et filtrer pour limiter lISI | Très haute | FIR RRC, buffer IQ | Visualiser constellation, spectre |
| 1 | **Correction de fréquence (CFO)** | Supprimer offset de fréquence de la porteuse | Très haute | PLL / Costas loop, corrélation, FFT | Constellation immobile, pas de rotation |
| 2 | **Synchronisation temporelle (M&M)** | Aligner échantillons sur symboles | Très haute | Interpolateur fractionnaire, TED M&M, boucle PI | Points centrés, vérification de tau_hat |
| 3 | **Égalisation adaptative** | Supprimer ISI et compenser canal | Haute | FFE ou DFE, algorithme CMA / DD-LMS | Constellation nette, erreur moyenne faible |
| 4 | **Décision symbolique et mapping** | Convertir symbole → bits | Haute | Hard decision QAM, Gray mapping | Vérifier BER avec trame connue |
| 5 | **Boucle de phase fine (Costas / PLL)** | Corriger la phase résiduelle | Moyenne | PLL numérique, phase fine | Points de constellation fixes, phase verrouillée |
| 6 | **Décodage FEC** | Extraire flux de bits fiable | Moyenne | LDPC / Viterbi / Turbo | Comparer bits reçus / transmis, BER |
| 7 | **Optimisation & passage temps réel** | Adapter pour C / DSP / FPGA | Moyenne | Point fixe, buffers circulaires, pipeline | Profil CPU / mémoire, latence, test en SDR réel |
---
### 💡 Notes pratiques :
* **Test bloc par bloc** avant dintégrer la chaîne complète
* Toujours **simuler en float** avant passage en C ou point fixe
* Chaque boucle (CFO, Timing, Phase) doit être **réglée indépendamment** pour éviter linstabilité
* Commencer avec **trames simples** avant bruit réel, puis ajouter AWGN / jitter / offsets
---