Introduction

( English => This file contains "Modulations numériques" project history.                     )
( Last changes are given in reverse order (as a stack : last changes at the top of the file), )
( Please insert your changes on top, for readability reasons.                                 )
( Rule : every day is separated from the previous by a header :  line + date + author         )

French => Ce fichier contient l'historique du projet Modulations numériques.
Les derniers ajouts sont donnés comme une pile (derniers ajouts en début de fichier)
Merci d'insérer vos modifications en début de ce fichier, pour des raisons de lisibilité.
Règle : chaque nouveau jour est séparé du précédent par une "en-tête" minimale : ligne de separation + date + auteur 

Copyright ericb  2026/01/07
Licence GPL v2 (see )

LAST CHANGES

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2026/01/25    ericb

Passage à OpenGL 3.3 (au lieu de 3.0)
Remplacement de selectMenuTheme() par selectThemeMenu()
Factorisation de code :
- création de selectThemeMenu()  // imgui_utils.cxx
- création de selectFrameSize()  // imgui_utils.cxx
- tout le code SDL est maintenant encapsulé dans Engine
Création de la classe Engine
Implémentation de la classe Engine dans main.cxx (simplifications)
Dans chaque onglet, ajout de app.set_current_tab() pour garantir l'état de l'onglet après redimensionnement
Vérification des dimensionnements.
Correction : suppression d'un ImGui::NewLine() pas très utile.
Correction : ajout des fonctions manquantes dans imgui_utils (l'interface était incomplète)
Correction : initialisation des dimensions de la fenêtre SDL dans la classe applications.

En test : les corrections de la modulation 16-QAM, proposées par vrst

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2026/01/18    ericb

Abstraction du nom de la fenêtre SDL3 principale
Ajout de engine.h dans les sources pour tester la compilation
(la classe engine est repris de miniDart, mais doit être simlifiée et rendue compatible avec SDL3)
Implémentation de la modulation d'amplitude 16-QAM
Description de la constellation 16-QAM (impossible faire tous les dessins, ce serait illissible)

En cours : Correction de engine.cxx en cours (passage SDL2 -> SDL3)

TODO :
Inclusion progressive de la classe engine dans application.cxx et main.cxx (factorisation de code)
Ajout de nouveaux événements (passage en plein écran via le menu)

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2026/01/17    ericb  vrst tsbs

TODO :
- implémentation de la modulation 16-QAM
- essais de cross-compilation (version Windows)
- documentation
- tests unitaires à améliorer

Ajustement de l'écart pour les VToggleButtons, en fonction de la longueur de la Trame
Ajout de l'entrée de menu "Longueur Trame"
Déplacement de la modulation 4-QAM dans l'onglet ad hoc
Ajout de l'onglet "Modulation numérique M-QAM"
Tests de la trame avec 16 et 24 bits
Implémentation de la classe Application
Correction des coefficients 4-ASK qui étaient inversés
Ajustement du rectangle de surbrillance
Correction complète du layout
Corrections variées : écartement entre les VToggleButtons correcte (pour 8 bits)


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2026/01/16    ericb

TODO :
- corriger le positionnement des boutons en plein écran (pas en face du bit modifié)
- valider l'algorithme du DPSK, actuellement faux
Améliorations possibles : pouvoir modifier la couleur du trait en runtime pour les tracés.
Corrigé le trait lors du passage d'un bit à un autre lorsque la discontinuité est trop importante.
Implémentation de la modulation umérique 4-QAM (principe de la TNT et du wifi 7)
Utilisation de nouveaux contrôles pour modifier les bits du mot transmis
Affichage de la signification d'un 1 ou d'un 0, sinon du symbole transmis sur 2 bits
dans la fenêtre fille.
Correction du nomnre de périodes affichées dans la fenêtre fille : 
- maintenant, le nombre de périodes affichées correspond au cas étudié.
- la fréquence affichée coïncide avec le réglage

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2026/01/15    ericb

TODO : créer un layout proportionnel, et non avec des valeurs "magiques"
Correction du redimensionnement : maintenant, quel que soit le thème, les couleurs sont respectées.
Factorisation du code : mise en surbrillance, avec création de l'utilitaire highlightFrame() 
Création de imgui_utils.h (devrait devenir une classe d'objets utiles)
Écriture du code qui permet d'écrire les bits autour des VToggleButtons
Remerciements

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2026/01/14    ericb

Ajout de la modulation 4-QAM (qui ressemble à un cas particulier de 4-PSK)
Création de imgui_utils.cxx
Factorisation de code : ajout de drawVToggleButton()
Ajout de drawVToggleButtons()
Ajout de la partie documentation
Ajout de la classe application

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2026/01/13    ericb

Bugfix : initialisation du thème corrigée. Tous les thèmes sont selectionables sans problème maintenant
Ajout du CMakeList.txt, proposé par merx
Essai de tests unitaires. À suivre demain avec les groupes 2 et 3

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2026/01/11    ericb

CODE : Partie 2 uniquement
Correction partielle du layout :
- identification de chaque paramètre utilisé ;
- définition et choix de valeurs cohérentes ;
- correction des alignements.

Simplification du code dans main + ajout de commentaires pour l'initialisation de dmod.
Initialisation du constructeur de la classe modulation : les types de modulations doivent etre initialisés.
Utiliser main(void) pour des raisons évidentes : on n'utilise pas d'arguments pour démarrer l'application.
Correction du layout
Utilisation d'un fichier pour la traduction. Exemple en français, mais qui pourra être facilement étendu à l'anglais.
Ajout d'une entrée de menu : choix d'un thème de couleurs
Implémentation des thèmes colorés : Light Green, Dark, Light Blue, Windows et Classic.

TODO : corriger le pb du layout qui perdure : la fenêtre n'est pas redimensionnable ...

DEBUT PARTIE2 : ajout d'une nouvelle arborescence appelée Code_final_partie2


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
PARTIE1
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2026/01/10    ericb

Ajout d'un slider en mode DEBUG : permet de voir l'effet d'une modification de k x fbase (k entier, peut varier de 2 à 10)
Correction des problèmes de compilation apportés par la modification du code.
Modulation numérique de fréquence : 4 x fbase plutôt que 2 x fbase pour le signal modulé => meilleure visibilité
Modulation numérique de Phase : modification de PSK en BPSK plus précis
Corrections de fautes de frappes, orthographe variée sur la page de présentation.

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2026/01/09    ericb

Ajout d'un menu " Appliqation -> Quitter " à titre d'exemple (fonctionnel)
TODO : améliorer l'algorithme pour le DPSK, qui n'a pas l'air d'être correct.
Correction du bug de la fréquence qui ne variait pas en modulation numérique de phase.
Mise à jour du README
Ajout de la modulation numérique de fréquence. FSK et M-FSK sont opérationnels et fonctionnent comme attendu.
Implémentation de la classe DignitalModulation. Fonctionne comme attendu pour la modulation d'amplitude numérique.
Remplacement de bits[] par am_bits[] (am pour amplitude modulation), on utilisera aussi bm_bits, fm_bits[] et m_qam_bits[].
Utilisation de M_PI (constante du système) au lieu de PI redéfinie maladroitement (nécessite des double).
Test : pas de changement notable en utilisant M_PI à la place de PI.
Ajouté : en mode DEBUG, un slider permet de voir ce qui se passe quand on modifie samples_per_bit

Bugfix : correction du Makefile qui n'ajoutait pas les symboles par défaut et qui compilait en double certains
         fichiers .cxx en mode debug

Ajout de la définition de DEFAULT_SAMPLES_PER_SYMBOL, défini à 100 par défaut (valeur optimale)
Optimisation : calcul de l'amplitude remonté d'un niveau dans la boucle (ralentissait les calculs)
Modification de l'initialisation de la longueur du mot avec DEFAULT_WORD_SIZE 
Suppression de BIT_COUNT, inapproprié.
Correction de l'indentation, qui était chaotique.
Cosmétique : variable de boucle définie à l'intérieur de la boucle, plutôt qu'à l'extérieur.
Ajout de deux membres privés dans la classe modulation : le type et la taille du mot
Création des assesseurs pour les membres privés
Ajout de DEFAULT_WORD_SIZE (8 bits par défaut), en remplacement de BIT_COUNT, peu précis
Compilation OK, pas de problème apparent.
WARNING : Ne pas utiliser d'autre valeur que 8, sinon segfault (layout pose problème)

TODO : voir https://github.com/ocornut/imgui/issues/1537

Amélioration temporaire du layout (espacements, etc).
Ajout du Changelog dans l'arborescence.
Ajout de la définition des dimensions des sliders verticaux dans modulations.h
Création de la classe modulations. Ajout dans l'arborescence.
Commit : modification du makefile, et ajout de modulations.cxx.
Test : compilation OK, mais la classe n'est pas encore utilisée (factorisation de code en cours)

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2026/01/08    ericb

Nettoyage de code, suppression de warnings, analyse de fonctionnement.
Remplacement des "if" par un switch pour les 3 cas de modulation numérique d'amplitude.
Factorisation de code : ajout de nouvelles entrées pour les modulations manquantes (typedef / modulations.h)
Codage d'un caractère sur 2 bits avec l'utilisation de la parité
Creation du fichier d'en-tête modulations.h et ajout dans le dépôt
Correction du positionnement des sliders verticaux #HACK, car c'est le layout qui devrait décider
Modification de la hauteur des sliders verticaux.
Utilisation de la police (font) DroidSans en runtime. Le chemin est codé en dur et la fonte doit
être placée dans le dossier fonts, au même niveau que build
Correction de la prise en compte de nouveaux includes dans le makefile
Tests du Makefile corrigé.
TODO : penser à gérer la licence de la fonte DroidSans quelque part dans l'arborescence

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2026/01/07    ericb

Groups 2 and 3
Ajout des boutons dont l'état est modiifiable (pas encore les sliders) dans la vue.
Dessin d'une sinusoïde de fréquence variable (probablement généré avec chatGPT)

(à compléter avec ce qui a été fait)

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2026/01/06    ericb

Group 1 working, first tries (looks promising)

- starting with graphix3 code, to draw a window + an ImGui application inside an OpenGL context (orthogonal projection)
- added some controls : silders, buttons
- draw an SDL3 window + Dear ImGui (based on the example)
- draw some controls inside and check (SliderFloat : 0 -> 9, draw sin 2Pi(f+af)t (a -> alpha, with alpha between 0 and 9)
- Q : how to draw an sinusoid with IMGUI ?  => cf demo widget

- Q : how to draw a vertical ON-OFF button ?
- Q : how to draw and make radio buttons work ?
- Q : how to add a text area ?
- Q : how to add tabs ?





