Le pub des programmeurs
- 1 927 réponses
- 117 participants
- 131 708 vues
- 130 followers

Anonyme



Pov Gabou

Citation :
'ai pas compris ça par contre. 40 dB...humm. En me présentant un grand nombre, tu me signifie qu'il y a un grand écart entre les deux puissances que tu compares.
A chaque etape du MP, tu prends l'atome qui maximise la correlation avec le signal de depart, puis tu recommences sur le residuel. Donc les 40 dB, ca veut dire que le residual est 40 dB plus faible que le signal original, avec seulement 10 atomes.

Dr Pouet



bigbill

Citation : A chaque etape du MP, tu prends l'atome qui maximise la correlation avec le signal de depart, puis tu recommences sur le residuel. Donc les 40 dB, ca veut dire que le residual est 40 dB plus faible que le signal original, avec seulement 10 atomes.
Oui voila, c'est exactement ce que ça veut dire.Au départ de l'algo, ton résiduel est le signal de départ. Puis l'algo grignotte le signal et t'as un principe de vases communicants entre l'énergie du résiduel et l'énergie des atomes. A l'étape n, tu as n atomes et les n corrélations associées d'une part, et un résiduel Rn d'autre part. La décomposition est terminée lorsque ton résiduel est du silence (plus exactement, du silence après reconversion en échantillons entiers, vu que tu travailles en flottants).
A chaque étape, tu peux arrêter l'algo et t'amuser à écouter le signal constitué de la somme des atomes trouvés pondérée par les corrélations, ou bien à écouter le résiduel.
Je me rends compte que j'ai pas été très clair dans mon exemple de compression. L'index n'est pas une position relative à l'énumération de tous les signaux possibles, ce qui n'aurait pas d'intérêt. C'est un nuplet de paramètres qui décrivent la structure du dictionnaire et le résultat de la poursuite sur ce dictionnaire. Il ne s'agit pas non plus de stocker tous les signaux possibles.
Autre exemple:
1 minute de signal mono 16 bits 44.1kHz => 5.04MB, soit 4.2e7 bits
On suppose que le dictionnaire est constitué de sinusoides tronquées. On peut paramétrer ce dictionnaire avec les grandeurs:
. fréquence -> flottant 64 bits
. position du début du support -> entier 32 bits
. phase en vigueur en début du support -> flottant 64 bits
. longueur du support -> entier 32 bits
(en comptant large pour le stockage)
et de plus:
. corrélation -> flottant 64 bits
La connaissance de ce quintuplet identifie de manière unique une sinusoide tronquée parmi toutes celles possibles.
Boîte noire de synthèse:
quintuplet -> signal : finger in ze nose
Boîte noire d'analyse:
sinusoide tronquée inconnue de 1 minute -> quintuplet : MP
Ce que je voulais dire c'est que l'ensemble de ces deux boîtes noires forme un codec intéressant, vu que 64+32+64+32+64 = 256 << 4.2e7 !
Et sans pertes

Bon évidemment le dictionnaire est gigantesque (tout en étant une infime partie du dictionnaire exhaustif) et on peut difficilement utiliser ce codec pour autre chose que.. des sinusoides tronquées

En espérant avoir été plus clair..

batman14

Citation :
A chaque etape du MP, tu prends l'atome qui maximise la correlation avec le signal de depart, puis tu recommences sur le residuel. Donc les 40 dB, ca veut dire que le residual est 40 dB plus faible que le signal original, avec seulement 10 atomes.
+
Citation :
Bon évidemment le dictionnaire est gigantesque (tout en étant une infime partie du dictionnaire exhaustif) et on peut difficilement utiliser ce codec pour autre chose que.. des sinusoides tronquées
En espérant avoir été plus clair..
=
J'ai compris ! Merci !
Je vais regarder cette fameuse fonction FoF pour le coup.
Par contre pour l'intérêt en compression, le seul réel + que peut apporter une décomposition sur un ensemble générateur redondant est pour une compression avec perte mais sur un dico adapté.
Cela me fait un peu penser aux algo type Huffman in-line où on édite le dictionnaire au fur et à mesure que l'on compresse : on se rajoute les termes intéressants dans notre dico au cours de l'analyse.
Parce que l'analyse via MP, semble avoir des avantages (le côté glouton en est un, selon moi) mais je n'ai pas encore bien en tête comment exploiter ce type de décomposition...
Il faut que je regarde de près comment on détermine dans le Matching pursuit quel est l'index de la prochaine fonction, car cela présuppose une structure interne du dico. Je sens une orthogonalité ou une pseudo orthogonalité...
Car si la condition qui structure le dico est faible, y'a moyen d'imaginer en analyse synthèse des choses rigolotes !
Je prends un dictionnaire avec le MP de fonctions exotiques, type les sons de base d'une 808, et que je fais tourner l'algo MP sur une boucle de...808, je devrais obtenir des résultats en synthèse non ?
http://soundcloud.com/bat-manson

