Vous êtes sur la page 1sur 19

Changement de voix

Projet final UE II

Rapport de projet

UE II

Auteurs : Encadrants :

Sam Perochon Anthony Juton


Valentin Abadie Pascal Varoqui

30 Avril 2019
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

Table des matières


1 Introduction 1

2 Présentation de la carte et schéma synoptique 1

3 Partie Software 7

4 Pistes d’améliorations 14

0
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

1 Introduction
Ce projet final d’informatique industriel vise à utiliser nos connaisances acquises pour créer un module de
changement de voix sur la carte de développement STM32F746-DISCO. Cete carte utilise un microcontrôleur
STM32F746 muni d’un processeur ARM Cortex M7. Pour une utilisation plus pédagogique de la carte, une
extension avec différents connecteurs (potentiomètres, leds, boutons, connecteurs...) à été ajoutée (voir figure
3 et 4).

Notre objectif a été de créer un modificateur de voix temps réel, en modifiant soit le spectre du son
enregistré, soit ses caractéristiques temporelles. Le schéma de principe de la figure 1 illustre le fonctionnement
désiré du système final.

Figure 1 – Schéma de principe de l’utilisation de la carte pour la modification temps réel de la voix.

Parmi les principales difficultés de ce projet, nous pouvons citer :

1. L’ajout d’un capteur audio périphérique à la carte.


2. La gestion de la mémoire au sein de la carte, lors de l’acquisition du son enregistré, puis de son
traitement, jusqu’à sa conversion numérique analogique.
3. L’utilisation effective des librairies permettant de calculer la transformée de Fourier du son enregistré.

Ces difficultés ont été surmontées dans la mesure du possible, et dans la limite du temps imparti, grâce
à l’aide de nos camarades (partage de certains codes), mais également celles de M.Juton, M.Varoqui et
M.Rodet.

2 Présentation de la carte et schéma synoptique


Un schéma synoptique est proposé sur la figure 2. Nous avons essayé dans la mesure du possible vos
consignes quant à sa forme, en incluant le nom des périphériques, les liaisons utilisés, la fonction des différents
blocs, etc...

1
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

Figure 2 – Schéma synoptique du modificateur de voix.

La carte ainsi que l’extension utilisé sont données sur les figures 3 et 4. Le micro utilisé est donné figure
5. [3].

2
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

Figure 3 – Description visuelle de la carte de développement utilisée et de son extension.

Figure 4 – Schéma de cablage de l’extension de la carte STM32F746.

Le micro utilisé est présenté sur la figure 5, nous l’avons soudé au laboratoire à des pattes ainsi qu’a des
fils de connexions pour pouvoir l’associé à l’extension de la carte.

3
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

Figure 5 – Micro utilisée pour l’acquisition de la voix. Adafruit Silicon MEMS Microphone Breakout -
SPW2430. Seuls les broches +3V , GND et la sortie AC (sortie du micro) ont été utilisées.

L’utilisation de chacun des périphériques est détaillé dans la suite. Plus précisément, nous aborderons le
fonctionnement de chacun des périphériques de la figure 6.

4
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

Figure 6 – Diagramme de blocs - Hardware. Sont encadrés en rouge les périphérique utilisés pour le projet :
Un entrée GPIO pour le micro, une mémoire SDRAM, et un périphérique audio composée d’un CAN et d’un
amplificateur.

L’entrée GPIO de la carte connecté au micro


Comme indiqué sur la figure 3, les trois broches du micro Adafruit SPW2430 ont été branché aux connec-
teur J5 de l’extension. La pin de sortie du micro est donc la pin PF_9 relié au convertisseur analogique
numérique ADC3_IN7.

Mémoire SDRAM
La mémoire SDRAM utilisée (SDR SDRAM MT48LC4M32B2) est fabriqué par MICRON [4]. C’est une
mémoire 128 Mbits connecté à l’interface de la FMC (Flexible Memory Controller) du microcontrôleur.
Seulement les 16 bits de poids faibles (DQ0 à DQ15) sont utilisées pour communiquer avec l’interface FMC,
les 16 bits de poids fort sont mis à 0 par le biais de résistance de tirage Pull-down de 10k (il n’y a donc que
64 M-bits d’accessibles sur les 128 Mbits). C’est ce qui est illustré sur la figure 7.

