Le pub des programmeurs
- 1 927 réponses
- 117 participants
- 123 806 vues
- 130 followers
Anonyme
ClockworkOi!
J'ai déja commencé par rechercher "analyse temps fréquences" ce qui m'a permis (ca va vous permettre d'évaluer mon niveau dans le domaine ) déja de comprendre plus de chose.
Mon problème en fait c'est que je comprends pas (du tout) comment fonctionne une FFT. Alors pour les MFCC...
Hier(cette nuit) je suis tombé sur la page que voici http://www.dspguide.com/ch12/1.htm qui explique le fonctionnement de la FFT, et... ca ne me fait que me poser plus de question
En fait je comprends que j'ai un signal discret. Ensuite j'applique à celui-ci un pre-emphasized (déja rien que ce filtre reste assez mystérieux). Ensuite je découpe mon signal en fenètre (chacune décallé d'un certain offset a chaque fois,qui n'est pas égale à la taille de la fenètre).
A partir de laje suis totalement perdu : la fft à une taille, qui représente quelque chose... je suppose que c'est la résolution de mon spectre? mais sur la page cité plus haut, quand il détail l'algo, ils disent qu'a partir d'un signal de N éléments on obtient alors une FFT de N fréquences? (j'ais rien compris?).
Citation : apres avoir teste chaque module separement : filtrage, FFT, filtrage inverse, prediction lineaire, etc...
Voila, la je comprends pas le role de chaque phase...
En fait pour résumer ma question : ca fait quoi une FFT?
Citation : Deja, pourquoi recoder en java un truc qui existe en C ? Tu peux utiliser JNI, non ?
Il me faut du code entièrement java... de plus je suis pas sur de pouvoir utiliser du code GNU ou autre pour se projet.
Merci encore! Je ne veux pas vous embetter avec ca, juste trouver la piste qui me permetra de mieux m'en sortir. Merci!
Pov Gabou
Citation :
apres avoir teste chaque module separement : filtrage, FFT, filtrage inverse, prediction lineaire, etc...
Ca me parait tendu de coder un truc que tu comprends pas, quand meme... Les MFCC sont une representation frequemment utilisee en parole (reconnaissance automatique de la parole par exemple), et repose sur un model source filtre de la parole: tu fais du bruit dans la gorge,le conduit vocal (comprendre a l'interieur de ta gorge) fait office de filtre, et comme tu peux le modifier lfacilement (meme si tu t'en rend pas compte), tu peux modifier les sons qui en sortent: a, e, i, o, u. La prediction lineaire est une des phases qui modelise le conduit vocal.
Le C de MFCC veut dire cepstral, cad que tu prends ton signal, tu calcules le spectre, puis tu calcules le log, puis tu prends la FFT inverse pour retrouver en temporel. L'idee est que ton signal de parole etant un truc filtre, en spectral, filtrage = multiplication, donc avec le log, ca devient addition, et donc en esperant que ca se recouvre pas, tu as une partie du cepstre qui represente l'impulsion glottal (le bruit d'excitation), et l'autre l'enveloppe spectrale, qui permet justement de faire la difference entre a, e, i, etc...
En fait, les MFCC sont une representation optimisee des principes ci dessus.
Citation :
Il me faut du code entièrement java... de plus je suis pas sur de pouvoir utiliser du code GNU ou autre pour se projet.
On t'a donne un projet d'info bidon, c'est ca ? Pour la FFT, il y a fftw, qui n'est pas GPL, mais plus ou moins MIT (ie BSD) si je me souviens bien, je suis plus sur en fait.
ClockworkOi!
oui effectivement c'est dur d'utiliser des algos que l'on ne pige pas
je fais juste de l'identification vocal, pas de reconnaissance : je prends tout les vecteurs composé des coeficient cepstraux, sans respecté l'ordre, et je crée un modèle avec un GMM.
Bon je continue mes rechercher avec toutes ces informations J'ai déja une bien meilleur vue d'ensemble de la chose maintenant
Merci! Merci!
jujupauty
Jul
jujupauty
Ca t'aidera peut être
Jul
Pov Gabou
Pour les GMM, je fais un peu de pub, mon module pyem pour python marche bien maintenant, et est relativement utilisable (comprendre peut traiter des dizaines de milliers de samples en plusieurs dizaines de dimensions en temps raisonnable, ie quelque minutes sur des machines pas trop vieilles) tant qu'on se cantonne a des modeles diagonaux:
http://svn.scipy.org/svn/scipy/trunk/Lib/sandbox/pyem/
Il y a aussi le BIC pour le clustering automatique, une implementation initiale de EM recursif, et bientot j'espere des methodes de regularisation pour les matrices de covariance.
Les figures suivantes sont toutes obtenues en une 20ne de lignes de code python
ClockworkOi!
Mais justement c'est pour un (petit ) taf.
La partie GMM fonctionne (j'ais comparé avec torch pour debugger, le code le plus attroce du monde... si j'avais su j'aurais regarder le tiens gabou).
Le liens sur les fft est pas mal du tout!! J'ai toujours eu l'impression de passer à coté de quelques choses...
Pov Gabou
Citation :
(j'ais comparé avec torch pour debugger, le code le plus attroce du monde... si j'avais su j'aurais regarder le tiens gabou).
Tu m'etonnes, du C++ de chercheurs, c'est le pire code du monde. Meme le C++ 'normal' a cote est joli. T'aurais du regarde du cote des codes matlab pour les GMM, quand meme.
Pour les MFCC, tu peux utiliser ce code comme reference pour comparer:
https://labrosa.ee.columbia.edu/matlab/rastamat/mfccs.html
Mais si c'est pour un taf, je comprends vraiment pas l'interet de tout coder en java, surtout la FFT, c'est stupide. Il y a le module de Soras que tu peux utiliser pour de la FFT, qui est rapide pour des puissances de 2, et est utilisable dans du commercial sans cout supplementaire.
batman14
Citation :
Pour les GMM, je fais un peu de pub, mon module pyem pour python marche bien maintenant, et est relativement utilisable.
Man google -> Je veux savoir ce qu'est un GMM.
Je me souviens avoir vu un tutorial en flsah sur le site de NI, mais je ne sais plus si il faut posséder un produit de chez eux ou pas...je vérifie.
Edit : non, en fait y'a pas besoin de s'enregistrer, mais il n'explique rien de bien passionnant sur le fonctionnement de l'algorithme. Ils font la promo de labview, leur soft d'analyse, et nous explique plutot comment régler un soft procédant à une fft, que commment la réaliser.
Mais bon des fois, avoir ue vue utilisateur d'abord, c'est quand même pas mal !
http://soundcloud.com/bat-manson
ClockworkOi!
Citation : Tu m'etonnes, du C++ de chercheurs, c'est le pire code du monde.
un condensé de ce que l'on troue dans torch ;)
float *mean_acc_i = mean_acc[i];
float *x = inputs->data;
for(julie = 0; julie < n; julie++) {
*mean_acc_i++ += *x * *x++;
}
float *mean_i = mean[i];
float *weight_acc_i = weight_acc[i];
mean_acc_i = mean_acc[i]
for(andrea = 0; andrea < n; andrea++, weight_acc_i++)
*mean++ = *mean_acc_i++ / *weight_acc_i++
(j'ai écris n'importe quoi, seul la syntaxe sert d'exemple)
- < Liste des sujets
- Charte