bigbill

Citation : Cela me fait un peu penser aux algo type Huffman in-line où on édite le dictionnaire au fur et à mesure que l'on compresse : on se rajoute les termes intéressants dans notre dico au cours de l'analyse.
Ah bon? Ce que tu décris me fait penser à Lempel-Ziv, mais ça fait longtemps que j'ai pas touché à des algos de compression, je suis un peu à côté de la plaque. Si j'ai évoqué la compression dans le premier exemple, c'est juste pour faire le rapprochement entre compression efficace et parcimonie de poursuite. Et le 2ème exemple n'était là que pour clarifier, vu que de toute façon faire de la compression de cette manière ne sera possible que dans très très longtemps, manifestement.Attention car dans le cas de MP le dictionnaire est absolument statique. Ce que tu suggères, rendre le dico adaptatif, est intéressant mais c'est à un niveau supérieur dans l'adaptabilité, et j'ai encore jamais vu ça. La seule chose qui s'en rapproche, c'est l'idée qui consiste à laisser tomber le dictionnaire de départ en cours de route et de basculer sur un dictionnaire d'ondelettes. Ceci se justifie à cause d'un gros désagrément de MP: le comportement asymptotique. Faut voir que lorsque MP a fini de grignoter toutes les structures temps/fréquence bien localisées, il s'attaque au seuil de bruit et ça lui donne beaucoup de mal, c'est comme s'il avait de moins en moins d'appétit. Passer à un dictionnaire d'ondelette à ce moment-là est une bonne idée mais:
- on ne sait pas détecter de manière robuste le moment où le résiduel devient du bruit
- l'idée est bonne si le but est la parcimonie. En revanche si le but est la représentation temps/fréquence c'est pas terrible parce que la localisation temps/fréquence d'une ondelette est pourrie.
Citation : Je vais regarder cette fameuse fonction FoF pour le coup.
Je crois qu'un des deux F signifie 'formant' parce que historiquement on a trouvé que c'était un bon modèle pour des enveloppes de phonèmes. Pov Gabou devrait pouvoir en dire plus.. Il y a deux paramètres qui permettent d'avoir des profils ADSR variés. Pour le dictionnaire chirp/FoF dont j'ai parlé, les deux paramètres étaient fixes. J'aurais bien aimé faire rentrer ces paramètres dans le dictionnaire mais il était déja énorme (2 paramètres de fréquence au lieu d'un seul) et rajouter ne serait-ce qu'un degré de liberté à un dictionnaire est catastrophique pour les perfs
Citation : Parce que l'analyse via MP, semble avoir des avantages (le côté glouton en est un, selon moi) mais je n'ai pas encore bien en tête comment exploiter
Il y a un truc qui me plaît particulièrement avec les décompositions du genre MP, c'est que tu arrives à une description 100% déterministe de ton signal, au lieu de la description déterministe + stochastique habituelle..Citation : Il faut que je regarde de près comment on détermine dans le Matching pursuit quel est l'index de la prochaine fonction, car cela présuppose une structure interne du dico. Je sens une orthogonalité ou une pseudo orthogonalité...
Ben ton dictionnaire couvre tout le plan temps/fréquence, avec des supports de tailles variées (puisque c'est le but). Donc fatalement oui, tu as des orthogonalités. Evidemment c'est pas facile à imaginer en dimension N.. Une condition suffisante d'orthogonalité, c'est que deux atomes ont des supports temporels (ou fréquentiels) disjoints. Il existe la notion d'incohérence de dictionnaire, qu'on peut calculer en faisant un genre de bilan des orthogonalités croisées, et prédire ainsi que le dictionnaire aura de l'appétit. Je crois que ça s'appelle la fonction de Babel, je vérifierai.Citation : Je prends un dictionnaire avec le MP de fonctions exotiques, type les sons de base d'une 808, et que je fais tourner l'algo MP sur une boucle de...808, je devrais obtenir des résultats en synthèse non ?
J'ai du mal à comprendre la manip que tu imagines. Pourrais-tu préciser?
batman14

on devrait avec un jeu de fonctions exotique comme dico (qui n'en est pas vraiment un) obtenir la projection du signal observé sur l'espace généré par ces fonctions exotiques...c'est le cractère ACP qui fait cela, mais sur du glouton...
Je prends l'espace des sons générés par translation dilatation des sons d'une 808, je pète dans un tuyau, et je regarde comment sonne un pet dans un tuyau composé à l'aide de sons de 808.
En MP ça fait : je prends comme dico les sons de 808, je pète dans un tuyau et je lance mon MP dessus.
ça doit être cool non ?
http://soundcloud.com/bat-manson

batman14

Citation :
certain nombreS
http://soundcloud.com/bat-manson

bigbill


Ben si tu te fixes comme limite une vingtaine d'atomes, ça risque de faire un peu batteur sous acide.
Et par contre si tu choisis de laisser tourner l'algo suffisamment longtemps, t'auras un genre de morphing entre le son de ton.. sample et le son de 10 batteurs sous acide.
Citation : ça doit être cool non ?
Faut voir
Fais gaffe que Roland te fasse pas un procès


batman14

J'ai pas trop regardé mais cela semble être cette idée d'analyse.
Comme ça, je vais pouvoir péter dans des tuyaux pendant un an !
Enfin bref je dois voir mon directeur de recherche demain. Il risque de me dire un truc du genre : "ton papier sur l'audio et le web est pas mal, mais il faut que tu le creuses plus. Ce serait bien si tu te sortais les doigts du cul et que tu te mettais sur ce sujet pour ta thesis"...
En synthèse, il reste de toute manière du boulot. Quand on voit Brass d'Arturia, on se dit : "ouf, il reste du boulot !"
D'ailleurs c'est basé sur des travaux de l'IRCAM soit dit en passant, non ?
http://soundcloud.com/bat-manson

Pov Gabou

Citation :
Parce que l'analyse via MP, semble avoir des avantages (le côté glouton en est un, selon moi) mais je n'ai pas encore bien en tête comment exploiter ce type de décomposition...
Un exemple c'est la detection de frequence fondamental dans un signal polyphonique: le premier article sur le MP harmonique de Gribonval donne un exemple simple d'application pour ce type de taches. Un projet peut justement etre de faire un algo un peu plus interessant.
Pour le time stretch, l'interet du MP est evident si ton dictionnaire contient que des atome faciles a etendre/compresser temporellement tout en gardant la meme frequence (time stretch par vocoder de phase utilise le meme modele sous jacent, finalement: faire du time stretch avec le vocoder de phase suppose que dans une fenetre donnee, dans un canal donne, tu n'as qu'une sinusoide).

bigbill


bigbill

Tiens une autre idée de thèse: implémenter un compresseur/limiteur multisource. Ok ça a un air de déja vu, mais faire de la compression quand on a plusieurs sources est plus délicat que dans le cas (bateau) d'une source unique.
L'idée ce serait de maintenir le signal mixé loin de la saturation, de manière intelligente et transparente, afin de pouvoir le sampler dans de bonnes conditions dans le but de s'en servir plus tard dans le set, en guise de source 'propre'. Je te dis ça parce que j'ai vu que t'as une expérience du mix et que tu dois avoir les idées claires sur le sujet, et en plus c'est du temps réel.
Hors sujet : Je suis en déplacement jusqu'à la fin du mois sans accès web, à partir de demain après-midi.
Bonne chance pour ta thèse. Et aux autres: bonne bourre

cptn.io

J'ose pas trop m'exprimer ici


J'aime bien l'info et la prog en particulier et je pense m'orienter plus là dedans par après (mais ptet plus dans le domaine de la sécurité informatique, ou les deux si c'est possible).
Personnellement je suis à mes débuts sous C, un tt chti peu de C++, Java, et Mathlab si on peut appeler ça un language (perso j'aime pas trop Mathlab/Scilab mais bon ski paré ca peut servir), ou encore Pure Data en trucmachin graphique.
Je vous écris car je dois réaliser pour dans 6 mois un "projet tutoré", l'équivalent DUT de vos thèses de fin d'écoles d'ingé/master recherche.
L'an dernier, mon projet , basé sur un PIC et un téléphone portable, plus la démodul DTMF, a été de fournir au centre de réadaptation pour handicapés de mulhouse à coté de mon IUT, un téléphone avec lequel on puisse également commander les volets ou la télé pour permettre aux personnes lourdement handicapées d'essayer de vivre à peu près comme les personnes non handicapées. Y a des trucs qui peuvent ressembler et qui existent déjà mais qui coutent immensément cher (facile le prix de ma table de mixage

Pour cela j'aimerais me lancer dans un gros projet dans l'audio.
Je souhaiterais réaliser une tranche de console complète DIY( préampli lampe, compresseur optique, eq lampe ou transistor, ptet limiteur) mais, et c'est là que je fais appel à vos connaissances, à commande numérique, comprendre commandable par ordi.
En fait j'ai dans l'idée de prendre des potards lumineux avec lesquels j'envoie un message midi sur l'ordi, et juste derrière une conversion midi to cv/gate.
Donc tu peux modifier en "local", en manuel sur ta tranche, les paramètres que tu veux, mais tu pourrais aussi sur cubase, avoir un plug construit à cet effet, avec lesquels je peux par ex voir de jolies courbes d'eq, ou de compression, agir dessus, et que lorsque je modifie la courbe, ca m'envoie des messages midi sur ma tranche de console qui reconvertit ca dans des valeurs de tension compréhensible par toute l'électronique qui y a dans la tranche de console.
Vous m'avez suivi ?
Je n'ai pas encore d'idée trop précise sur la partie de la conception du plug vst , et surtout sur le coté reroutage midi.
Je sais pas trop non plus si c'est une bonne idée de faire une conversion midi to cv.
Merci de vos réponses et conseils, et retour d'expérience meme ptet (enfin j'espère ;))
cptn.io

batman14

Sinon je ne peux que t'aider sur la partie midi "software", ayant tripoté les PICs il y a maintenant deux ans pendant une journée...j'en garde pas un souvenir mémorable tu me diras !
Je pense que tu n'auras pas le temps de développer ton VST lors du temps du projet tutoré, car tu peux perdre rien qu'une semaine à compiler un putain de projet qui envoie un message midi, et que c'est pas déterminant pour ton système.
Il faut que ta tranche de console soit relié à ton pc par un cable...le cable midi c'est pas mal ! (plus simple que l'usb à priori).
Si tu te bases sur le DIY http://www.ucapps.de/ tu devrais trouver pas mal de support et t'auras tous les drivers, ce qui est bien cool.
http://soundcloud.com/bat-manson