5
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

Figure 7 – Schéma électrique de la mémoire SDRAM MT48LC4M32B2 connectée au microcontroleurs grâce


à l’interface FMC de celui-ci.

Périphérique AUDIO
Le périphérique audio WM8994ECS/R de CIRRUS [5] est composée de 4 DAC et 2 ADC. Nous n’avons
utilisé qu’un seul DAC communiquant avec le microcontroleur à l’aide d’une liaison série I2C via l’interface
SAI (Serial Audio Interface). La sortie du convertisseur est ensuite relié à un port stéréo Jack (CN10). Le
schéma électrique de ce périphérique est donnée sur la figure 8.

Figure 8 – Schéma électrique du périphérique audio WM8994ECS/R.

6
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

Ecran LCD
Nous avons également utilisé l’écran LCD (bibliothèque LCD_DISCO_F746NG) pour afficher nos noms,
ainsi que les valeurs numériques en aval de l’ADC et en amont du DAC, et les fréquences de la FFT. Le
schéma électrique de l’écran LCD, relié au micro-contrôleur par le biais d’une liaison série I2C, et d’un
contrôleur LCD-TFT (24 bits pour le RGB, puis d’autres bits permettant de contrôler la synchronisation
verticale, horizontale etc...)

Figure 9 – Schéma électrique de l’écran LCD relié au microcontrôleur.

3 Partie Software
Acquisition du son
Pour effectuer des transformations sur le son, nous allons stocker ses valeur par "paquets". Ces "pa-
quets" sont stockés dans le buffer AUDIO_BUFFER_IN (uint16) de la mémoire SDRAM. Le buffer AU-
DIO_BUFFER_OUT contient quant à lui le "paquet" qui doit être envoyé au convertisseur DAC. C’est sur
ces "paquets" que nous effectuerons les opérations temporelles ou fréquentielles.
La structure de la mémoire est donéne sur la figure 10 dans la SDRAM.

7
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

Figure 10 – Structure de la mémoire SDRAM utilisé, contenant les buffers AUDIO_BUFFER_IN et AU-
DIO_BUFFER_OUT.

# define A U D I O _ B L O C K _ SI Z E (( uint32_t ) 4096)


# define A UD IO _B U FF ER _I N SDRAM_DEVICE_ADDR /* adresse du bloc c o r r s p o n d a n t au CAN */
# define A U D I O _ B U F F E R _O U T ( S D R A M _ D E V I C E _ A D D R + ( A U D I O _ B L O C K _ SI Z E * 2) ) /* adresse du
c o r r e s p o n d a n t au CNA */
# define FFT_BUFFER_IN ( S D R A M _ D E V I C E _ A D D R + ( A U D I O _ B LO C K _ S I Z E * 4) ) /* adresse
c o r r e s p o n d a n t au signal t e m p o r e l e n r e g i s t r é sous en f l o t t a n t */
# define FFT_B UFFER_OU T ( S D R A M _ D E V I C E _ A D D R + ( A U D I O _ B L O C K _ S I Z E * 5) ) /* adresse des
la t r a n s f o r m é e de Fourier d ’ origine du signal */
# define F FT _B UF F ER _O UT 2 ( S D R A M _ D E V I C E _ A D D R + ( A U D I O _ B L O C K _ S I Z E * 6) ) /* adresse de
la t r a n s f o r m é e de Fourier modifi é e du signal */

// i n i t i a l i s a t i o n des p o i n t e u r s des buffers d ’ entr é e et de sortie


int16_t * pinput ;
pinput =( int16_t *) A UD I O_ BU FF E R_ IN ;
int16_t * poutput ;
poutput =( int16_t *) A U D I O _ B U F F E R _ OU T ;

Figure 11 – Définition des adresses mémoires correspondant aux différents buffers utilisés

Acquisition du son par le micro externe

La tension de sortie du micro est directement convertie sur 12 bits par l’ADC de la carte STM32F746 à
une fréquence d’échantillonnage de 30 Mhz [2] (Section 5.3.21). En pratique, pour réaliser l’acquisition de la
tension du micro, il faut indiquer dans le code que broche doit être sélectionnée pour réaliser la conversion.
Selon la documentation, le nom de la broche à indiquer dans le code est A2 (figure 12).

