Modex FPGA : réalisation d`un égaliseur graphique

Transcription

Modex FPGA : réalisation d`un égaliseur graphique
Modex FPGA : réalisation d'un
égaliseur graphique
Fabrice Bernhard et Florent Cadoux
26 juin 2004
1
Table des matières
1 Les outils
1.1
1.2
1.3
Les FPGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
La réalisation de circuits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Matlab et les ltres numériques . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2
2
4
2 Restitution à distance de l'image achée par un écran par captage et
traitement des ondes magnétiques émises par celui-ci
6
2.1
2.2
2.3
2.4
Le système Tempest .
Etude préliminaire . .
Réalisations . . . . . .
Dicultés rencontrées
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
8
9
11
3 Traitement du signal de sortie d'une guitare électrique pour reconnaître
les notes jouées
11
3.1
3.2
Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mise en oeuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
12
4 Partie théorique : degré du ltre passe-bande sélectionnant les notes de
guitare dans le cadre du second projet
14
4.1
4.2
Hypothèses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Réglage des contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
16
5 Egaliseur graphique
18
6 Traitement du signal et FPGA : avantages et inconvénients
20
5.1
5.2
6.1
6.2
6.3
Schémas de principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Réalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Un processeur dédié au traitement . . . . . . . . . . . . . . . . . . . . . . . .
Limites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ranements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
18
20
20
21
Dans le cadre du module expérimental d'électronique, nous avons eu la chance de découvrir
les composants programmables FPGA. Ce module très dense et intense nous a permis de
découvrir toutes les étapes depuis la recherche d'une idée de projet de traitement du signal
utilisant des composants programmables jusqu'à sa mise en oeuvre électronique, en passant
par la très longue phase de debugging, ou correction d'erreur. Ce module dicile nous a
aussi appris que l'approche "ingénieur" et la réalisation d'un projet concret ne sont pas aussi
faciles que l'on pourrait s'imaginer, et que même dans le modeste cadre de notre modex les
impasses, les frustrations et les échecs étaient possibles. Nous allons présenter les trois projets
que nous avons cherché à réaliser, les aspects théoriques de ceux-ci, les raisons pour lesquelles
les deux premiers n'ont pas aboutis et les résultats du dernier projet.
1 Les outils
1.1 Les FPGA
Le FPGA, ou Field-Programmable Gate Array est un processeur dont les circuits internes
peuvent être programmés autant de fois qu'on le souhaite : après une phase de conguration,
le FPGA se comporte comme le circuit décrit par sa programmation. L'originalité des FPGA
Xilinx est de stocker la conguration dans une mémoire vive statique (SRAM), permettant
ainsi de reprogrammer ces circuits à volonté. Cette reprogrammabilité ne faisait pas partie des
objectifs de Xilinx, mais elle a permis d'ouvrir les FPGA à un nouveau champ d'applications.
En regroupant des FPGA sur une carte, on peut fabriquer un coprocesseur, physiquement
gé. Ce coprocesseur modiable à volonté, a été nommé Mémoire Active Programmable (ou
PAM pour Programmable Active Memory) en 1987 par Jean Vuillemin. Il combine les avantages du coprocesseur (un circuit dédié à la tâche qu'il doit eectuer) mais ne nécessite pas de
développement matériel. De plus, la possibilité de compiler une conguration, et de l'essayer
trois minutes plus tard, permet d'avoir assez rapidement les résultats attendus. La facilité
de développement sur PAM s'apparente donc largement à celle du développement des logiciels, même si cela reste plus lent et qu'il manque la facilité de debug. Les Mémoires Actives
Programmables représentent donc une solution intermédiaire entre la solution logicielle et le
processeur dédié.
Dans le cadre de notre modex, nous avons eu aaire à une carte PCI PAMette, munie de
quatre processeurs FPGA Xilinx.
1.2 La réalisation de circuits
Dessin de circuits Une interface est fournie par Xilinx pour programmer le FPGA. Elle
permet entre autres de dessiner le circuit avec une interface graphique assez intuitive : on
pose les blocs et on les relie à la souris. Cela permet d'avoir un aperçu global du circuit, mais
la complexité des circuits que l'on cherche à réaliser sur de tels FPGAs va nous obliger à
coder la plupart des fonctions en VHDL, et d'avoir ainsi des gros blocs qui correspondront
à des sortes de processeurs internes réalisant certaines tâches, que l'on reliera ensuite entre
eux.
2
VHDL Le VHDL, ou Very High Speed Integrated Circuit Hardware Description Language,
est un langage de haut niveau permettant de décrire un circuit électronique. Un compilateur
se charge de traduire le langage ensuite en circuits logiques élémentaires reliés entre eux. Ce
langage est nécessaire dès que le circuit devient trop complexe pour être décrit qu'à l'aide
d'un schéma électronique, c'est à dire dans le cadre du FPGA, quasiment tout le temps.
Le VHDL n'est pas un langage comme les autres, car il permet de choisir entre une programmation synchrone ou asynchrone. En eet il ne faut pas oublier que le VHDL est un
langage de description de circuits électroniques et qu'en électronique à priori tout a lieu en
temps réel à mesure que les signaux parcourent le circuit. Ce mode "naturel" est appelé
mode asynchrone, car les composants du circuit fonctionnent chacun à leur vitesse propre
sans coordination avec leurs voisins. En électronique asynchrone les temps de propagation
dans les circuits font que l'on ne sait pas trop après quel délai un circuit donnera la réponse
aux signaux qu'on impose en entrée, alors qu'en logique synchrone on utilise un signal en
créneau, l'horloge ("clock" en anglais) qui sert à se débarrasser de ces problèmes.
Le mode synchrone nécessite de subordonner l'exécution des tâches à une horloge interne,
qui est soit celle du processeur, soit un signal périodique plus ou moins basé sur l'horloge
interne du processeur (un Clock divider par exemple). Cette horloge permet d'avoir une base
de temps commune dans tout le circuit et éviter d'avoir des informations qui arrivent dans
une partie du circuit avant que celle-ci ne soit prête à la recevoir, grâce à l'idée essentielle
représentée sur le schéma suivant :
Fig.
1 Electronique synchrone
Comme on le voit sur ce schéma, il y a deux "verrous" à l'entrée et à la sortie de tout
circuit élémentaire synchrone : sur les fronts montants d'horloge, les entrées sont xées et
sur les fronts descendants, ce sont les sorties qui sont xées. De cette manière on ne modie
jamais une entrée pendant que la sortie qui l'alimente est en train de changer, et tant que
le temps de propagation dans le circuit asynchrone qui se trouve entre les deux verrous est
inférieur à la demi-période de l'horloge, on maîtrise parfaitement les temps de propagation
(l'information met exactement un nombre entier de "clocks" pour traverser le circuit). Par
exemple pour le multiplieur 12x12 que nous avons utilisé dans nos ltres, on obtient le résul3
tat d'une multiplication en cinq coups d'horloge.
Un exemple de VHDL est disponible en annexe.
1.3 Matlab et les ltres numériques
La boîte à outils "Filter design" de Matlab est un outil extrêmement convivial pour la
réalisation de ltres numériques. Il regroupe toutes les fonctions de conception de ltres disponibles en ligne de commande dans une interface graphique simple et intuitive qui permet de
spécier rapidement les qualités requises pour le ltre, et fournit en retour les coecients du
ltre dans diérents formats (adaptés à Matlab, ou exportés dans un format externe comme
le .txt ou le .coe spécialement pour les FPGA Xilinx).
Fig.
2 La boîte à outils "Filter Design" de Matlab
La première étape consiste à choisir le type de ltre : soit FIR (Finite Impulse Response),
soit IIR (Innite Impulse Response). Le nom de ces ltres vient du fait que la réponse impulsionelle d'un ltre IIR (c'est à dire, la réponse à un signal numérique composé d'un unique
"1" suivi de zéros) est constituée d'une suite théoriquement innie de nombres non nuls, ce
qui n'est pas le cas des ltres FIR.
Au premier abord, les ltres IIR nous semblaient plus avantageux car à contraintes identiques
(les contraintes sont la ou les fréquence(s) de coupure, l'atténuations en dB dans une certaine
bande de fréquence...), Matlab propose des ltres IIR de degré bien moindre que pour les
4
ltres FIR. A titre d'exemple, pour une ltre passe-bas avec une fréquence d'échantillonage
Fs = 48000, une bande de coupure entre Fpass = 9600 et Fstop = 12000 dans laquelle l'atténuation doit passer de maximum 1dB à minimum 80dB , le ltre d'ordre minimum proposé
par Matlab est d'ordre 50 en FIR (voir sa courbe de réponse sur la gure suivante), alors
qu'il n'est que de degré 31 en IIR.
Fig.
3 Courbe de réponse d'un ltre FIR d'ordre 50
Mais en contrepartie, les ltres IIR présentent de nombreux inconvénients. Leur courbe
de réponse est beaucoup moins "propre" que pour un ltre FIR, comme on peut le constater
sur les gures suivante pour un ltre passe-bande :
Fig.
Fig.
4 Un ltre passe-bande de type FIR
5 Un ltre passe-bande de type IIR avec les mêmes contraintes
Ceci fut conrmé par des essais avec des extraits sonores (traités directement sous Matlab) : alors que le ltre passe-bande FIR appliqué à l'extrait avait exactement le comportement
5
attendu, il ne sortait du ltre passe-bande IIR q'un soue inaudible. Sachant que les ltres
IIR sont de plus réputés plus sensibles aux erreurs d'arrondis (ce qui génère du bruit) et plus
diciles à programmer, nous avons donc opté pour des ltres de type FIR.
Enn, il faut savoir que la quantication (l'opération qui code les coecients du ltre
sur n bits pour le FPGA, donc diminue leur précision par rapport à leur représentation en
Matlab) modie l'allure du ltre, comme on peut le voir sur le schéma suivant où les deux
courbes de réponse (originale et quantiée) sont superposées :
Fig.
6 Les eets de la quantication
2 Restitution à distance de l'image achée par un écran
par captage et traitement des ondes magnétiques émises
par celui-ci
6
2.1 Le système Tempest
Il s'agit d'un système d'espionnage qui vise à reconstituer à distance l'image achée sur un
écran d'ordinateur uniquement à partir du signal récupéré par une antenne pointée vers cette
écran. C'est l'armée américaine qui développa cette technologie dans le plus grand secret, et
la nomma TEMPEST, nom de code devenu générique pour décrire ce procédé. On ne sait pas
encore aujourd'hui jusqu'à quel point leur système est ecace. Mais on en sait maintenant un
peu plus grâce, d'une part à la déclassication de certains documents militaires américains,
et surtout grâce à la récente publication (en Mars 2004) sur Internet de la thèse de Markus
Kuhn, de l'université de Cambridge, intitulée "Compromising emanations : eavesdropping
risks of computer displays". Dans ce document, l'auteur explique comment, avec du matériel
extrêmement perfectionné et en trois ans de recherches, il est parvenu, en espionnant un écran
monochrome à 3 mètres de distance, à reconstituer un texte dont une partie est présentée
sur la gure suivante.
Fig.
7 Une partie de l'écran reconstitué par M. Kuhn
La première ligne achée est "The quick brown fox jumps over the lazy dog" et les deux
dernières énumèrent les lettres de l'alphabet de 'A' à 'N' et de 'a' à 'n'. L'image reconstituée
est assez diérente de l'original, mais susamment proche pour pouvoir reconstituer un texte
cohérent. Le système Tempest est donc viable.
Remarque sur l'origine du rayonnement : un écran classique est constitué d'un canon
à électron qui projette les électrons sur l'écran pour acher l'image. Or l'émission d'électrons dans le vide va émettre du rayonnement électromagnétique que nous pourrons capter
pour retrouver ensuite l'image achée sur l'écran espionné. Cette méthode qui peut paraître
extrêmement complexe est en fait grandement facilité par le fait que les écrans d'ordinateur
reçoivent des signaux caractéristiques à chaque début d'écran et début de ligne, qui sont eux
aussi émis très fortement (le faisceau d'électrons est ramené à gauche de l'écran par un champ
créé par des bobines, que l'on détecte) et facilitent grandement l'interprétation ensuite du
rayonnement. Il y a donc (au moins) deux sources distinctes de rayonnement.
7
De plus, ce procédé d'espionnage par captage d'onde électromagnétique est particulièrement intéressant, parce que dans le contexte actuel, quasiment toutes les informations
sensibles transitent par des ordinateurs. Or conscient de cela, la plupart des administrations
à risques ont protégé leur réseau pour éviter les intrusions par ce biais, mais beaucoup ne
connaissent même pas le risque que représente le procédé Tempest et n'ont donc rien prévu
contre. La dé classication de certains dossiers américains sur le sujet ont montré que ce procédé avait par exemple été utilisé par des services secrets des pays de l'est, aux Etats-Unis,
mais aussi utilisé par les Etats-Unis comme "cheval de Troie" dans un programme livré à
des puissances étrangères : ce programme qui devait gérer des bases de données, utilisait les
ondes magnétiques émises par l'écran pour émettre les informations sensibles, informations
qui, couplées à des codages correcteurs d'erreurs pouvaient être apparemment réceptionnées à
distance. Il convient tout de même d'être prudent sur ce sujet, les informations étant diciles
à vérier. De plus, les normes qui limitent aujourd'hui fortement les émissions électromagnétiques des appareils grand-public tels que les écrans (sans même parler de l'apparirion des
écrans LCD !) risquent de compromettre la viabilité de la technologie Tempest.
2.2 Etude préliminaire
Comme nous avions bien conscience de disposer de beaucoup moins de temps, de moyens
et de compétences que Markus Kuhn, notre objectif initial se bornait à distinguer par exemple
un gros carré d'un gros triangle monochrome sur l'écran espionné à l'aide d'une antenne collée à cette écran. Avant de nous lancer dans la réalisation de ce projet, nous avons eectué
plusieurs tests grossiers (c'est à dire, sans faire de mesure précise) pour évaluer sa faisabilité.
Nous avons fait acher à l'écran une ou plusieur bandes blanches de largeur variable verticales sur fond noir.
Fig.
8 Ecran de test pour le système Tempest
Ainsi nous attendions un signal périodique de période le temps de balayage d'une ligne,
avec un signal supplémentaire toutes les 640 lignes pour le retour en haut de l'écran. A l'aide
d'un oscilloscope numérique, avons pu observer plusieurs phénomènes.
8
L'amplitude, mais aussi dans une certaine mesure la forme du signal dépendent fortement du placement de l'antenne. C'est en la plaçant sous l'écran et bien orientée que
l'on obtient le signal le plus fort. C'est donc la solution que nous avons adoptée.
Le début d'une ligne se traduit par une forte impulsion (plusieurs millivolts avec notre
antenne) sous forme d'une série de quelques oscillations électriques à une fréquence de
l'ordre de 15 à 25 MHz.
Une transition de noir à blanc ou de blanc à noir se traduit sur l'oscillogramme par un
pic de tension d'amplitude quelques millivolts, deux ou trois fois inférieure à l'amplitude du pic qui signale le retour de ligne.
Si l'on n'ache qu'une seule bande blanche et qu'on diminue sa largeur, les deux pics
(noir-blanc et blanc-noir) se rapprochent jusqu'à ne former q'un seul pic.
Les retours en haut de l'écran ne produisaient pas de signal observable.
A l'époque, ces résultats nous paraissaient très encourageants car nous pensions pouvoir détecter dans un premier temps les pics (c'est à dire faire une simple étude du niveau
du signal délivré par l'antenne) avec un comparateur à deux niveaux (un pour le retours
de ligne et un pour les transitions de couleur) qui nous aurait permis de reconstruire une
image monochrome pour peu qu'elle ne contienne pas de ne bande de couleur : en raison
du recouvrement des pics mentionné ci-dessus, une telle transition double (par exemple noirblanc-noir) aurait été prise pour une transition simple (noir-blanc). Quant au problème de
l'absence de "top synchro vertical" pour le retour en haut, on peut le contourner si on fait
l'hypothèse que le nombre de lignes de l'écran est connu : il sut de prendre un premier
top synchro arbitraire, cela translate juste l'image verticalement (le signal qui déborde par
exemple en bas se retrouvant en haut de l'écran). Ceci peut être ajusté manuellement par la
suite.
Dans un deuxième temps, si cette détection de niveau s'était avérée ecace, nous aurions
même pu faire une étude plus précise, par exemple en essayant de détecter non pas le niveau
mais la fréquence du signal à l'aide d'un ltre (la fréquence des oscillations qui correspondent
au retour de ligne n'est pas la même, par exemple, que celle qui correspond aux changements
de couleur).
2.3 Réalisations
Pour notre projet il fallait tout d'abord nous familiariser avec le fonctionnement d'un écran
d'ordinateur. De plus, il nous fallait aussi restituer l'image " espionnée " sur un deuxième
écran. Nous avons donc décidé de programmer un "pilote VGA", c'est-à-dire un composant
VHDL qui permet l'achage sur un écran. Il prend en entrée un signal Clock qui lui permettra
de bien synchroniser les signaux à envoyer à l'écran, et trois composants RGB. En sortie, on a
les diérents ls du câble qui va être connecté à l'écran, plus deux sorties " colonne " et " ligne
" qui vont permettre à un autre composant de savoir à quel endroit dans l'achage le pilote
se trouve à tout moment. Cet autre composant codera lui le contenu de l'image, et donnera à
9
l'entrée RGB du pilote la couleur du pixel correspondant aux sorties " ligne " et " colonne "
de celui-ci. Le pilote VGA semble à première vue assez complexe. On se place donc dans un
cas simple : un écran basse résolution, avec 40ns par pixel. Finalement la programmation se
découpe en deux grandes phases : les phases de synchronisation verticale, qui permettent de
délimiter le début d'un écran entier et les phases de synchronisation horizontale qui délimitent
les débuts de lignes.
Un écran entier correspond à une période de longueur environ 450 lignes, avec un signal
Fig.
9 Chronogramme de synchronisation verticale d'un écran VGA
de synchronisation verticale ON pendant un intervalle de temps qui dure deux lignes et où
rien n'est aché : c'est le blanking. Puis chaque ligne correspond à une période de longueur
environ 680 pixels. Les 40 premiers on met le signal de synchronisation horizontale à o, et
on ache rien : c'est aussi le blanking. Puis on commence à acher le contenu de la ligne,
avec deux légères pauses en début et n de ligne.
Ce signal cadencé permet au canon électron de bien acher les pixels et lui laisse le temps
Fig.
10 Chronogramme de synchronisation horizontale d'un écran VGA
10
de revenir en début de ligne puis en début d'écran. Les périodes de blanking lui permettent
aussi de mesurer l'intensité du signal qui correspond à " noir " et donc de régler l'intensité
du faisceau émis en fonction de cela.
La programmation de ce pilote nous a permis de comprendre en détail le fonctionnement des
tops de synchronisation, signaux qui étaient au coeur de notre projet, puisqu'ils sont très
clairement émis par le canon à électron et auraient donc permis à leur tour de synchroniser
le signal reçu par notre antenne.
2.4 Dicultés rencontrées
Malheureusement, après plusieurs séances infructueuses, nous avons été contraints d'abandonner ce projet qui s'est avéré trop ambitieux.
Le premier problème qui nous est apparus dès la séance qui suivait nos tests préliminaires, est
que le signal délivré par l'antenne changeait (en fréquence et en amplitude) signicativement
d'une séance à l'autre (l'ensemble du dispositif expérimental étant le même). Ce phénomène
étrange vient peut-être des émanations électromagnétiques émises par les laboratoires environnants, mais nous ne l'expliquons pas avec certitude. Il rendait en tout cas l'étude dicile
puisque le phénomène que nous devions détecter n'était pas le même d'une séance à l'autre.
Un second problème est venu du comparateur : en raison de la fréquence élevée des signaux
à détecter (autour de 20 MHz pour le top de synchro horizontal) il n'était pas possible de
faire entrer le signal directement de l'antenne dans le FPGA par un convertisseur analogique
numérique. D'abord il aurait fallu l'amplier, et surtout avec notre carte cadencée au mieux à
40 MHz nous n'aurions pas pu échantillonner avec assez de points. Nous avons donc essayé de
réaliser un petit circuit en "vrais" composants électronique qui aurait pu réaliser rapidement
cette comparaison à deux niveaux. Mais les comparateurs (amplicateurs opérationnels en
comparateurs ou comparateurs dédiés) que nous avons testés ne pouvaient pas travailler à
une fréquence aussi élevée. Ce problème de fréquence aurait été encore pire avec la méthode
de détection "par fréquence" au lieu de "par niveau" puisque dans ce cas, nous aurions dû
échantilloner susamment rapidement pour avoir le temps de faire les calculs de ltrage entre
deux échantillons.
Nous avons donc renoncé à ce projet, mais cet échec fut tout de même formateur puisqu'il
nous a donné l'occasion de chercher par nous-même les moyens de réaliser notre objectif,
étudier leur faisabilité à l'aide de matériel de pointe et comprendre les limites du traitement
numérique de l'information.
3 Traitement du signal de sortie d'une guitare électrique
pour reconnaître les notes jouées
3.1 Objectifs
Ce projet consiste à reproduire un appareil utilisé par les guitaristes pour convertir les
notes jouées par leur instrument au format Midi. Ceci permet par exemple d'obtenir automatiquement la partition jouée par l'instrumentiste ou, en passant par un synthétiseur, de
faire jouer à la guitare une autre voix que la sienne (ce qui revient à changer le timbre de
11
l'instrument). La norme Midi (Musical Instrument Digital Interface) est un protocole pour la
transmission d'informations entre plusieurs machines (synthétiseur, expandeur, échantillonneur, séquenceur, carte-son d'ordinateur, clavier et autres instruments) qui sera décrite plus
en détails en annexe.
Le but est donc de détecter la ou les notes jouées par la guitare (ou plutôt, de détecter
quand les notes commencent et quand elles s'arrêtent) pour ensuite les traiter (les coder en
Midi pour jouer sur un synthétiseur, acher les notes sur un écran...). Pour cela nous avons
besoin de séparer les diérentes fréquences du signal qui sort de l'instrument. Si l'on utilise
des ltres passe-bande (on pourrait penser aussi à des outils tels que la transformation de
Fourier), ceci nécessite de synthétiser des ltres très "raides" pour séparer chaque note de la
suivante. Sur une guitare électrique, les notes s'échelonnent sur au moins quatre octaves, soit
48 notes ( !) minimum, en partant du Mi2 à 164,8. . . Herz. La fréquence de chaque note est
1
déduite de la fréquence de la note précédente en la multipliant par 2 12 et la note de référence
est le La3 à 440 Herz.
3.2 Mise en oeuvre
Le traitement "naïf" utilisant uniquement des ltres passe-bande que nous envisagions
était le suivant :
Fig.
11 Diagramme fonctionnel du convertisseur audio-Midi
(L'intérêt du ltrage passe-bas et de la décimation est expliquée ci-après).
Comme nous le verrons dans la partie théorique, il est absolument nécessaire de trouver
des astuces pour utiliser moins de ltres (sinon on manque de place sur les FPGA). Une idée
pourrait être de ne réaliser qu'un petit nombre de ltres (disons 12 pour avoir une octave),
tout en ayant susament peu de coecients (ou de coecients non-nuls, si on les calcule intelligemment comme cela est expliqué au 6.3) pour avoir le temps de passer plusieurs signaux
dans le ltre entre deux échantillons. Si le ltre passe-bande détecte une certaine note, alors :
12
en passant le signal "normal" dans le ltre on détectera cette note
en passant le signal obtenu en décimant un échantillon sur deux dans le signal initial,
on détectera la même note à l'octave inférieure (car elle est de fréquence moitié).
(On peut aussi eectuer ce calcul avec d'autres valeurs, par exemple en ne prenant que 6
ltres au lieu de 12, mais la décimation d'un échantillon sur deux est la plus facile à réaliser).
De manière quantitative, le problème est donc le suivant :
pour restituer un son correct pour l'oreille humaine, les sons sont souvent échantillonnés
à environ 40 kHz (soit le double de la plus haute fréquence audible). La norme du CDaudio par exemple est 44.1 kHz. Mais ceci n'est utile que pour restituer correctement
les harmoniques de chaque note, qui font la spécicité du timbre de l'instrument. Pour
notre application, il sut de détecter les fondamentales, dont la fréquence n'excède pas
(pour quatre octaves en partant de Mi2 à 164.8. . . ) 2.6 kHz. On peut donc espérer faire
fonctionner le système en échantillonnant aux alentours de 5 kHz seulement, tout en
sachant que le repliement spectral (phénomène qui fait apparaître des basses fréquences
parasites dans le signal reconstitué lorsqu'on a sous-échantillonné le signal initial) des
harmoniques risque de faire apparaître des signaux non-voulus. On peut cependant
supposer que l'amplitude des harmoniques est faible devant celle de la fondamentale,
mais ceci dépend en réalité de la guitare particulière que l'on utilise : chacune a son
timbre propre. Pour résoudre ce problème on peut faire passer le signal original dans
un ltre passe-bas en échantillonnant d'abord à fréquence élevée, puis on procède à une
décimation du signal (on fait baisser la fréquence d'échantillonnage) pour se ramener
aux 5 kHz voulus.
Fig.
12 Le spectre d'une guitare particulière
sachant que le FPGA peut être cadencé à 40 MHz au maximum et que l'on échantillonne à 5 kHz, cela nous laisse 8000 coups d'horloges entre deux échantillons pour
faire les calculs du ltre. Si on traite les quatre octaves en quatre passes comme cela
13
est expliqué ci-dessus, on peut encore se permettre 2000 coecients (non-nuls) par ltre.
il reste à faire rentrer tout ça sur le FPGA ! L'étude de la place occupée n'est pas facile
à faire a priori : il faut réaliser le circuit sur l'ordinateur, et c'est seulement après la
compilation que l'on sait quelle proportion du FPGA est utilisée.
L'étude suivante, qui constitue note question théorique, permet de connaître le nombre de
coecients nécessaires par ltre pour bien séparer les notes. Il sera ensuite possible d'évaluer
la place nécessaire et de savoir si le projet est réalisable sur nos FPGA.
4 Partie théorique : degré du ltre passe-bande sélectionnant les notes de guitare dans le cadre du second projet
4.1 Hypothèses
On suppose que lorsqu'elle joue un son, la guitare ne dépasse pas une certaine amplitude Amax . De plus, pour que le système de détection ne réagisse pas à n'importe
quelle composante du signal de faible amplitude (causée par exemple par un choc sur
la guitare ou autre perturbation susceptible de faire vibrer les cordes) il faut limiter
sa sensibilité en décidant qu'une note est considérée jouée lorsque l'amplitude de la
fréquence correspondante dépasse une certaine amplitude limite A0 .
Le but étant de détecter uniquement les notes de la gamme, il faut prendre comme hypothèse que seules celles-ci sont jouées - ce qui exclut pas exemple le cas d'un guitariste
eectuant un "tiré", c'est à dire qui passe continument d'une note à la suivante en modiant la tension de la corde avec sa main gauche : dans cette situation, on ne peut pas
décider quelle note il joue. Cependant, il n'est pas non plus possible de considérer que
la fréquence jouée par la guitare est exactement la fréquence théorique (440 Hz pour
le La de référence, par exemple) : un instrument se désaccorde toujours, il est sensible
entre autres à la température, et le guitariste eectue toujours avec sa main gauche
de petites modications de tension involontaires qui font varier la fréquence de la note
jouée. Il faut donc décider d'une largeur de tolérance autour de la fréquence théorique,
dans laquelle on considère que c'est bien une note de la gamme qui est jouée. Comme la
progression des fréquences est exponentielle (on passe de l'une à la suivante en multipliant par une constante (2)(1/12) ), il faut prendre cette zone de la forme [ βf , f ∗ β] avec
β ≤ (2)(1/24) (pour ne pas que les zones de deux ltres successifs se recouvrent). An
d'avoir une marge, mieux vaut prendre β strictement plus petit que (2)(1/24) pour être
sûr qu'une note de fréquence "limite" ne soit pas détectée comme deux notes à la fois.
Dans la suite on prendra β = 2(1/36) , ce qui revient à découper l'intervalle de fréquence
entre deux notes en trois parties (logarithmiquement) égales :
Bien sûr, avec un choix de β plus grand on ane la "zone de ou", et avec un β plus
petit on l'élargit. Le réglage de β dépendra en pratique de la précision voulue pour
détecter les fréquences.
14
Fig.
13 Les diérentes zones de fréquences
Ensuite, on va réaliser des ltres passe-bande qui devront laisser passer la fréquence
qui leur est attribuée et couper les autres. L'outils de design de ltres de Matlab se
présente de la manière suivante pour les ltres passe-bande :
Fig.
14 Réglage des contraintes pour un ltre avec Matlab
Pour notre application, nous avons donc besoin de régler pour chaque fréquence centrale
fi , les bornes d'acceptation Fpass1 et Fpass2 , et les bornes de réjection Fstop1 et Fstop2 . Ceci
est fait au moment du réglage du paramètre β . Il faut ensuite régler les contraintes Dpass et
Dstop de la manière la plus judicieuse possible. (Ces deux variables sont dénies sur le schéma
ci-dessus). Enn il faut régler l'amplitude Aseuil de sortie du ltre à partir de laquelle on
considère que la note correspondant au ltre en question est jouée.
15
4.2 Réglage des contraintes
Nos équations sont donc :
½
∀A ∈ [A0 , Amax ],
(1 − Dpass )A ≥ Aseuil
ADstop ≤ αAseuil
... où α est encore un coecient de sécurité visant à ce que les notes soient clairement
distinguées. Ainsi, avec ces contraintes et nos hypothèses, on peut armer que le signal à la
sortie d'un ltre dépasse en amplitude Aseuil si et seulement si la note est jouée (c'est à dire
dépasse A0 avec nos conventions). Le système est équivalent à :
½
Aseuil ≤ (1 − Dpass )A0
Aseuil ≥ Amax Dstop
soit en saturant les contraintes (inutile de demander des ltres plus raides que nécessaire !) :
½
Aseuil = (1 − Dpass )A0
Aseuil = Amax Dstop
On voit donc qu'il reste un degré de liberté dans le choix des contraintes : c'est l'équation
(1 − Dpass )A0 = Amax Dstop
qui xe Dpass par rapport à Dstop . C'est normal car si on demande au ltre de modier très
peu la fréquence qu'il est censé laisser passer (c'est à dire, Dpass petit), on peut se permettre
de xer le seuil Aseuil plus haut et donc de rejeter un peu moins sévérement les autres fréquences. Inversement, si on laisse Dpass assez grand, il faut rejeter les fréquences non voulues
plus sévérement (Dstop très petit) pour être sûr qu'elles ne dépasseront pas le seuil qui, du
coup, est plus bas.
Mais toutes les possibilités laissées par ce degré de liberté sont-elles équivalentes ? Intuitivement, on sent bien que non. si par exemple on choisit le premier cas ci-dessus (Dpass
petit, pas trop de contraintes sur Dstop ) il est clair qu'en demandant vraiment au ltre d'être
très horizontal dans la bande de fréquence qu'on laisse passer, on va faire monter très vite
le nombre de coecients et la liberté laissée à Dstop ne sura pas à compenser. Dans le
second cas, le même phénomène se produit. Il est donc probable qu'il existe un choix optimal
des contraintes, qui minimise le degré du ltre. Comme on n'a pas de formule qui donne le
degré du ltre en fonction des contraintes, il faut faire des essais numériques à diérentes
fréquences. Le résultat de ce que l'on trouve pour le La de référence à 440 Hz est visible sur
max
= 10.
la gure ci-après. On a pris pour les constantes : α = 2 et AA
0
Conformément à l'intuition, il existe bien un optimum pour lequel le degré du ltre est
minimal, ici 328. On peut recommencer ces essais pour diérentes fréquences ; par exemple,
16
560
520
480
440
400
360
320
5e−3
Fig.
9e−3
13e−3
17e−3
21e−3
25e−3
29e−3
33e−3
37e−3
41e−3
45e−3
15 Degré du ltre en fonction de Dstop pour le La à 440 Hz
pour tous les La de la guitare (de 220 Hz à 1760 Hz) on trouve que le degré optimal du ltre
est :
360
320
280
240
200
160
120
80
40
0
200
Fig.
400
600
800
1000
1200
1400
1600
1800
16 Degré du ltre optimal en fonction de la fréquence pour la note La
17
Avec ce graphique, on peut donc déterminer rapidement la faisabilité du projet. Sachant
que nous avons réussi à faire tenir sur un FPGA au maximum trois ltres à 256 coecients (même s'il est possible d'optimiser avec diérentes ruses qui seront exposées dans la
partie "ranements"), on voit tout de suite que (surtout à cause des basses fréquences qui
consomment beaucoup de coecients) la réalisation brutale des 48 ltres nécessaires pour
traiter les quatre octaves de la guitare est complétement irréalisable. Nous avons donc diminué le nombre de ltres de manière drastique (trois, actuellement !), dirigé la sortie des ltres
vers un circuit qui calcule l'amplitude et l'ache sur un écran VGA, et rebaptisé notre projet
"un égaliseur graphique".
5 Egaliseur graphique
5.1 Schémas de principe
Le principe de ce projet repose toujours sur l'utilisation de ltres en parallèle pour séparer
les fréquences. Le nouveau schéma de fonctionnement est :
Fig.
17 Schéma fonctionnel de l'égaliseur
5.2 Réalisation
La partie achage ne nous a pas posé de problème car nous avions déjà appris à gérer
un écran VGA dans le cadre du projet "Tempest".
La partie détection de maximum cherche simplement le maximum en valeur absolue du
signal sur un nombre de coups d'horloge calculé tel que le temps correspondant soit un
quart de seconde (grand devant la période de tout signal audible).
Le point le plus dicile est la réalisation des ltres. Nous avons implémenté des ltres
FIR avec les coecients donnés par Matlab, en utilisant le schéma suivant :
18
Fig.
18 Schéma fonctionnel d'un ltre
Dans ce schéma, le circuit écrit en VHDL joue un rôle central car c'est lui qui écrit dans
la RAM les échantillons lus sur le convertisseur analogique-numérique (données d'entrée), ajuste l'adresse des coecients à multiplier dans la RAM et la ROM, et donne
l'ordre au multiplieur d'eectuer une opération.
En pratique, le ltre ressemble plutôt à ça :
Fig.
19 Notre ltre représenté dans l'éditeur de schémas
19
Bien sûr, quand on met plusieurs ltres en parallèle, il n'est pas nécessaire de synthétiser
ces éléments pour chaque ltre : la ROM, le multiplieur et l'accumulateur dépendent du ltre,
mais la RAM et le "pilote" en VHDL sont communs à tous les ltres.
Nous avons réalisé un égaliseur à trois bandes car cela sut à remplir un FPGA à 86%.
A quatre bandes, le FPGA est rempli à 100% et le comportement du circuit est erratique.
Au-delà de cinq bandes, le compilateur abandonne. Une solution a priori simple (mais nous
avons appris à nous méer grandement de ce genre d'a priori au cours de ce modex ! ! !) serait
de synthétiser plus de ltres en les mettant sur d'autres FPGA de la carte (il existe un bus
qui les relie). Malheureusement, nous avons perdu énormément de temps en bonne partie à
cause d'un problème de hardware (le convertisseur numérique-analogique était défectueux)
qui ne s'est débloqué qu'à la dernière séance, et nous n'avons pas eu le temps de mettre en
oeuvre cette solution. On pourrait aussi diminuer le nombre de coecients (ici 256, ce qui
nous a semblé minimal pour avoir des ltres assez raides) mais le ltre devient moins précis,
surtout dans les basses fréquences.
6 Traitement du signal et FPGA : avantages et inconvénients
6.1 Un processeur dédié au traitement
Pendant le déroulement de ce Modex nous avons été amenés à nous poser la question
suivante : pourquoi utiliser un FPGA dans le cas du traitement du signal au lieu d'une solution informatique ? En plus de l'intérêt pédagogique de cette démarche, nous nous sommes
rendus compte que si le circuit est bien conçu, il est possible d'eectuer très ecacement des
opérations lourdes et rapides, sur le FPGA qui sera dédié à cela. Bien que sur un PC les
processeurs atteignent des vitesses bien plus rapides, il n'est pas du tout sûr que nous obtiendrions des résultats meilleurs, surtout si l'on utilise une interface nécessitant un système
d'exploitation du type de Linux ou Windows, qui vont eux aussi utiliser une partie des ressources disponibles, et qui pourront de temps en temps ralentir de façon aléatoire le processus.
6.2 Limites
Le FPGA présente cependant quelques limites par rapport à une solution purement informatique :
Limite de mémoire pour des ltres d'ordres élevés Lorsque nous avons cherché à
réaliser des ltres élevés, nous avons été confrontés à un problème de place : la carte pamette
dispose de 4 FPGAs, de 1600 CLBs chacun, et un ltre de 256 coecients occupe facilement
300 CLBs (estimation rapide).
Limite de temps pour les signaux haute fréquence Le processeur est limité en fréquence, ce qui nous a posé des problèmes au niveau de l'échantillonage des signaux, surtout
20
quand il est nécessaire de faire beaucoup de calculs entre chaque échantillonage. Pour décaler
les fréquences, nous avons pensé sans pouvoir le réaliser à un circuit super-hétérodyne.
6.3 Ranements
Cette partie présente quelques idées pour aller plus loin, en contournant les dicultés
mentionnées ci-dessus qui limitent la conception de ltres sur FPGA.
On l'a vu, les mémoires RAM et ROM synthétisables en CLB sont limitées à 256 coecients. Comment faire pour réaliser un ltre d'ordre supérieur ? Bien sûr, il est toujours
possible (au prix de quelques complications à la programmation) d'utiliser plusieurs mémoires
de ce type (sachant tout de même que la place occupée sur un FPGA par une mémoire est
importante). Mais en regardant un par un les coecients du ltre quantié tels que les donne
Matlab, on observe deux phénomènes. D'abord, beaucoup de coecients sont nuls : les coecients très petits sont souvent "arrondis" à zéro tandis que d'autres sont gonés par la
quantication pour compenser. Ceci peut être mis à prot pour stocker les coecients du
ltre non pas "à la le" dans une mémoire, mais en ne stockant que les coecients non-nuls.
On peut par exemple utiliser des couples (numroducoef f icient, valeurducoef f icient).
Le deuxième phénomène remarquable est que, au moins pour les ltres à peu de coecients, toutes les valeurs des coecients (sur 12 bits dans nos ltres) ne sont pas utilisées, loin
de là : dans certains cas extrêmes on ne trouve que des 0, des 1 et des -1. Voici en exemple
le début d'un chier de coecients pour un ltre :
Quantized Direct form FIR filter
------- Section 1 ------Numerator
QuantizedCoefficients{1}{1}
ReferenceCoefficients{1}{1}
( 1)
0.000030517578125 0.000017308477238175
0 ( 2)
0.000000000000000 -0.000001087316342545
( 3)
-0.000061035156250 -0.000046642427348849
( 4)
-0.000030517578125 -0.000035746154719920
On voit que le second coecient a été ramené à zéro et que les coecients quantiés 1 et
4 sont égaux alors que leurs valeurs avant quantication étaient diérentes. On peut encore
exploiter ce phénomène en utilisant un tableau de correspondance : si par exemple il n'y a
que cinq valeurs de coecients distinctes, on peut stocker dans une mémoire sur 3 bits (au
lieu de 12) les références de ces coecients et aller chercher la valeur qui correspond à chaque
référence.
On peut aussi chercher à gagner de la vitesse : en eet, la fréquence d'échantillonnage d'un
F
(où Fhorloge
signal que l'on veut traiter avec un ltre d'ordre n est a priori au plus de horloge
n
est la fréquence d'horloge du FPGA). En eet, il faut eectuer n multiplications et additions
entre deux échantillons. On peut cependant gagner du temps (en sacriant de la place pour
les multiplieurs) en parallélisant le calcul : si on stocke les coecients du ltre dans deux
21
mémoires distinctes et que deux multiplieurs eectuent les multiplications en même temps,
on gagne un facteur 2 sur la fréquence d'échantillonnage maximum accessible !
Enn, puisqu'il n'est pas possible d'accumuler un grand nombre de ltres sur la carte à cause
des limitations de place, on peut envisager d'autres solutions pour séparer les notes jouées
par la guitare. L'implémentation d'une tranformation de Fourier discrète (dicile dans le
temps imparti) ou l'utilisation d'un seul ltre passe-bande très étroit que l'on appliquerait
au signal tout en dilatant ce dernier dans le temps d'une valeur arbitraire.
***
A posteriori, ce modex ne nous a pas seulement appris des aspects scientiques et techniques du traitement du signal. Il nous a surtout montré que lorsqu'on veut passer à la phase
pratique, de très nombreuses dicultés surviennent qui peuvent être d'origines variées et qu'il
faut parfois être très imaginatif pour les détecter. Il faut aussi beaucoup de méthode et de
rigueur pour trouver l'origine des problèmes, et beaucoup, beaucoup de temps pour en venir
à bout : le nombre d'erreurs possibles (et le temps de compilation, aussi...) augmente exponentiellement avec la complexité du circuit que l'on veut réaliser et il est vraiment dicile
de savoir combien de temps on va mettre à corriger son projet !
C'était donc une expérience très intéressante et une bonne introduction à l'électronique numérique et nous ne regrettons pas notre investissement élevé dans ce modex.
22
Table des gures
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Electronique synchrone . . . . . . . . . . . . . . . . . . . . . . . . .
La boîte à outils "Filter Design" de Matlab . . . . . . . . . . . . .
Courbe de réponse d'un ltre FIR d'ordre 50 . . . . . . . . . . . .
Un ltre passe-bande de type FIR . . . . . . . . . . . . . . . . . .
Un ltre passe-bande de type IIR avec les mêmes contraintes . . .
Les eets de la quantication . . . . . . . . . . . . . . . . . . . . .
Une partie de l'écran reconstitué par M. Kuhn . . . . . . . . . . .
Ecran de test pour le système Tempest . . . . . . . . . . . . . . . .
Chronogramme de synchronisation verticale d'un écran VGA . . .
Chronogramme de synchronisation horizontale d'un écran VGA . .
Diagramme fonctionnel du convertisseur audio-Midi . . . . . . . .
Le spectre d'une guitare particulière . . . . . . . . . . . . . . . . .
Les diérentes zones de fréquences . . . . . . . . . . . . . . . . . .
Réglage des contraintes pour un ltre avec Matlab . . . . . . . . .
Degré du ltre en fonction de Dstop pour le La à 440 Hz . . . . . .
Degré du ltre optimal en fonction de la fréquence pour la note La
Schéma fonctionnel de l'égaliseur . . . . . . . . . . . . . . . . . . .
Schéma fonctionnel d'un ltre . . . . . . . . . . . . . . . . . . . . .
Notre ltre représenté dans l'éditeur de schémas . . . . . . . . . .
23
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
4
5
5
5
6
7
8
10
10
12
13
15
15
17
17
18
19
19