diff --git a/QAM/todo.md b/QAM/todo.md deleted file mode 100644 index 4ebf7c8..0000000 --- a/QAM/todo.md +++ /dev/null @@ -1,157 +0,0 @@ - -# 🧭 Ordre d’implĂ©mentation d’une 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 l’instant exact d’échantillonnage par symbole. - -**Tu connais dĂ©jĂ  :** - -* Interpolateur fractionnaire -* DĂ©tecteur d’erreur M&M -* Boucle PI - -💡 Astuce : commence avec un signal *parfaitement corrigĂ© en frĂ©quence* avant d’activer 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 l’ISI 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 d’abord 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 d’erreurs / dĂ©codage (FEC)** - -🎯 Objectif : terminer la chaĂźne par le dĂ©codage des bits. - -* LDPC, Viterbi, Turbo selon ton systĂšme -* C’est 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 d’implĂ©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 qu’il faut coder / comprendre | Test / Validation | -| - | --------------------------------------- | ----------------------------------------------- | ---------- | ----------------------------------------------- | ------------------------------------------------ | -| 0 | **Acquisition & Filtrage RRC** | Lire le signal IQ et filtrer pour limiter l’ISI | 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 d’intĂ©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 l’instabilitĂ© -* Commencer avec **trames simples** avant bruit rĂ©el, puis ajouter AWGN / jitter / offsets - ---- -