8
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

Figure 12 – Nom de la broche à connecter au convertisseur analogique

On réalise alors un code pour stocker les valeurs acquises par le micro dans le buffer d’entrée :

AnalogIn in ( A2 ) ;

while (1) {
for ( i =0; i < A U D I O _ B L O C K _ S I Z E ; i ++) {
(*( pinput + i ) ) = in . read () ; // a c q u i s i t i o n et r a n g e m e n t dans le buffer d ’ entr
ée
(*( poutput + i ) ) = in_value ; // envoie le son acquis au p é riph é rique AUDIO de sortie
}
}

Figure 13 – Acquisition du son par le micro

Cependant, nous n’entendons rien en sortie. Nous avons tenté un affichage de la valeur du son acquis sur
l’écran LCD, mais la valeur renvoyée est toujours ‘0’. Nous avons donc opté pour une autre solution.

Acquisition du son par le périphérique AUDIO

N’ayant pas réussi à faire fonctionner le micro externe, nous nous sommes rabattu sur le périphérique
AUDIO, plus simple d’utilisation. Il est initialisé comme suit.

# include " A U D I O _ D I S C O _ F 7 4 6 N G . h "

A U D I O _ D I S C O _ F 7 4 6 N G audio ;

/* Start a c q u i s i t i o n */
audio . IN_Record (( uint16_t *) AUDIO_BUFFER_IN , A U D I O _ B L O C K _ S I ZE ) ;

/* Start e m i s s i o n */
audio . O U T _ S e t A u d i o F r a m e S l o t ( C O D E C _ A U D I O F R A M E _ S L O T _ 0 2 ) ;
audio . OUT_Play (( uint16_t *) AUDIO_BUFFER_OUT , A U D I O _ B L O C K _ S I ZE * 2) ;

Figure 14 – Acquisition du son par le micro

9
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

Transformation temporelle du son enregistré


On utilise ensuite des variables différentes des buffers pour effectuer des transformations sur les échantillons
du son. Dans un premier temps, une modification sur les échantillons dans le domaine temporelle a été
effectuée.

Voix de robot par multiplication du signal par un triangle

En multipliant les échantillons par un signal triangulaire de fréquence fixe

/* Cr é ation du signal t r i a n g u l a i r e à une fr é quence fix é


Les e c h a n t i l l o n s du buffer de sortie sont alors divis é par d i v i s i o n I n t e n s i t e
int t e m p s _ t r i a n g l e = 10;
Boucle est incr é ment é à une fr é qeunce de 44 kHz */
if (( boucle % tem ps_trian gle ) == 0) {
d i v i s i o n I n t e n s i t e = d i v i s i o n I n t e n s i t e + sens ;
if ( d i v i s i o n I n t e n s i t e ==10)
{ sens = - 1;}
if ( d i v i s i o n I n t e n s i t e ==1)
{ sens = 1;}
}

Figure 15 – Modification temporelle - Multiplication du son par un signal triangulaire

Multiplication par 2 de la fréquence de la voix

Pour multiplier par 2 la fréquence de la voix en temporel, on prend une valeurs acquise sur 2 dans le
buffer d’entrée, et on les recopie les unes à la suite des autres dans le buffer de sortie, mais qui sera donc à
moitié plein. On remplit alors l’autre moitié du buffer de sortie en recopiant sa première moitié. Cela a du
sens pour de petites tailles des buffers, au vu des redondances temporelles contenues dans la voix. Le code
associé est le suivant :

for ( i =0 ,i < A U D I O _ B L O C K _ S I Z E /2 , i ++) {


*( poutput + i ) = *( pinput +2* i ) ;
*( poutput + i + A U DI O _ B L O C K _ S I Z E /2) = *( pinput +2* i ) ;
}

Figure 16 – Modification temporelle - Multiplication par 2 de la fréquence

Transformation du spectre du son enregistré


On utilise ensuite des variables différentes des buffers pour effectuer des transformations sur les échantillons
du son. Dans un premier temps, une modification sur les échantillons dans le domaine temporelle a été
effectuée.

Augmentation de la hauteur de la voix par translation fréquentielle

