# Modulations numériques

Logiciel permettant de comprendre et de s'amuser avec les différentes modulations numériques. Les valeurs ne sont pas celles utilisées dans la réalité, mais permettent de bien visualiser le fonctionnement et les principes utilisés. 

Constellation_modulation_numerique_16_QAM.png

<img style="text-align: center;" src="./images/Constellation_modulation_numerique_16_QAM.png" alt="Modulations numériques : constellation de la modulation 16-QAM (même technologie quele wifi)" width="400"/>

**Ci-dessus, la constellation de la modulation numérique avec 2 porteuses en quadrature, type 16-QAM (Le wifi 7 fontionne en 256-QAM)**.

## Objectif :

**Ajouter des fonctionnalités à un logiciel en C++ permettant de visualiser et comprendre les différents cas de modulations numériques (Amplitude, fréquence, phase et combo)**

Le travail est fait par 4 groupes de 16 élèves, successivement. *Dans chaque groupe*, **chaque tâche** sera réalisée par un **groupe de 4 élèves**. **30 min seront réservées en fin de séance pour préparer la transmission au groupe suivant** 

**Thème : transporter l'information**

<img style="text-align: center;" src="./images/Modulation_4-ASK_avec_Application_Quitter.png" alt="Modulations numériques : exemple avec la modulation 4-ASK avec explication du principe de codage" width="400"/>

**Modulation numérique 4-ASK + le menu "Application -> Quitter"**


## Contraintes et attentes

- Utiliser Dear ImGui + SDL3 (imposé) ;
- Logiciel écrit et testé sous Linux uniquement (toutefois, la cross-compilation est possible pour Windows) ;
- dépendances : libSDL3 + mesa (OpenGL nécéssaire). N.B. : sans OpenGL fonctionnel, il faut compiler l'exemple d'implémentation dite "software rendering" ;
- Travail par itérations : on travaille pour le prochain groupe ;
- Documenter au maximum.

**Copyright : Eric Bachard 2026/01/07**

[**=> voir le Changelog**](./Changelog)

# Étude et validation des modulations numériques possibles avec le logiciel

Actuellement fonctionnel (2026/01/26) :

- [X] Longueur Trame de 8, 16 ou 24 bits, modifiable en temps réel
- [X] OOK : On-Off Keying
- [X] ASK : Amplitude Shift Keying
- [X] M-ASK (ici 4-ASK) : 4 niveaux Amplitude Shift Keying
- [X] 4-QAM : Quadrature Amplitude Modulation
- [X] 16-QAM : Quadrature Amplitude Modulation
- [X] FSK  : Frequency Shift Keying
- [X] M-FSK  : Multiple Frequency Shift Keying
- [X] BPSK : Binary Phase Shift Keying
- [X] DPSK : Differential-PSK  (à vérifier, sous réserves)
- [X] Ajout des signification d'un 1 ou d'un 0 (dessin compris, sous forme d'un nouveau canvas, ainsi que des 4 combinaisons possibles lorqu'un symbole est codé sur 2 bits.
- [X] Ajout d'un menu "Application -> Quitter" fonctionnel
- [X] Layout amélioré : tout ce qui doit apparaître est correctement affiché, au bon endroit et avec les bonnes dimensions
- [X] Fenêtre en plein écran avec les bonnes couleurs. 
- [X] Utilisation de CMake (automatisation de la génération du Makefile)
- [X] Utilisation de nouveaux contrôles pour modifier les bits du mot transmis
- [X] Sélection de thème parmi Dark, Clair, Windows, Classic et Traditionnal Green
- [X] Utilisation de la classe application, qui permettra de gérer le layout et le thème.
- [X] Utilisation de nouveaux contrôles pour modifier les bits du mot transmis
- [X] Écriture d'une classe application, qui permettra de gérer le layout et le thème.

<img style="text-align: center;" src="./images/Modulation_4-FSK_sur_3_octets_theme_Dark.png"  alt="Modulations numériques : exemple avec la modulation 4-FSK" class="center" width="400"/>

Problèmes ou bugs connus :

- flickering quand on passe du mode plein écran au mode réduit, à corriger.

**Modulation Numérique 4-FSK, avec description de l'encodage pour une trame de longueur 3 octets, en utilisant le thème "Dark"**


<img style="text-align: center;" src="./images/modulation_BPSK_theme_DARK.png"  alt="Modulations numériques : exemple avec la modulation BPSK + description de l'encodage" class="center" width="400"/>

**Modulation Numérique BPSK (Binary Phase Shift Keying) avec description de l'encodage, et le thème Dark**


## Tâches prévues pour cette partie

À intégrer (le code est en cours de test) :

- [ ] Utiliser CTest (tests unitaires)
- [ ] Rédaction de la documentation
- [X] (en cours) Revisiter le placement des contrôles, en utilisant un dimensionnement proportionnel


## Compilation du programme (Linux seulement pour le moment)

### Dépendances 

Il faut installer :
- build-essential ;
- libSDL3 ;
- carte graphique INTEL : Il faut OpenGL fonctionnel. Pour cela, installer  mesa-utils (glxgears), devrait installer toutes les dépendances ;
- carte graphique NVidia : OpenGL fonctionnel (pilote propriétaire avec bibliothèques ad-hoc, ou mesa-utils si driver nouveau).

Pour compiler l'application : 

Dans un terminal, se placer à la racine de Partie2

````
make -j $(nproc)
````
## Installation sous Linux

Si les dépendances sont installées (libSDL3 et OpenGL + un environnement graphique), le fonctionnement ne devrait pas poser de problèmes.

Le logiciel s'appelle Modulations_Numeriques, et peut s'exécutr de plusieurs façons : en mode console et en mode "graphique".
### Utilisation en mode console

N.B. : ce qui suit permet une installation en mode graphique.

Dans le terminal, l'exécution est déjà possible avec la commande ./Modulations_Numeriques depuis le dossier build.

**TODO :** ajouter la règle du make install avec cmake

### En mode graphique

Pour l'instant, l'installation est manuelle. Testée sous Linux Mint 22.2

1. copier le fichier Modulations_Numeriques.desktop (il se trouve dans ressources), dans le dossier .local/share/applications

2. créer le dossier $HOME/bin/build et y copier le binaire compilé appelé Modulations_Numeriques qui se trouve dans build

3. copier le script Modulations_Numeriques (il se trouve dans ressources), dans le dossier $HOME/bin

4. rendre ce script exécutable

5. créer le dossier fonts dans $HOME/bin et y placer le fichier DroidSans.ttf qui se trouve dans le dossier fonts.

L'application devrait maintenant être utilisable en mode graphique.






<img style="text-align: center;" src="./images/modulation_DPSK_avec_le_theme_LightGreen.png" alt="**Illustration du fonctionnement du menu :  Application -> Quitter**" width="400"/>

**Modulation numérique DPSK (Differential Phase Shift Keying) avec le thème LightGreen.**


# Remerciements

Ce logiciel utilise le code d'application sous licences libres, qui rendent la vie plus facile :

- [X] [**libSDL (version 3)**](https://libsdl.org/)
- [X] [**Dear ImGui, écrit par Omar Cornut**](https://github.com/ocornut/imgui)

Merci aussi à toutes celles et ceux qui ont contribué, même modestement.
