
Ce générateur a été étudié sur une base de PIC 16 bits 24FJ64GA108, mais le logiciel pourrait tout à fait être adapté à un autre type de microcontrôleur (PIC32 ou ESP32 par exemple). La conversion numérique analogique se fait avec une résolution de 16 bits.
Logiciel écrit, simulé avec succès avec PIC24FJ64GA108 et
PIC24FJ32GA002 (sans écran LCD pour le PIC24FJ32GA002 cause nombre de
broches insuffisant), mais
pas encore testé avec prototype réel.

Contrairement au principe de fonctionnement qui repose sur la synthèse numérique directe (DDS) utilisée dans mon générateur audio 021, une méthode beaucoup plus simple a pu être mise en oeuvre ici, parce que la fréquence fondamentale est fixe et ne peut pas être modifiée. Comme il fallait tout de même pouvoir modifier l'amplitude de chacune des raies fondamentale et harmoniques, il était exclu de faire appel à une simple et unique table d'échantillons (lookup table) codée en dur. Pour cette raison, un tableau dynamique a été implémenté et ce tableau est automatique reconstruit à chaque modification de l'amplitude de la fréquence fondamentale ou de l'une de ses raies harmoniques.
Cette façon de faire à un revers : celui de nécessiter plusieurs secondes pour la reconstruction du tableau quand le nombre de raies harmoniques utilisées est élevé (2 secondes pour 4 raies actives, 9 secondes pour 20 raies actives). Une raie dont l'amplitude est fixée à 0.0 ne réclame aucune ressource processeur au moment de la reconstruction de la table de valeurs des échantillons.
Comme le nombre de raies pouvant être activées simultanément est élevée et que l'amplitude maximale de chacune correspond à 1.000 pour 0 dBFS, il peut arriver que la somme de toutes les raies occasionne des crêtes dépassant la valeur de 0 dBFS. Pour éviter ce risque, un mécanisme de réduction automatique du niveau est activé si les amplitudes cumulées de la fondamentale et des harmoniques dépasse les capacités du système. Cet ajustement automatique opère en réduisant l'amplitude du signal par paliers successifs de -6 dB, jusqu'à ce que le signal final tienne dans la plage numérique 0-65535 (16 bits) et ne dépasse donc pas la valeur de 0 dBFS.
Bien entendu, cela n'est possible qu'en effectuant un mixage des différentes raies avec une résolution supérieure à 16 bits (le mélange étant effectué ici en 32 bits alors que le microcontrôleur est un modèle 16 bits explique en grande partie le temps requis pour les calculs).
L'exemple suivant montre un cas de figure où le signal crête atteint (après mixage des raies) la valeur de +6,4 dB. Une réduction de -6 dB s'avère insuffisante et donc une seconde réduction de -6 dB est opérée à la suite de la première (réduction totale de -12 dB).
Fs = 50 kHz, 1 générateurs (fondamentale 100 Hz, sans
harmonique) :
Fondamentale seule,
harmoniques paires et
impaires
d'amplitude 0.0
Fs = 50 kHz, 42 générateurs (100 Hz + H3..H41, harmoniques
impaires seulement) :
Harmoniques paires
d'amplitude 0.0, harmoniques impaires d'amplitude décroissante en
1/(n²)
Fs = 50 kHz, 20 générateurs (100 Hz + H2..H20, harmoniques paires et impaires) :
Fs = 50 kHz, 41 générateurs (100 Hz + H2..H41, harmoniques paires et impaires) :
Fs = 50 kHz, 21 générateurs (100 Hz + H3..H41, harmoniques
impaires seulement) :
Harmoniques paires
d'amplitude 0.0, harmoniques impaires d'amplitude décroissante en
1/(n*Pi)
02/08/2026
- Première mise à disposition.