Les librairies arm_math.h et arm_const_structs.h nous ont permis de calculer les tranformée de Fourier
du son enregistré dans le buffer AUDIO_BUFFER_IN. Les caractéristiques du calcul de la FFT sont données
dans le code suivant :

10
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

a r m _ r f f t _ f a s t _ i n s t a n c e _ f 3 2 S ; // on importe les i n f o r m a t i o n s n é c e s s a i r e s au calcul de la fft


a r m _ r f f t _ f a s t _ i n i t _ f 3 2 (& S , A U D I O _ B L O C K _ S I Z E /2) ; // on calcule la FFT sur la moiti é du bloc
a r m _ r f f t _ f a s t _ f 3 2 (& S , fftIN , fftOUT ,0) ; // on r é alise la fft du bloc ’ fftIN ’ que l ’ on stocke
dans ’ fftOUT ’. Le bit de flag à ’0 ’ indique que l ’ on r é alise la t r a n s f o r m é e directe

/* on impl é mentera ici les op é rations sur la TF du signal */

a r m _ r f f t _ f a s t _ f 3 2 (& S , fftOUTmodifie , fftIN ,1) ; // on r é alise la fft du bloc ’ f f t O U T m o d i f i e ’ que


l ’ on stocke dans ’ fftIN ’. Le bit de flag à ’1 ’ indique que l ’ on r é alise la t r a n s f o r m é e
inverse

Figure 17 – Modification fréquentielle de la voix - Calcul de la FFT

Disposant de la FFT du signal, nous avons essayé de modifier le spectre en effectuant une translation
de celui-ci. C’est-à-dire que l’on réalise cette opération :
fsignal de sortie = fsignal d’entrée + α (1)
Le code suivant illustre la manière de procéder pour faire cette transposition en fréquence.

Transposition = 32; // ce param è tre p e r m e t t r a de r é gler la t r a n s p o s i t i o n en fr é quence ( plus


il est grand , plus la t r a n s p o s i t i o n est faible )

/* On s ’ occupe d ’ abord des fr é quences pr é sentes dans le premier quart du bloc ’ fftOUT ’, qui
c o r r e s p o n d e n t à la partie r é elle du spectre */

for ( i =0 ; i <( A U D I O _ B L O C K _S I Z E /8 - A U D I O _ B L O C K_ S I Z E / Transposition ) ; i ++) {


*( fftOUTmodifie + i + A U D I O _ B L OC K _ S I Z E / Transposition ) =*( fftOUT + i ) ;
}

/* Au - del à de la limite de Shannon , on " recule " les fr é quences */

for ( i =0 ; i <( A U D I O _ B L O C K _S I Z E /8 - A U D I O _ B L O C K_ S I Z E / Transposition ) ; i ++) {


*( fftOUTmodifie - i + A U D I O _ B L OC K _ S I Z E /4 - A U D I O _ B LO C K _ S I Z E / Transposition ) =*( fftOUT +
A U D I O _ B L O C K _ S IZ E /4 - i ) ;
}

/* on force ensuite à z é ro les fr é quences trop faibles */

for ( i =0 ; i < A U D I O _ B LO C K _ S I Z E / Transposition ; i ++) {


*( fftOUTmodifie + i ) =0;
}
for ( i =0 ; i < A U D I O _ B LO C K _ S I Z E / Transposition ; i ++) {
*( fftOUTmodifie - i + A U D I O _ B L OC K _ S I Z E /4) =0;
}

/* on s ’ occupe enfin du spectre c o m p l e x e */


for ( i =0 ; i <(( int ) ( A U D I O _ B L O C K _ S I Z E /8 - A U D I O _ B L O C K _ S I Z E / Transposition ) ) ; i ++) {
*( fftOUTmodifie + i + A U D I O _ B L OC K _ S I Z E / Transposition + A U D I O _ B L O C K _ S I Z E /4) =*( fftOUT +
A U D I O _ B L O C K _ S IZ E /4+ i ) ;
}
for ( i =0 ; i <(( int ) ( A U D I O _ B L O C K _ S I Z E /8 - A U D I O _ B L O C K _ S I Z E / Transposition ) ) ; i ++) {
*( fftOUTmodifie - i + A U D I O _ B L OC K _ S I Z E /2 - A U D I O _ B LO C K _ S I Z E / Transposition ) =*( fftOUT +
A U D I O _ B L O C K _ S IZ E /2 - i ) ;
}
for ( i =0 ; i < A U D I O _ B LO C K _ S I Z E / Transposition ; i ++) {
*( fftOUTmodifie + A U D I O _ B L O C K _ S I Z E /2+ i ) =0;
}
for ( i =0 ; i < A U D I O _ B LO C K _ S I Z E / Transposition ; i ++) {
*( fftOUTmodifie - i + A U D I O _ B L OC K _ S I Z E /4+ A U D I O _ B LO C K _ S I Z E /2) =0;
}