guitoo

Je vois qu'il ya des thesards orienté son par ici. Quel est votre sujet de thèse? Vous avez des publications?
Mon sujet porte sur l'analyse de la partie stochastique (le bruit) des son bruité. mon premier papier peut etre trouvé la:
http://www.dafx.ca/proceedings/papers/p_139.pdf
Ca m'interesse de voir ce qui peut se faire ailleur que dans mon labo.

cptn.io

Je pensais pour ce qui concerne la partie VST utiliser Pure Data ( qui ressemble à MaxMSP) car il possède un plug in pour fabriquer un vst à partir de la prog graphique que t auras faite .
Cependant ce qui pose prob c'est surtout que j'ai du mal avec le routage midi entre le matos et le software.
Ucapps c'est pas mal, mais c'est plus pour des controlleurs midi diy que pour intégrer des potards midi à une autre appli ...
Mais bon c'est pratique
Derniere question est ce que vous pensez que c'est faisable qd mm le projet en gros jusqu'a mi mars ??
cptn.io

batman14

Après tu sauras pas vraiment de servir de Pure data, car tu ne connaitras rien de la manipulation des "signaux" dessous, mais juste des "messages".
Pour l'aspect électronique, c'est toi qui connait...
Ce que tu réalises, c'est quand même un controlleur midi, posé par dessus une tranche de console non ?
Quand on regarde les consoles digitales, elles sont vues comme un controlleur midi par le séquenceur.
J'y connais rien en électronique définitivement, mais tu vas être amené quelque part à encoder tes signaux en midi, d'où les plans de ucapps.
Guitoo : j'ai lu l'abstract de ton papier. Tu bosses sur quoi maintenant ?
On devrait ptet se faire un thread pour les thesards et autres bricoleurs du dimanche parce que en fait je me rends compte que ça à rien à foutre là...
http://soundcloud.com/bat-manson

