Dernière mise à jour :
27/08/2023
Présentation
Cette unité de retard numérique reprend le principe de mon effet
Delay
002.
Les différences majeures par rapport à cette précédente réalisation
résident dans la résolution des échantillons
numériques qui passe de 8 bits à 16 bits, et dans le temps de retard
maximal qui peut désormais dépasser la durée de 2 secondes avec une
bande
passante de 10 kHz (fréquence d'échantillonnage 25 kHz).
Le circuit est basé sur un microcontrôleur PIC
"moyen de
gamme" dsPIC qui pilote un CAN (convertisseur analogique
numérique)
externe, un CNA (convertisseur numérique analogique) externe et une RAM
(mémoire vive) externe. Deux
types de mémoires ont été mises à l'épreuve : une de type FRAM
(très rapide, mais aussi très coûteuse) et une de type SRAM (très
rapide également et plus abordable).
Deux études jumelles ont été menées :
-
schéma 003
: schéma de base pour essais FRAM et SRAM -
ce montage ne sera pas maintenu
-
schéma 003b
: schéma "définitif" avec SRAM -
ce
montage sera maintenu
Le but de l'opération était de voir si avec des
composants abordables on pouvait obtenir un temps de retard d'au moins
une seconde, tout en bénéficiant d'une "bonne qualité globale". Je sais
que je ne suis pas le premier à me poser la question ;)
Avertissements
- Bien que ce montage présente des caractéristiques
techniques nettement supérieures à celles du Delay
002 du
point de
vue résolution et temps de retard, il n'en reste
pas moins un montage
d'initiation.
Les résultats obtenus sont très probants, même si je
regrette de n'avoir pu porter la fréquence d'échantillonnage à
une valeur de 40
kHz au moins.
- Avec le logiciel actuel (version 003b), le réglage du
temps de retard (INC
ou DEC) s'effectue par pas de 10 cellules de retard, soit 400 us, ce
qui nécessite une pression longue des boutons-poussoirs de
réglage quand on veut déterminer une valeur de retard très différente
de la précédente. A terme, le réglage sera plus souple et permettra de
petites variations lors de pressions courtes et de
grandes variations lors de pressions longues.
- Avec le logiciel actuel (version 003b), la
valeur du temps de
retard, la valeur de la résolution en mode bypass et l'état Bypass
on/off sont uniquement visibles par une interface série UART/RS232/USB
(sortie Tx, 115200 bauds) :
Schéma 003
Un PIC de "taille moyenne" et quelques "puces" additionnelles
consituent le coeur du montage.
Alimentation et circuits
d'E/S analogique non représentés
Principe de fonctionnement
Le signal audio (analogique) auquel on souhaite appliquer un retard est
en premier lieu numérisé et pour cela, on utilise un CAN (Convertisseur
Analogique Numérique). Ce procédé consiste à échantillonner (prendre
des
échantillons à intervalles réguliers) du signal audio qui est
discontinu (il y a toujours une tension, "nulle" en absence de son).
Chaque échantillon (morceau de son) est placé dans un espace de mémoire
vive composée d'un grand nombre de cellules (ligne à retard numérique).
Ces échantillons stockés
ressortent après un certain temps (
delay)
et on les retrouve sous forme analogique grâce à
un CNA (Convertisseur Numérique Analogique).
Le nombre de cellules de retard (Mem x bits) n'affecte pas la qualité du signal échantillonné et retardé...
Le résultat est qu'un son échantillonné puis retardé apparaît plus tard
en sortie de la ligne à retard.
Trace verte = source
audio avant retard ; trace rouge = signal
retardé
Sans rebouclage (
feedback)
de la sortie vers l'entrée, on obtient un seul
écho (graphe ci-devant).
En réinjectant le signal retardé à l'entrée de
la ligne à retard, on obtient de multiples répétitions (graphe
ci-après).
Trace verte = source audio avant retard ; trace rouge = signal
retardé et réinjecté dans la ligne à retard
Descriptif du schéma
Le système est composé de 4 sous-ensembles :
- le CAN,
convertisseur analogique numérique (ADC en anglais) - ici j'utilise un
circuit LTC1864 de
résolution 16 bits, dont la cadence d'échantillonnage maximale peut
atteindre 250 kHz (250000 échantillons de 16 bits par seconde)
- le CNA,
convertisseur numérique analogique (DAC en anglais) - ici un circuit
intégré LTC1655 qui
lui aussi possède une résolution de 16 bits et capable de travailler à
une cadence élevée
- le MCU,
microcontrôleur PIC de la famille dsPIC33 - gestionnaire complet du
système, le logiciel qui le fait vivre gère les opérations :
. de numérisation du signal analogique
d'entrée (par le CAN);
. de retard, grâce à la lecture et à l'écriture des échantillons
audio dans une mémoire externe (RAM);
. de restitution du signal audio sous
sa forme analogique (par le CNA)
- la RAM,
mémoire externe rapide - ici une FRAM de 2 Mb (256 Ko) ou une SRAM de 1
Mb (128 Ko) qui assure le retard entre signal entrant et signal sortant
Le graphe qui suit montre le chronogramme des opérations
réalisées pour
un seul échantillon audio. Le microcontrôleur PIC ne chôme pas !
ADC = Analog to Digital Converter (= CAN en français) ; DAC = Digital to Analog Converter (= CNA en français)
MEM_Write = éciture en mémoire des échantillons entrants ; MEM_Read = lecture des échantillons préalablement stockés
Avec
cette façon de faire, le temps de traitement nécessaire pour un unique
échantillon audio est de 45 us environ, ce qui permet de travailler
avec une fréquence d'échantillonnage de 20 kHz. Grâce à une petite
astuce, j'ai réussi à réduire le temps de traitement total à 40 us,
pour
une fréquence d'échantillonnage finale de 25 kHz (schéma 003b).
L'avantage d'une
fréquence d'échantillonnage allant au-delà de 20 kHz est qu'il est plus
facile de filtrer le résidu d'horloge après conversion numérique
analogique (on pourrait même s'en passer puisqu'on ne l'entend pas).
L'inconvénient est qu'une valeur de fréquence
d'échantillonnage
inférieure à 40 kHz impose un filtrage passe-bas efficace avant la
conversion analogique numérique, pour atténuer fortement tout signal
dont la fréquence dépasse la moitié de cette fréquence. Comme il
s'agit d'un montage d'initiation, on peut se passer de ce filtre ou en
adopter un simple de type RC (6 dB/octave, ordre 1).
Le graphe qui suit montre le signal d'entrée et le signal
retardé (non filtré !), assez proches dans le temps pour faciliter la
comparaison entre les deux (zoom sur image pour détails). La fréquence
du signal test est de 1 kHz.
Les
graphes qui suivent montrent le retard maximal qu'on peut atteindre
pour un nombre donné de cellules de retard et pour une fréquence
d'échantillonnage de 25 kHz ou 20 kHz (trace verte = source
audio avant retard ; trace rouge = signal
retardé).
|
Type mémoire : SRAM
1 Mb
Nombre de cellules de retard (8 bits) : 8000
Nombre d'échantillons audio retardés (16 bits) : 4000
Fréquence échantillonnage : 25000
Hz
Délai max : 4000/25000 = 160
ms
|
|
Type mémoire : SRAM
1 Mb
Nombre de cellules de retard (8 bits) : 16000
Nombre d'échantillons audio retardés (16 bits) : 8000
Fréquence échantillonnage : 25000
Hz
Délai max : 8000/25000 = 320
ms
|
|
Type mémoire : SRAM
1 Mb
Nombre de cellules de retard (8 bits) : 32000
Nombre d'échantillons audio retardés (16 bits) : 16000
Fréquence échantillonnage : 25000
Hz
Délai max : 16000/25000 = 640
ms |
|
Type mémoire : SRAM
1 Mb
Nombre de cellules de retard (8 bits) : 64000
Nombre d'échantillons audio retardés (16 bits) : 32000
Fréquence échantillonnage : 25000
Hz
Délai max : 32000/25000 = 1280
ms |
|
Type mémoire : SRAM
1 Mb
Nombre de cellules de retard (8 bits) : 128000
Nombre d'échantillons audio retardés (16 bits) : 64000
Fréquence échantillonnage : 25000
Hz
Délai max : 64000/25000 = 2560
ms |
|
Type mémoire : FRAM
2 Mb
Nombre de cellules de retard (8 bits) : 256000
Nombre d'échantillons audio retardés (16 bits) : 128000
Fréquence échantillonnage : 20000
Hz
Délai max : 128000/20000 = 6400
ms |
Le temps de retard est réglable par l'utilisateur grâce aux
boutons-poussoirs SW1/Dec et SW2/Inc.
Alimentation
L'alimentation doit être de type simple de valeur +5V, comme
celle décrite à la page
Alimentation
simple 001.
Schéma 003b
En opérant une petite modification du schéma
003 d'origine, j'ai cherché à bénéficier d'un transfert plus
rapide des échantillons audio entre le
microcontrôleur et la mémoire SRAM externe (en écriture et en lecture).
Avec un succès tout relatif...
Mes tentatives de réduction du temps de traitement
inter-échantillons n'ont pas abouti aux résultats que j'espérais. Le
mieux que j'ai pu obtenir est un temps de traitement de 40 us, 5 us
pour les conversions AN+NA et 35 us pour les écriture+lecture dans la
RAM externe. Le gain de temps obtenu par procédé "
bit-banging"
(sans utiliser le module SPI hard du PIC) et en utilisant le mode SQI
de la
SRAM est ridicule et ne vaut pas le coup, car le PIC utilisé est trop
lent pour ça (je suis au mieux dessendu à 38 us). Comme les résultats
obtenus avec le mode SPI de la SRAM
conjointement utilisé avec le module SPI du PIC sont
similaires et
plus faciles à mettre en oeuvre, j'ai
abandonné l'idée de me focaliser sur cette piste d'amélioration avec le
mode SQI.
J'en
reste donc (pour l'instant) à ces caractéristiques
"limitées" qui me plaisent tout de même assez bien, car après
tout, ce montage sonne mieux que
mon vieux delay à base de ligne à retard SAD1024 du fabricant
Reticon (disons qu'il sonne autrement).
Mode Bypass
En mode bypass, la mémoire externe
n'est pas utilisée
et le temps de transit entrée/sortie est alors inférieur à 20
us.
Dans ce mode particulier, le montage permet de simuler un
échantillonnage
effectué avec une résolution comprise entre 1 et 15 bits, tout en
bénéficiant d'une fréquence d'échantillonnage de 60 kHz pour une bande
passante
20 kHz. Pour cela, la valeur de chaque échantillon
audio peut être divisé par un nombre égal à une
puissance de 2, juste après l'étape de numérisation :
- division par 2 pour une résolution équivalente de 15 bits
- division par 4 pour une résolution équivalente de
14 bits
- division par 8 pour une résolution équivalente de
13 bits
- division par 16 pour une résolution équivalente de
12 bits
- division par 32 pour une résolution équivalente de
11 bits
- division par 64 pour une résolution équivalente de
10 bits
- division par 128 pour une résolution équivalente
de 9 bit
- division par 256 pour une résolution équivalente de 8 bits
- division par 512 pour une résolution équivalente de 7 bits
- division par 1024 pour une résolution équivalente
de
6 bits
- division par 2048 pour une résolution équivalente
de
5 bits
- division par 4096 pour une résolution équivalente de
4 bits
- division par 8192 pour une résolution équivalente de
3 bits
- division par 16384 pour une résolution équivalente de
2 bits
- division par 32768 pour une résolution équivalente
de 1 bit
Pour compenser la perte de niveau occasionnée par la
troncature
des bits de poids faible, une amplification logicielle est opérée dans
le même rapport avant restitution dans le monde analogique. Le niveau
du signal de sortie reste ainsi compatible
avec celui du signal d'entrée. Les deux graphes suivant
montre deux exemples de réduction de résolution, un en mode 7 bits (à
gauche) et
un en mode 4 bits (à droite).
(Vout_NF = sortie CNA Non Filtrée)
Le
réglage de résolution est défini par
la position du potentiomètre RV1. Avec une tension de 0 V sur la ligne
Res (broche RA1/AN1 du PIC) la résolution est de 16 bits.
Avec une
tension de 3,3 V sur la ligne Res, la résolution est de 1 bit.
Logiciel du PIC
Fichier compilé pour dsPIC33 (*.hex) disponible en libre service dans
l'archive suivante.
Delay
003b - dsPIC33FJ12GP202 - 26/08/2023
Si vous souhaitez recevoir par la poste un PIC préprogrammé et
prêt à
utiliser, merci de consulter la page PIC - Sources.
Prototype
Non réalisé.
Circuit imprimé
Non terminé.
Historique
27/08/2023
- Première mise à disposition.