Figure 18 – Modification fréquentielle de la voix - Trnasposition en fréquence

Affichage sur l’écran LCD


Nous avons utilisé un exemple fournit par mbed pour controler l’écran lcd, ainsi que la fonction sprintf. Des
fonctions déja écrites présentes dans les librairies LCD_DISCO_F746NG.lib et BSP_DISCO_F746NG.lib

11
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

permettent d’insérer du texte ou des formes géométrique sur l’écran aux positions désirées. On utilise ces
librairies pour représenter les spectres des différents signaux sur l’écran LCD :

lcd . Clear ( L CD _C OL O R_ BL AC K ) ; // on r é i n i t i a l i s e l ’é cran à chaque nouvel a f f i c h a g e


for ( i =0; i < A U D I O _ B L O C K _ S I Z E /2; i ++) {
j = ( int ) i /10;
lcd . DrawPixel (j , max (272 - abs (*( fftOUT + i ) ) /8000 ,1) , L CD _C OL O R_ WH IT E ) ; // sur la moiti é
gauche de l ’é cran LCD , on affiche le spectre du signal d ’ origine
}
for ( i =0; i < A U D I O _ B L O C K _ S I Z E /2; i ++) {
j = ( int ) i /10;
lcd . DrawPixel ( j + A U D IO _ B L O C K _ S I Z E /20 + 10 , max (271 - abs (*( fftOUT2 + i ) ) /8000 ,1) ,
L CD _C OL O R_ WH IT E ) ;
} // sur la moiti é droite de l ’é cran LCD , on affiche le spectre du signal modifi é
}

Figure 19 – Affichage sur l’écran LCD

La figure 20 montre un exemple de l’affichage obtenu.

Figure 20 – Exemple d’affichage sur l’écran LCD.

On trace alors les spectres pour différentes valeurs du paramètre T ransposition sur les figures 21, 22, 23
et 24.

Figure 21 – Déformation du spectre pour Figure 22 – Déformation du spectre pour


T ransposition = 64. T ransposition = 32.

12
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

Figure 24 – Déformation du spectre pour


Figure 23 – Déformation du spectre pour T ransposition = 8.
T ransposition = 16.

Les spectres observés correspondent à l’opération voulue. Cependant, le résultat sonore est désagréable :
nous pensons que l’opération réalisée n’est pas correcte : il faudrait plutôt effectuer une multiplication de
la fréquence du signal plutôt qu’une translation.

Augmentation de la hauteur de la voix par multiplication fréquentielle


On veut donc maintenant réalisaer l’opération :

fsignal de sortie = αfsignal d’entrée (2)

On utilise de nouveau un T ransposition réglant le coefficient multiplicatif. Voici le code permettant de réaliser
cette multiplication :

Transposition = 2; // pour une m u l t i p l i c a t i o n de la fr é quence par 2

for ( i =0 ; i < A U D I O _ B LO C K _ S I Z E / Transposition /8 ; i ++) {

for ( j = Transposition * i ;j < Transposition *( i +1) ; j ++) {

/* Partie r é elle du spectre */

// partie p o s i t i v e
*( fftOUT2 + j ) =*( fftOUT + i ) ;
// partie n é gative
*( fftOUT2 - j + A U DI O _ B L O C K _ S I Z E /4) =*( fftOUT - i + A U D I O _ B L O C K _ SI Z E /4) ;

/* Partie i m a g i n a i r e du spectre */

// partie p o s i t i v e
*( fftOUT2 + j + A U DI O _ B L O C K _ S I Z E /4) =*( fftOUT + i + A U D I O _ B L O C K _ SI Z E /4) ;
// partie n é gative
*( fftOUT2 - j + A U DI O _ B L O C K _ S I Z E /2) =*( fftOUT - i + A U D I O _ B L O C K _ SI Z E /2) ;
}
}

