Vous êtes sur la page 1sur 5

TP Parole Reconnaissance de mots isols

But du TP
Le but de ce TP est de raliser un classieur de mots parls. Pour cela on distingue trois grandes tapes : Lacquisition des signaux qui constitueront les base de donnes audio Les pr-traitement des signaux Le codage des mots La reconnaissance On travaillera sur 10 15 classes de mots au choix. Il sagira donc de construire un systme capable de reconnatre un mot parmi 10 ou 15 mots possibles. De ce point de vue le classier se range dans la catgorie des reconnaisseurs de parole monolocuteur et vocabulaire limit.

1/ Prise en main de la boite outils


Le matlab path
Ranger la boite outils dans un rpertoire puis dcompresser le chier rdf_3.1.13.zip. Pour vrier le bon fonctionnement de linstallation, taper la commande help rdf qui doit acher la liste des fonctions de la boite outils. Les programmes devront tre rangs dans un autre rpertoire pour ne pas tre mlangs avec les fonctions de la boite outils. La commande help nom_fonction permet dacher laide sur la fonction nom_fonction.

Acquisition
La fonction audioget permet de raliser lchantillonnage de signaux audio en utilisant un microcasque. Attention a bien spcier le format de gnration du chier (.mat ou .wav). Il ne sut pas de nommer un chier avec lextension .wav pour quil soit un chier au format .wav. Pour la suite du TP on demande dutiliser uniquement le format .wav.

Achages
Les achages seectuent avec la fonction plot de matlab. Cette fonction ne connat pas la nature des signaux acher. Il faut donc spcier les axes correctement pour avoir des achages qui aient un sens physique. La syntaxe suivante ache un signal avec en abscisse le numro dchantillon : plot(Signal); Echelle des temps Pour reprsenter correctement laxe des temps il faut connatre la frquence dchantillonnage. Soit par exemple Fe = 22050Hz . La priode dchantillonnage est le temps sparant deux chantillons successifs. Il est linverse de la priode : Te = 1/Fe , soit 1/22050s. Si le nombre total dchantillons est N , le signal aura une dure totale de N Te . Lchelle des temps stendra donc