ClockworkOi!

Je voulais juste posé une question, hésitez pas à me taper dessus si nécéssaire, mais voila : J'aurais besoin d'en savoir plus sur les FTT (et particulièrement la génération de MFCC) pour faire de l'identification vocale. J'avais déja réaliser un prototype basé sur une implémentation C pour la création des vecteurs, mais la je recode tout en java. Le problème c'est que le peu que j'ais vu des transformés de fourier n'est pas resté, et c'est vraiment quelque chose que j'ai du mal à apprécier... Je suis à la recherche donc de quelque chose "de simple" pour mieux appréhender les choses.
Ah oui, j'ai déja du code java pour générer ces MFCC, mais les vecteurs que j'obtiens sont totalement différents de ceux que j'avais avec le code C (je prends 2 coeficients et je les affiches avec gnuplot, ce qui me donne des choses radicalement différentes).
Je pense pas recoder ca from scratch, mais plutot comprendre suffisament pour savoir d'ou vienne ces différences, et agir en conséquence (et pourquoi pas recoder en java le code que j'ais...).
Merci


batman14

je recherche mes liens favoris qui m'ont aidé à comprendre tout ça.
Sinon, file les graphes de GNU plot, ça m'aidera aussi.
As tu vérifier un minimum la correction de tes algos ?
Quand tu passes des signaux simples, genre sinusoides pures, as tu bien un seul pics dans ton spectre avec les deux algos, à la même fréquence ?
Y'a ptet choc qui passera dans le coin aussi pour t'aider.
http://soundcloud.com/bat-manson