Figure 25 – Modification fréquentielle de la voix - Trnasposition en fréquence

Les résultats sont exposés sur les figures 26, 27, 28 et 29.

13
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

Figure 26 – Déformation du spectre pour Figure 27 – Déformation du spectre pour


T ransposition = 1. T ransposition = 2.

Figure 28 – Déformation du spectre pour Figure 29 – Déformation du spectre pour


T ransposition = 3. T ransposition = 4.

Le rendu est légèrement meilleur, notamment pour des transpositions en fréquence élevées (on distingue
mieux la voix lorsqu’elle est aiguë). Il reste des améliorations à concevoir.

4 Pistes d’améliorations
La qualité du son renvoyé par la carte est loin d’être satisfaisant. Pour corriger ces problèmes, on pourrait
envisager de :
— traiter le signal par fenêtre glissante plutôt que par paquets
— mettre au point des techniques de calcul plus efficaces (notamment ne pas avoir à attendre la fin de
toute la conversion pour commencer les calculs, ce qui rejoint le traitement par fenêtre glissante)

14
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

Conclusion
Conclusion technique
Les principales difficultées rencontrées sont les suivantes :

1. LA conversion des uint16 en contenues dans le BUFFER_AUDIO_IN en float, afin de calculer la FFT
des échantillons à été une difficulté vite résolue puisqu’en C il est possible de convertir dirrectement
une variable lors de sa première allocation mémoire.
2. L’utilisation de la bibliothèque arm_math pour calculer la transformée de Fourrier des échantillons
du BUFFER_AUDIO_IN. en effet nous ne savions pas comment était stocké le résultat de la FFT,
et si le calcul de la FFT inverse donnait le bon résultat. Pour résoudre ce problème, nous avons affiché
la FFT sur l’écran LCD, et nous avons utilisés un son provenant d’un diapason avec une harmonique
à la fréquence 440Hz pour tester les différentes fonctions liées au calcul de la FFT.
3. Nous avons utilisé quelques bibliothèques ainsi que quelques parties de code tirés d’exemples fournis
par mbed, ce qui rend parfois compliqué la compréhension clair de la gestion de l’acquisition et de
la mémorisation des échantillons. Par exemple, la convertion analogique-numérique se fait en deux
parties initialement : on attendait que la moitié du BUFFER_AUDIO_IN soit remplie avant de le
copier dans BUFFER_AUDIO_OUT par exemple. Notre hypothèse pour expliquer ce phénomène est
la suivante : afin de ne pas "louper" l’acquisition de certains échantillons en entrée du convertisseur, il
ne faut pas attendre que la totalité du BUFFER_AUDIO_IN soit remplie avant de le copier dans le
BUFFER_AUDIO_OUT.

Conclusion professionnelle
1. Une bonne compréhension du hardware est indispensable avant de se lancer dans la programmation.
En effet, les types de connexions entre les périphériques et la carte, la gestion de la mémoire, les ca-
ractéristiques techniques de la carte (présence de certains périphériques, type d’informations échangés
...) conditionne la manière de programmer la carte. Une bonne lecture du manuel utilisateur [1] est
donc indispensable.
2. L’utilisation de mbed facilite énormément le travail de programation : la possibilité de partager son
code, l’accès à des exemples précis, et la rapidité avec laquelle le code est téléversé sur la carte permet
une évolution rapide du projet.
3. Parmi les connaissances et compétences acquises, nous pouvons citer la gestion physique de la mémoire
(SDRAM), l’utilisation des convertisseurs ADC et DAC pour le son, et le calcul de la FFT d’un son
en vu de sa modification.
4. Finalement, nous avons appris des exemples simple de modification de la voix en temporelle et en
fréquentielle.

15
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

Table des figures


