logo

 

Introduction
Master clock
Générateur de fréquence
Régler le volume
PWM
Générateur de bruit
Dent de scie et triangle
Sinus
Envelope
Filtres
Interface CPU
Silicium: Volume
Silicum: DAC
LFSR Experimenter

Choix de la master clock

Le choix de la fréquence de l'oscillateur maître (master clock) est primordiale, car elle définira principalement la résolution qu'on pourra atteindre dans les notes aiguës (voir plus bas).
Historiquement, les oscillateurs des consoles de jeux étaient choisis pour correspondre aux fréquences vidéo (PAL, NTSC...) pour simplifier les choses, et la fréquence maître du soundchip était dérivée de celle-ci, donnant souvent des valeurs improbables telles que 1.78977MHz...

La gamme de fréquences audibles par l'oreille humaine est souvent considérée comme s'étalant de 20Hz à 20kHz. On pourrait alors penser qu'un oscillateur à 20kHz pourrait suffire pour produire toutes les fréquences inférieures mais ce n'est pas exactement le cas.

En fournissant une master clock de 20kHz au soundchip, on lui donne un "top" toutes les 1/20000 = 50µs pour réaliser ses opérations. Pour lui, entre ces "tops", le temps n'existe pas et il n'est donc pas divisible. Si on souhaite produire un ton à 16kHz par exemple, la période serait de 1/16000 = 62.5µs, ce qui ne correspond pas à un multiple de 50µs. On n'aurait le choix qu'entre 20kHz (50µs, soit 1 "top"), ou 10kHz (100µs, soit 2 "tops").

On voit ici l'intérêt d'avoir une fréquence maître bien au delà de la fréquence de la plus haute note qu'on veut pouvoir produire: la résolution, ou plus exactement la possibilité de linéariser (au mieux) une courbe qui ne l'est pas.

Si on se base sur une fréquence maître de 20kHz, et en la divisant en comptant les "tops", on pourra obtenir les tons suivants:

soundchip

Les valeurs sont en Hz. En bleu la fréquence du ton produit par le diviseur correspondant, et en orange l'écart (en Hz aussi) avec le ton précédent.

Même en divisant par 15, on a toujours un écart (résolution) d'environ 100Hz.
Si on souhaite produire la note E6 (1318.51Hz) la fréquence possible la plus proche est 1333Hz (diviseur 15), on se retrouve avec une erreur de -14.49Hz. Ca ne sonnera pas (trop) faux.
Si on souhaite produire une note plus haute cependant, telle que D8 (4698.63Hz), la fréquence la plus proche sera 5000Hz et donnera donc une erreur de 301.37Hz, digne de Vincent Malone.

Pour pallier cela, on peut choisir une fréquence maître plus haute. Avec 100kHz au lieu de 20kHz par exemple, on pourra obtenir ceci:

soundchip

Les échelles sont les mêmes, les valeurs toujours en Hz.
On voit qu les 5 premiers diviseurs sont inutiles, car ils produisent des fréquences au delà de 20kHz (inaudibles).
Par contre, sous les 20kHz on voit que l'erreur entre chaque ton possible est bien inférieure comparé au graphe précédent.

En prenant encore la note D8 (4698.63Hz), la fréquence la plus proche est 4762Hz (diviseur 21) et donne maintenant une erreur moindre: -63.37Hz.

En augmentant la fréquence maître, on "gaspille" des valeurs trop hautes, mais on gagne en précision dans les aigus car on s'éloigne du "coude" de la courbe.

 

Choix de la taille du diviseur

Le choix de la fréquence maitre et celui de la taille des diviseurs induit un compromis: celui de la résolution en fréquence contre la surface utilisée dans le CPLD (nombre de bits), et donc du coût final du soundchip.

Aujourd'hui, vu la taille des CPLDs et des FPGAs, la question ne se pose plus vraiment. On peut largement se permettre d'utiliser des diviseurs sur 20 bits (allant jusqu'à 2^20 = 1048576) sans se soucier de faire grimper de $10 le prix d'une éventuelle console...

 

 

footer
symbol symbol symbol symbol symbol