Donc voici un petit tuto sur le noise shaping
Ceci m'a permis de réviser un grand classique du traitement du signal audio.
Pas sûr que cela ait sa place sur un forum DIY, mais l'envie m'en a été donnée par le sujet sur les FDA :
diy-amplification/ampli-fda-diy-discussion-avant-projet-t30064999.html
Car un FDA est essentiellement constitué de 4 étapes :
1) suréchantillonage important (ie : 384Khz pour le TAS5558)
2) réduction de nombre de bits (ie : 5/7/8 bits .. je ne sais pas pour le TS5558)
3) modulation PWM
4) étage d'amplification de puissance analogique, mais en tout ou rien, d'où un rendement très élevé
Les 3 premières étapes sont entièrement réalisé dans le domaine digital. Comme les marketeurs ne savent compter que jusqu’à trois, ils disent que c'est un Full Digital Amplifier (FDA) !
C'est un peu oublier les problèmes potentiels de l'étage analogique , qui n'est dans aucune boucle de contre réaction et donc dont tout défaut se retrouvera dans le signal de sortie...
A part cela :
Le suréchantillonage est en fait juste un filtrage FIR (Bon, si on veut être un peu malin il faut passer par un filtre polyphase, mais ça sera pour un autre tuto).
On verra les points 3 et 4 un autre jour , si j'ai le courage
Reste l'étape de réduction du nombre de bit. Elle est nécessaire car le modulateur PWM ne peut avoir une grande précision (sous peine d'horloge à trop haute fréquence). Il est donc limité à un faible nombre de bits en entré (ie: moins de 8 ).
Réduire le nombre de bits d'un signal digital est priori simple : Si vous avez un signal sur M bits et que vous voulez le réduire à N, prenez juste les N bits de poids fort et voila !
Regardons par exemple ce qui se passe si on réduit à 4 bits (16 niveaux de valeur) par troncation directe, un signal de -6dbFs à 768Hz échantillonné à 384Khz :

Beuuuurk
Il fallait s'y attendre, la troncation est une opération non linéaire, et donc elle produit de la distorsion harmonique.
Ici certaines harmoniques sont à ~ -40db . C'est de l'ordre du 1% de disto , une cata.
Heureusement , on peut faire mieux grâce au dithering !
Dithering
Cela consiste à ajouter du bruit avant la troncation

Si on réduit à N bits un signal codé sur M bit , on va ajouter un bruit codé sur M-N bits. C'est à dire que le bruit ajouté va occuper les bits qui vont être supprimés !
J'avais une belle analogie foireuse pour vous expliquer comment ca fonctionne, mais c’était trop long, alors le mieux c'est d'essayer.
Voici toujours le même signal que précédemment, toujours réduit à 4 bits mais avec ajout d'un bruit à distribution triangulaire au niveau souhaité avant troncation :

Miracle,

Bon, par contre on a du bruit et pas qu'un peu : à un niveau tout juste acceptable pour un autoradio ...
Alors on va "sculter le bruit" (noise shaping)
Noise Shaping
L'idée est la suivante :
Si Yd est la sortie de l'opération (dither + troncation) et Y son entrée.
Alors on peut toujours dire que Yd=Y+E, où E est l'erreur commise.
E c'est ce qu'il y à en trop en sortie par rapport à ce qu'on voulait à cause du bruit rajouté par le dithering et l'erreur de troncation.
Pourquoi pas essayer de renvoyer -E, à l'entrée pour essayer de compenser

Au moins aux fréquences basses qui évoluent lentement, on peut espérer compenser l'erreur de l'étape de troncation précédente et que tout cela se moyenne par miracle...
En gros , un schéma comme celui ci :

Note : Ne pas tenir compte de N(Z) pour l'instant.
Voyons ce que cela donne sur notre signal (en vert noise shaped, en bleu seulement avec dither)

Wahoo, notre signal est toujours là (ouf) mais le bruit est en dessous de -90db de 0 à 5Khz !
Pas mal
Par contre ça remonte fort après. C'est même moins bon que sans noise shaping au delà de 90Khz .
On a retiré du bruit à certaines fréquence pour en rajouter à d'autres. C'est cela sculpter le bruit.
Mais comme on est malin, on a retiré du bruit aux fréquences audibles et augmenté le bruit aux fréquences inaudibles.

Et on peut faire mieux !
Plutôt que de renvoyer directement l'erreur X vers l'entrée, on peut la filtrer pour "sculter le bruit" comme on le désire, avec la limitation que plus on en retire dans une zone de fréquence plus ca augmentera ailleurs.
Le filtre c'est le bloc N(Z) sur le schéma ci-dessus.
Dans le graphe en vert précédent N(Z) =Z-1 : C'est un noise shaper du 1er ordre.
On peut complexifier un peu avec un noise shaper du 2ème ordre : H(Z)=2Z-1-Z-2
Ici 2nd ordre en mauve pétant et 1er ordre en vert criard :

On a encore plus retiré de bruit là où ça nous intéresse, mais à 100Khz le bruit à encore augmenté.
Note : On peut avoir l'impression que l'on retire plus que l'on ajoute, mais l'échelle logarithmique est trompeuse : on retire beaucoup sur une petite zone de fréquence et on rajoute peu sur une grande zone de fréquence.
En fait, on est presque complètement libre de choisir N(Z) comme on veut. FIR; IIR etc ..
De préférence minimum phase pour des raisons compliquées et d'ordre quelconque. (Le TS5558 utilise un filtre du 4ème ordre)
Certains, utilisent des filtres qui essayent de tirer parti de caractéristiques psychoacoustiques : on retire plus de bruit là ou l'oreille est la plus sensible.
Vous trouverez ici , une liste très complète de tout ce qui est utilisé en pratique :
http://audio.rightmark.org/lukin/dither/dither.pdf
Mais, au fait, il ressemble à quoi notre noise shaped signal, avec son bruit à -100dbFs de 0 à 10Khz :


Et oui le traitement de signal c'est magique : ce signal si sale, a en fait très peu de bruit dans la bande audio. Tout ce bruit visible est à bien plus haute fréquence. (rappelez vous : fréquence d’échantillonnage 384Khz)
On voit bien par contre que ce signal est quantifié sur 4 bits : il y à très peu de niveau différent (13 sur 16 maxi en 4 bits).
Voilà j'espère que vous avez compris quelque chose. En tout cas, réaliser un noise shaper c'est pas bien compliqué (voir le schéma). Il faut juste faire le bon choix pour le filtre, mais il existe beaucoup de bons exemples éprouvés dans la littérature.
A noter, que l'on peut pousser le bouchon plus loin : utiliser une fréquence échantillonnage vraiment très élevé (ex : 2.822Mhz) et seulement 1 bit !
C'est le format DSD du SACD , mais il n'est pas sans inconvénients.