40
SYNTHÈSE AUDIO SUR SYSTÈME EMBARQUÉ AVEC FPGA PHILIPPE PROULX INF8703 – AUDIO NUMÉRIQUE HIVER 2012 POLYMTL.CA

Synthèse audio sur système embarqué avec FPGA (INF8703)

Embed Size (px)

DESCRIPTION

Projet de session en INF8703 (Audio numérique), hiver 2012 à l'École Polytechnique de Montréal en génie informatique.

Citation preview

Page 1: Synthèse audio sur système embarqué avec FPGA (INF8703)

SYNTHÈSE AUDIO

SUR SYSTÈME

EMBARQUÉ AVEC

FPGA

PHILIPPE PROULX

INF8703 – AUDIO NUMÉRIQUE

HIVER 2012

POLYMTL.CA

Page 2: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 3: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 4: Synthèse audio sur système embarqué avec FPGA (INF8703)

ARCHITECTURE

SYNTHÈSE AUDIO SUR SYSTÈME

EMBARQUÉ AVEC FPGA

4

Page 5: Synthèse audio sur système embarqué avec FPGA (INF8703)

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!

Page 6: Synthèse audio sur système embarqué avec FPGA (INF8703)

PROCESSEUR UTILISÉ

• Xilinx MicroBlaze

• Architecture 32-bit

• Synthétisé à même le FPGA

• Très configurable

• Permet d’avoir des

DSP sur mesure

6

Page 7: Synthèse audio sur système embarqué avec FPGA (INF8703)

PROCESSEUR UTILISÉ

CONTRAINTES

• 100 MHz

• RAM : 256 MiB

• Aucun FPU

7

Page 8: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 9: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 10: Synthèse audio sur système embarqué avec FPGA (INF8703)

PROCESSEUR UTILISÉ

VIRGULE FIXE – RAPPEL

10

± ×

Opérande

Résultat

Retenue

÷

0

r = a ± b; r = (a * b) >> f;

r = (a << f) / b;

Page 11: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 12: Synthèse audio sur système embarqué avec FPGA (INF8703)

SYNTHÈSE

SOUSTRACTIVE

SYNTHÈSE AUDIO SUR SYSTÈME

EMBARQUÉ AVEC FPGA

12

Page 13: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 14: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 15: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 16: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 17: Synthèse audio sur système embarqué avec FPGA (INF8703)

Onde riche

IIR

Enveloppe

Effets

Sortie

SYNTHÈSE SOUSTRACTIVE

ENVELOPPE ADSR

17

Page 18: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 19: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 20: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 21: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 22: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 23: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 24: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 25: Synthèse audio sur système embarqué avec FPGA (INF8703)

SYNTHÈSE FM

SYNTHÈSE AUDIO SUR SYSTÈME

EMBARQUÉ AVEC FPGA

25

Page 26: Synthèse audio sur système embarqué avec FPGA (INF8703)

SYNTHÈSE FM

PRINCIPE

26

cos 2𝜋𝑓𝑐 𝑡 + 𝐼𝑚 𝑡 𝑚 𝑡 Porteuse

Modulation 𝑚 𝑡 = cos 2𝜋𝑓𝑚𝑡

cos 2𝜋𝑓𝑐 𝑡 + 𝐼𝑚 𝑡 cos 2𝜋𝑓𝑚𝑡

Page 27: Synthèse audio sur système embarqué avec FPGA (INF8703)

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𝜋𝑓𝑚𝑡

Page 28: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 29: Synthèse audio sur système embarqué avec FPGA (INF8703)

SYNTHÈSE FM

EXEMPLE

29

Porteuse 10 Hz

Modulation 2 Hz, indice 5

Page 30: Synthèse audio sur système embarqué avec FPGA (INF8703)

SYNTHÈSE FM

EXEMPLE

30

Porteuse 10 Hz

Modulation 20 Hz, indice 1

Page 31: Synthèse audio sur système embarqué avec FPGA (INF8703)

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)

Page 32: Synthèse audio sur système embarqué avec FPGA (INF8703)

SYNTHÈSE FM

BANDES LATÉRALES

32

Page 33: Synthèse audio sur système embarqué avec FPGA (INF8703)

SYNTHÈSE FM

BANDES LATÉRALES

33

Page 34: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 35: Synthèse audio sur système embarqué avec FPGA (INF8703)

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)

Page 36: Synthèse audio sur système embarqué avec FPGA (INF8703)

CONCLUSION

SYNTHÈSE AUDIO SUR SYSTÈME

EMBARQUÉ AVEC FPGA

36

Page 37: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 38: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 39: Synthèse audio sur système embarqué avec FPGA (INF8703)

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

Page 40: Synthèse audio sur système embarqué avec FPGA (INF8703)

REMERCIEMENT

SYNTHÈSE AUDIO SUR SYSTÈME

EMBARQUÉ AVEC FPGA

40

FRANÇOIS-RAYMOND BOYER