Pov Gabou

Citation :
Je voulais juste posé une question, hésitez pas à me taper dessus si nécéssaire, mais voila : J'aurais besoin d'en savoir plus sur les FTT (et particulièrement la génération de MFCC) pour faire de l'identification vocale. J'avais déja réaliser un prototype basé sur une implémentation C pour la création des vecteurs, mais la je recode tout en java. Le problème c'est que le peu que j'ais vu des transformés de fourier n'est pas resté, et c'est vraiment quelque chose que j'ai du mal à apprécier... Je suis à la recherche donc de quelque chose "de simple" pour mieux appréhender les choses.
Ah oui, j'ai déja du code java pour générer ces MFCC, mais les vecteurs que j'obtiens sont totalement différents de ceux que j'avais avec le code C (je prends 2 coeficients et je les affiches avec gnuplot, ce qui me donne des choses radicalement différentes).
Je pense pas recoder ca from scratch, mais plutot comprendre suffisament pour savoir d'ou vienne ces différences, et agir en conséquence (et pourquoi pas recoder en java le code que j'ais...).
Deja, pourquoi recoder en java un truc qui existe en C ? Tu peux utiliser JNI, non ?
Ensuite, le premier probleme, c'est que differentes libraires de FFT ont differentes definition (normalise ou pas, etc...). Tu utilises quelle librairie pour la FFT ? La meme pour le code C et Java ?
Apres, ben c'est les joies du debuggage, tu compares les sorties pour les memes entrees a tous les etages du code pour les MFCC apres avoir teste chaque module separement : filtrage, FFT, filtrage inverse, prediction lineaire, etc...

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

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 ?


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

Merci! Merci!

jujupauty

Jul

jujupauty

Ca t'aidera peut être
Jul
- < Liste des sujets
- Charte