de 0 secondes N Te = N/Fe secondes. Pour reprsenter cela sur le graphe, on construit un vecteur temps de N chantillons : N = length(Signal); t = 0:(N -1); Pour passer lchelle des temps on crit : Fe = 22050; Te = 1/Fe; t = t * T_e ; Il reste acher : plot(t, Signal); Echelle des frquences Le calcul du module du spectre dun signal seectue en utilisant la fonction FFT de matlab pour obtenir le spectre et de la fonction ABS an de calculer le module : SignalF = abs(fft(Signal)); plot(SignalF); Pour reprsenter laxe des frquences, on dni un vecteur de frquences, en sachant que la FFT eectue le calcul de la frquence 0 la frquence Fe : f = 0:N-1; % nombre dcrantillons en frquence (le mme quen temps f = f*F_e/(N-1); % passage en chelle frquences plot(f,SignalF); % affichage

2/ Pr-traitements
On dispose de la fonction SPEECHGET pour charger un chier .wav (un mot par chier). Le signal de parole doit subir avant codage les pr-traitements suivants : Retrait des zones de silence, dcoupage en trames, praccentuation et fenetrage de Hamming des trames (fonctions SPEECHGET, SIGPREACC et HAMMING. Suite ces traitements, on rcupre un ensemble de signaux, rangs dans un tableau, et le nombre de signaux correspond au nombre de trames composant le mot.

2.1/ Seuil de dtection du signal de parole


La fonction SPEECHGET sutilise de la faon suivante : [trames sigcut signal] = speechget(mot.wav, 256, 128, 0.01); Dans cette exemple, le signal au format .wav rang dans le chier mot.wav est segment en trames de 256 chantillons, entrelaces de 128 chantillons (en gnral le nombre dchantillons de la trame divis par deux) et un seuil de 0.01 est appliqu pour sparer les zones de silence de part et dautre. La fonction retourne trois signaux : trames est une matrice qui comprend toutes les trames les unes sous les autres (ranges en ligne). Sa dimension est donc de nb_trame, 256, o nb_trame dsigne le nombre de trames extraites. Ce nombre ne peut videmment pas tre connu lavance. sigcut est le signal dans lequel les zones dtectes comme du silence par la fonction ont t remplaces par des 0 ; 2

signal est le signal dorigine sans pr-traitements Voici un exemple de traitement qui permet dobserver le signal dorigine et le signal aprs segmentation des zones de silence : close all; clear all; [Trames, CutSignal, Signal] = speechget(deux.wav, 256, 128, 0.05);sound(Signal, 22050); sound(CutSignal, 22050); subplot(211); plot(Signal); subplot(212); plot(CutSignal); Tester la fonction SPEECHGET sur un signal de parole pour plusieurs valeurs du seuil de dtection. On conservera cette valeur de seuil pour la constitution des bases dapprentissage.

2.2/ Pr-traitement des signaux


Les fonctions SIGPREACC et HAMMING ralisent respectivement la praccentuation et le fentrage de lensemble des trames donnes en argument. Typiquement, en reprenant lexemple prcdent : TramesPracc = sigpreacc(Trames, 0.97); TramesPraccH = sighamming(TramesTracc); Appliquer aux trames extraites la question prcdente les pr-traitements de praccentuation et de Hamming. En choisissant une trame comportant susamment dnergie, comparer sur le plan temporel et sur le plan spectral limpact de ces traitements (Visualiser le module du spectre du signal sur une trame avant et aprs les prtraitements). Observer la structure formantique des signaux voiss. Pour acher la dixime trame, on crira : plot(TramesPraccH(10,:));

3/ Codage
3.1/ Codage des trames
La boite outils dispose dun certain nombre de fonctions de codage : CODLPC qui eectue un codage LPC (Linear Predictive Coding) des trames de parole ; CODLPCC qui eectue un codage LPCC des trames de parole (une extension du code prcdent qui permet destimer les coecients cepstraux partir des coecients LPC ; CODMFCC qui eectue un codage MFCC (Mel Frequency Cepstrum Coding) des trames de parole. Ces fonctions ncessitent de spcier en argument le nombre de coecients gnrer. La fonction CODMFCC ncessite galement de spcier la frquence dchantillonnage. Par ailleurs, partir du codage, les signaux doivent tre rangs en colonnes et non plus en ligne. Les lignes suivantes donnent des exemples de codage des trames de paroles gnres plus haut (noter lapostrophe permettant de transposer les matrices pour passer les signaux en colonnes : codelpc = CODLPC(TramesPraccH, 12); codelpcc = CODLPCC(TramesPraccH, 12); codemfcc = CODMFCC(TramesPraccH, 12, 16000); Complter les programmes prcdents en ajoutant ltape de codage comme dcrit. 3

3.2/ Evolution des codes dans le temps


An de se rendre compte de la corrlation des coecients de code avec lvolution du conduit vocal, reprsenter lvolution dans le temps des coecients de codage pour chacun des codes LPC, LPCC, MFCC. Pour cela on slectionne une trame de coecients, comme plus haut pour les pr-traitements. Lexemple suivant montre lvolution dans le temps du premier coecients de code : plot(codelpc(1,:)); Pour acher lvolution de lensemble des codes, attention penser acher la transpose de la matrice de code : plot(codelpc); Observer lvolution dans le temps dun signal de parole quelconque pour plusieurs valeurs de la taille des trames : 32, 64, 128, 256, 512, et 1024. Quobserve-t-on ? Enregistrer un signal de parole pour lequel le conduit vocal reste peu prs stationnaire (AAAAAAA.... par exemple). Enregistrer un deuxime signal pour lequel le conduit vocal volue (BONJOUR par exemple). Observer lvolution des coecients dans les deux cas de gure. Que peut-on en conclure ? Coder le signal BONJOUR avec 32 coecients de codes et observer lvolution des 32 codes. Sont-ils tous reprsentatifs de lvolution du signal ? Expliquer pourquoi.

3/ Classication
3.1/ Construction des bases
Enregistrer deux bases de 10 mots (20 chiers). La premire sera la base des modles de rfrence pour lalgorithme de classication DTW et la deuxime la base de test. On utilisera par exemple ref1.wav, ref2.wav, ..., ref10.wav et tst1.wav, tst2.wav, ... tst10.wav.

3.2/ Codage des bases


Ecrire deux fonctions CODEREF( tramesize, offset, ncoeff, code, ...) et CODETST( tramesize, offset, ncoeff, code, ...) permettant de coder lensemble des mots des bases de rfrence et de test en utilisant les paramtres de codage donns en argument (taille des trames, entrelacement, nombre de coecients de codage, mthode de codage, ...). Largument code pourra tre une chane de caractre spciant la mthode de codage utiliser (LPC, LPCC, MFCC, ...). Les fonctions retourneront les jeux de code de tous les mots rangs dans un tableau de cellules. Utiliser les tableaux de cellules en Matlab. Les tableaux de cellules permettent de ranger des lments de type dirent dans le mme tableau. La syntaxe est la suivante : var{1} = 1:100; % on range un tableau de 100 lments dans la premire cellule var{2} = bonjour; % on range une chane de caractres dans la deuxime cellule var{3} = 1.9; % on range un rel dans la troisime cellule... ... Pour accder aux lments du tableau de cellules : disp (var{3}) ; % affichage de la chane de caractres valeur = var{1}(8); % affectation de la huitime valeur du tableau de 100 lments ... 4

Construire des chanes de caractres. Pour automatiser le traitement on aura intrt utiliser la concatnation de chanes de caractres en procdant ainsi : for i=1:10 filename = [ref num2str(i) .wav ]; ... = speechget(num2str, ...); ... end;

3.3/ Reconnaissance par lalgorithme DTW


La fonction dtw de la boite outils permet de calculer la distance DTW (Dynamic Time Warping) entre deux matrices de code (LPC, MFCC, ...) de taille dirente (les mots comportent tous un nombre de trames dirent). Lalgorithme prendra la forme suivante : for i=1:10 for j=1:10 codetest = ... % Code du i-me mot tester coderef = ... % Code du j-me mot de rfrence d(i,j) = dtw(codetest, coderef); % Calcul de la distance DTW end; end; A lissue, la variable d contient lensemble des distances entre les mots de test et les mots de la base de rfrence. Ecrire le programme permettant de classer lensemble des mots de la base de test en utilisant un algorithme de type 1-PPV avec la distance DTW. On commencera en codant les trames sur 8 coecients. Observer la matrice des distances d obtenue ; Tester le programme en testant les mots de rfrence avec eux-mmes. Observer la matrice des distance d obtenue. Visualiser les classes proposes par lalgorithme en recherchant les minima des lignes de la matrice d : [dmin, classe] = min(d); disp(d); La fonction score de la boite outils permet de dterminer le nombre dexemples bien classs relativement au nombre total dexemples : taux = score(classe, 1:10); disp(taux); Comparer les scores lorsque lon diminue ou augmente la dimension du codage (8,12,16, par exemple). Etudier de la mme faon linuence de la taille des trames. Tester les dirents codages (LPC, LPCC, MFCC) Tester un locuteur pour la base de test dirent de celui pour la base de rfrence.