1 Schéma de principe de l’utilisation de la carte pour la modification temps réel de la voix. . . 1
2 Schéma synoptique du modificateur de voix. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3 Description visuelle de la carte de développement utilisée et de son extension. . . . . . . . . . 3
4 Schéma de cablage de l’extension de la carte STM32F746. . . . . . . . . . . . . . . . . . . . . 3
5 Micro utilisée pour l’acquisition de la voix. Adafruit Silicon MEMS Microphone Breakout -
SPW2430. Seuls les broches +3V , GND et la sortie AC (sortie du micro) ont été utilisées. . . 4
6 Diagramme de blocs - Hardware. Sont encadrés en rouge les périphérique utilisés pour le projet :
Un entrée GPIO pour le micro, une mémoire SDRAM, et un périphérique audio composée d’un
CAN et d’un amplificateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
7 Schéma électrique de la mémoire SDRAM MT48LC4M32B2 connectée au microcontroleurs
grâce à l’interface FMC de celui-ci. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
8 Schéma électrique du périphérique audio WM8994ECS/R. . . . . . . . . . . . . . . . . . . . . 6
9 Schéma électrique de l’écran LCD relié au microcontrôleur. . . . . . . . . . . . . . . . . . . . 7
10 Structure de la mémoire SDRAM utilisé, contenant les buffers AUDIO_BUFFER_IN et AU-
DIO_BUFFER_OUT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
11 Définition des adresses mémoires correspondant aux différents buffers utilisés . . . . . . . . . 8
12 Nom de la broche à connecter au convertisseur analogique . . . . . . . . . . . . . . . . . . . . 9
13 Acquisition du son par le micro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
14 Acquisition du son par le micro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
15 Modification temporelle - Multiplication du son par un signal triangulaire . . . . . . . . . . . 10
16 Modification temporelle - Multiplication par 2 de la fréquence . . . . . . . . . . . . . . . . . . 10
17 Modification fréquentielle de la voix - Calcul de la FFT . . . . . . . . . . . . . . . . . . . . . 11
18 Modification fréquentielle de la voix - Trnasposition en fréquence . . . . . . . . . . . . . . . . 11
19 Affichage sur l’écran LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
20 Exemple d’affichage sur l’écran LCD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
21 Déformation du spectre pour T ransposition = 64. . . . . . . . . . . . . . . . . . . . . . . . . 12
22 Déformation du spectre pour T ransposition = 32. . . . . . . . . . . . . . . . . . . . . . . . . 12
23 Déformation du spectre pour T ransposition = 16. . . . . . . . . . . . . . . . . . . . . . . . . 13
24 Déformation du spectre pour T ransposition = 8. . . . . . . . . . . . . . . . . . . . . . . . . . 13
25 Modification fréquentielle de la voix - Trnasposition en fréquence . . . . . . . . . . . . . . . . 13
26 Déformation du spectre pour T ransposition = 1. . . . . . . . . . . . . . . . . . . . . . . . . . 14
27 Déformation du spectre pour T ransposition = 2. . . . . . . . . . . . . . . . . . . . . . . . . . 14
28 Déformation du spectre pour T ransposition = 3. . . . . . . . . . . . . . . . . . . . . . . . . . 14
29 Déformation du spectre pour T ransposition = 4. . . . . . . . . . . . . . . . . . . . . . . . . . 14

16
ENS Paris-Saclay UE II Changement de voix
2018-2019 Projet final UE II

Références
[1] STMicroelectronics, User Manual pin connection, Discovery kit for STM32F7 Series with STM32F746NG
MCU https://www.st.com/content/ccc/resource/technical/document/user_manual/f0/14/
c1/b9/95/6d/40/4d/DM00190424.pdf/files/DM00190424.pdf/jcr:content/translations/en.
DM00190424.pdf
[2] STMicroelectronis, Datasheet STM32F746 https://www.st.com/resource/en/datasheet/
stm32f746ng.pdf
[3] Adafruit, Datasheet Adafruit-SPW2430-PCB https://github.com/adafruit/Adafruit-SPW2430-PCB
[4] MICRON, Datasheet SDR SDRAM MT48LC4M32B2 https://www.mouser.fr/datasheet/2/671/
128mb_x32_sdram-1282359.pdf
[5] CIRRUS LOGIC , Multi-channel Audio Hub CODEC for Smartphones https://www.mouser.fr/
datasheet/2/76/WM8994_v4.5-1141776.pdf

17

Vous aimerez peut-être aussi