synthèse audio sur système embarqué avec fpga (inf8703)
DESCRIPTION
Projet de session en INF8703 (Audio numérique), hiver 2012 à l'École Polytechnique de Montréal en génie informatique.TRANSCRIPT
SYNTHÈSE AUDIO
SUR SYSTÈME
EMBARQUÉ AVEC
FPGA
PHILIPPE PROULX
INF8703 – AUDIO NUMÉRIQUE
HIVER 2012
POLYMTL.CA
MOTIVATION
• Créer mon propre instrument de musique
• Combiner informatique + musique
• Passionné par les synthétiseurs
• Architecture utilisée bien connue
• Pourquoi ne pas faire un VST?
• Physiquement plus portable
• Système dédié en temps réel (aucun risque de défaillance
d’un OS, par exemple)
• Meilleure latence en général
• Plus grand défi
2
PLAN
• Motivation
• Architecture utilisée
• Prototype électronique
• Processeur et contraintes
• Quelques solutions
• Flot de conception
• Synthèse soustractive
• DSS (Direct Digital Synthesis)
• Par table d’onde
• Synthèse FM
• Conclusion
3
ARCHITECTURE
SYNTHÈSE AUDIO SUR SYSTÈME
EMBARQUÉ AVEC FPGA
4
PROTOTYPE
ÉLECTRONIQUE
• Réalisé/démontré sur le Digilent Genesys
• FPGA Xilinx Virtex-5
• Entrée MIDI via un core UART
• Sortie AC’97 (signal mono stéréo)
5
MIDI FPGA
(synthèse) Signal audio AC’97
Vraie vue de
mon projet
une fois sur
Virtex-5!
PROCESSEUR UTILISÉ
• Xilinx MicroBlaze
• Architecture 32-bit
• Synthétisé à même le FPGA
• Très configurable
• Permet d’avoir des
DSP sur mesure
6
PROCESSEUR UTILISÉ
CONTRAINTES
• 100 MHz
• RAM : 256 MiB
• Aucun FPU
7
PROCESSEUR UTILISÉ
MALGRÉ TOUT
• Multiplicateur 32 × 32 bits résultat sur 64 bits
• Décalage à barillet (barrel shifter)
• Division matérielle
• Plusieurs cores matériels (moins de logiciel)
• UART avec tampon pour entrée MIDI (interruption)
• AC’97
• Tampon de sortie
• Contrôle du gain global
• Compteurs fixes avec interruption pour précision temporelle
8
PROCESSEUR UTILISÉ
PRINCIPAUX PROBLÈMES
POUR LA SYNTHÈSE AUDIO
• 100 MHz
• Optimiser les routines critiques
• On souhaite le plus de polyphonie possible
• Utiliser beaucoup de tables précalculées
• Forcer certaines routines en ligne (attribut GCC)
• Réduire le taux d’échantillonnage
• Aucun FPU
• Tout faire en virgule fixe
• Q4.28 signé
• Les échantillons sont toujours entre -1 et 1
• Certains coefficients d’IIR demandent beaucoup de
précision dans la partie fractionnaire
9
PROCESSEUR UTILISÉ
VIRGULE FIXE – RAPPEL
10
± ×
Opérande
Résultat
Retenue
÷
0
r = a ± b; r = (a * b) >> f;
r = (a << f) / b;
FLOT DE
CONCEPTION
• Développement et tests fonctionnels dans MATLAB
• Implémentation en langage C pour environnement Xilinx
• Scripts pour générer les différentes tables directement en
langage C
11
SYNTHÈSE
SOUSTRACTIVE
SYNTHÈSE AUDIO SUR SYSTÈME
EMBARQUÉ AVEC FPGA
12
SYNTHÈSE
SOUSTRACTIVE
• Création d’une onde riche en harmoniques
• Carrée, triangle, dents de scie, bruit blanc
• Soustraction de fréquences
• IIR passe-bas, passe-haut, passe-bande
• Options communes à la synthèse
• Enveloppe ADSR pour caractère sonique
• Effets additionnels (non implémentés)
• Distorsion/saturation
• Écho/délai
• Flanger
• ...
13
Onde riche
IIR
Enveloppe
Effets
Sortie
Onde riche
IIR
Enveloppe
Effets
Sortie
SYNTHÈSE SOUSTRACTIVE
CRÉATION DE L’ONDE
• Sans contrainte
• Calcul de la position dans l’onde mathématiquement et rééchantillonnage (TP1)
• Demande beaucoup d’étapes (instructions)
• Avec contraintes
• Accumulateur de phase
• Table d’incréments précalculés selon notre taux d’échantillonnage
• Plus on avance dans la phase, plus la fréquence est haute
• Très peu couteux en temps de calcul
• 16 bits suffisant
• 32 bits
• Portamento (pitch bend) en divisant un demi-ton en plusieurs 16ième ou 32ième de ton
• Effet d’unisson (chorus)
14
Onde riche
IIR
Enveloppe
Effets
Sortie
SYNTHÈSE SOUSTRACTIVE
CRÉATION DE L’ONDE
• Bruit
• rand()?
• ADC déconnecté
• Registre à décalage à rétroaction linéaire
• XOR entre différents bits d’un registre produit un nouveau bit pseudo-aléatoire
• 16 bits pour un cycle de 65 535 valeurs
• Très rapide
• « Fréquence » paramétrable : garder une même valeur sur plusieurs échantillons de suite
• Utilisé par le NES pour produire les percussions et certains effets spéciaux (vagues, explosions, etc.)
15
Onde riche
IIR
Enveloppe
Effets
Sortie
SYNTHÈSE SOUSTRACTIVE
ENVELOPPE ADSR
• Paramètres d’amplitude
• Attaque temps de passage de 0 à 100 % à partir
du déclenchement d’une touche
• Chute temps de passage de 100 % à s après
l’attaque
• Maintien niveau s tant que la touche est
maintenue
• Retombée temps de passage de s à 0 % à partir du relâchement
d’une touche
• Contrôle le caractère sonique des notes
• Longue attaque, maintien à 100 %, longue retombée pad
• Aucune attaque, courte chute, maintien à 0 % pluck
• Courte attaque, maintien à 100 %, courte retombée « normal »
16
Onde riche
IIR
Enveloppe
Effets
Sortie
SYNTHÈSE SOUSTRACTIVE
ENVELOPPE ADSR
17
Onde riche
IIR
Enveloppe
Effets
Sortie
SYNTHÈSE SOUSTRACTIVE
ENVELOPPE ADSR
• Implémentation
• Table de 256 amplitudes précalculées
(virgule fixe)
• Compteur matériel à 50 Hz (interruption)
• Met à jour l’amplitude en cours d’un canal
en faisant avancer l’index dans la table
(direction selon l’état ADR)
• Accumulateur incrémenté d’une certaine valeur pour aller lire
dans la table temps ADR paramétrables
• Niveau de maintien s paramétrable : un parmi les 256
disponibles
• Mais les contrôles MIDI sont parmi [0, 127]…
18
Onde riche
IIR
Enveloppe
Effets
Sortie
SYNTHÈSE SOUSTRACTIVE
FILTRAGE IIR
• Comment contrôler les paramètres dynamiquement?
• Quoi précalculer, quoi calculer en temps réel?
• Paramètre dynamique fc
• Fixer Q
• Valeur de Butterworth (0,71) plat jusqu’à fc
• Précalculer b0, b1, b2, a1 et a2
• Tables de 128 valeurs dans l’intervalle [20, fs / 2] Hz
• Espacées exponentiellement
• Passe-bas b2 = (b1 × 0,5) = b0
• Passe-haut b2 = (-b1 × 0,5) = b0
• Passe-bande b1 = 0
• Paramètres dynamiques fc et Q
• Précalculer 128 valeurs de w (évite la tangente en temps réel)
• Précalculer 128 valeurs de (1 / Q)
• Calculer dynamiquement n, b0, b1, b2, a1 et a2 lorsqu’un des paramètres change
• w2 w × w
• Beaucoup de calcul quand même pour un paramètre généralement moins important que fc 1
9
Onde riche
IIR
Enveloppe
Effets
Sortie
SYNTHÈSE SOUSTRACTIVE
FILTRAGE IIR
• Comment contrôler les paramètres dynamiquement?
• Quoi précalculer, quoi calculer en temps réel?
• Paramètre dynamique fc
• Fixer Q
• Valeur de Butterworth (0,71) plat jusqu’à fc
• Précalculer b0, b1, b2, a1 et a2
• Tables de 128 valeurs dans l’intervalle [20, fs / 2] Hz
• Espacées exponentiellement
• Passe-bas b2 = (b1 × 0,5) = b0
• Passe-haut b2 = (-b1 × 0,5) = b0
• Passe-bande b1 = 0
• Paramètres dynamiques fc et Q
• Précalculer 128 valeurs de w (évite la tangente en temps réel)
• Précalculer 128 valeurs de (1 / Q)
• Calculer dynamiquement n, b0, b1, b2, a1 et a2 lorsqu’un des paramètres change
• w2 w × w
• Beaucoup de calcul quand même pour un paramètre généralement moins important que fc 2
0
Pente trop douce pour un
effet audio intéressant
dans un contexte de
synthétiseur musical
Onde riche
IIR
Enveloppe
Effets
Sortie
SYNTHÈSE SOUSTRACTIVE
FILTRAGE IIR
21
fc Q
Paramètres tellement
modifiés souvent qu’ils
ont des accès physiques
privilégiés sur la plupart
des synthétiseurs
Onde riche
IIR
Enveloppe
Effets
Sortie
SYNTHÈSE SOUSTRACTIVE
SORTIE
• Mixe
• Division de l’addition d’ondes pour l’intervalle de 16 bits
• Évite le débordement
• Décalage de 3 positions utilisé pour 8 canaux
• Fréquence d’échantillonnage fixe
• Boucle principale calcul du prochain échantillon selon les dernières notes demandées par MIDI
• Compteur matériel fixé à la fréquence fs (ici 32 kHz 3 125 instructions par échantillon)
• Interruption qui met en sortie le dernier échantillon calculé
• Latence délai MIDI + 1 échantillon
• MIDI 31 250 b/s, 10 b/jeton, 3 jetons/message
• 1 échantillon (1 / 32 000) s
• Total environ 1 ms
22
SYNTHÈSE SOUSTRACTIVE
DÉMONSTRATION
• 8 canaux
• Enveloppes indépendantes
• Ondes
• Carrée, triangle, dents de scie, bruit blanc
• Mixe vers IIR passe-bas (2ième ordre)
• Paramètres
• Type d’onde canal MIDI
• fc du filtre IIR
• Temps d’attaque, de chute et de retombée (enveloppe)
• Niveau du maintien (enveloppe)
• Portamento (8 niveaux/demi-ton)
23
SYNTHÈSE SOUSTRACTIVE
AVEC TABLE D’ONDE
• Accumulateur de phase
• Tables de demi-ondes plutôt que de calculer l’échantillon à partir de l’accumulateur de phase
• Autre demi-onde la première négative et lue dans l’autre sens
• Permet des ondes plus complexes (enregistrée) sans augmenter le nombre de calculs
• Occupe plus d’espace en ROM
• Mêmes étapes que la synthèse DDS
• IIR, enveloppe, effets, sortie
24
SYNTHÈSE FM
SYNTHÈSE AUDIO SUR SYSTÈME
EMBARQUÉ AVEC FPGA
25
SYNTHÈSE FM
PRINCIPE
26
cos 2𝜋𝑓𝑐 𝑡 + 𝐼𝑚 𝑡 𝑚 𝑡 Porteuse
Modulation 𝑚 𝑡 = cos 2𝜋𝑓𝑚𝑡
cos 2𝜋𝑓𝑐 𝑡 + 𝐼𝑚 𝑡 cos 2𝜋𝑓𝑚𝑡
SYNTHÈSE FM
PRINCIPE
27
Déterminée par
la note jouée
Déterminée par un
ratio par rapport à fc
Enveloppe ou
indice de modulation
cos 2𝜋𝑓𝑐 𝑡 + 𝐼𝑚 𝑡 cos 2𝜋𝑓𝑚𝑡
SYNTHÈSE FM
SAVEURS
• Basse fréquence de modulation
• Vibrato
• Haute fréquence de modulation
• Son complexe
• Plusieurs harmoniques
• Selon le ratio C:M (expliqué plus tard)
• Selon l’indice de modulation
SYNTHÈSE FM
EXEMPLE
29
Porteuse 10 Hz
Modulation 2 Hz, indice 5
SYNTHÈSE FM
EXEMPLE
30
Porteuse 10 Hz
Modulation 20 Hz, indice 1
SYNTHÈSE FM
BANDES LATÉRALES
31
• Rapport C:M
• C fréquence de la porteuse
• M fréquence de la modulation
• Bandes latérales (harmoniques) > fondamentale
• C + M, C + 2M, C + 3M, C + 4M, …
• Bandes latérales basses < fondamentale
• C – M, C – 2M, …
• Si la fréquence est négative • Prendre la valeur absolue et inverser la phase
• Porteuse fondamentale
• M >= 2C ou C:M = 1:1
• Ratios harmoniques forme 1:N
• Ratios intéressants
• 1:1, 1:2, 4:9, 3:7, 2:5, 2:9, 1:π (inharmonique)
SYNTHÈSE FM
BANDES LATÉRALES
32
SYNTHÈSE FM
BANDES LATÉRALES
33
SYNTHÈSE FM
IMPLÉMENTATION
• Table de 65 536 valeurs d’une période de sinus
• Virgule fixe Q1.31 signé
• Accumulateurs de phase
• fc de base fixée par la note
• fm fixée par un ratio C:M
• Ratio paramétrable en temps réel par des
interrupteurs sur la carte de développement
• 1 à 15 (4 interrupteurs) pour C et M
• Modulation
• Valeur donnée aussi grâce à la table de sinus
• Indice de modulation paramétrable en temps réel par
contrôle MIDI
34
SYNTHÈSE FM
IMPLÉMENTATION
35
Échantillon
de sinus pris
dans la table
Modulation
de phase en
cours prise
dans la table
de sinus
Amplitude de
modulation
paramétrable Modification de
l’accumulateur de
phase en cours
de la porteuse
(modifie la
fréquence
indirectement)
CONCLUSION
SYNTHÈSE AUDIO SUR SYSTÈME
EMBARQUÉ AVEC FPGA
36
SYNTHÈSE
SOUSTRACTIVE
• Mise en forme de bruit
• Diminue le bruit de quantification
• Oscillateurs très lents (LFO)
• Modifient certains paramètres automatiquement
• fc du filtre IIR
• Ondes sinusoïdale ou triangulaire
• Flanger, phaser
• Enveloppe ADSR pour fc du filtre IIR
• Permet un timbre de type « pouet » ou trompette
• Modulateur en anneau (ring modulator)
• Multiplication de l’onde synthétisée par une onde sinusoïdale de fréquence variable
• Basse fréquence tremolo
• Haute fréquence son de cloche
37
SYNTHÈSE FM
• Yamaha DX7
• Un peu de bruit dans le rendu audio
• Précision arithmétique
• Table de sinus « petite »
• Enveloppe ADSR sur un paramètre
• Indice de modulation automatisé
• Plusieurs modulateurs
• Modulateur à rétroaction négative
38
FPGA
• Coprocesseurs
• IIR
• Augmenter l’ordre
• Plus de paramètres en temps réel
• CORDIC
• Calcul de fonctions trigonométriques pour remplacer les
LUT si l’espace est un facteur limitant
• Générateurs DDS dédiés
39
REMERCIEMENT
SYNTHÈSE AUDIO SUR SYSTÈME
EMBARQUÉ AVEC FPGA
40
FRANÇOIS-RAYMOND BOYER