#26 Le 02/07/2008, à 10:32
- Nasman
Re : idée débile ... extraire des notes d'un son
C'est un peu le risque, mais je ne pense pas qu'un musicien soit capable de jouer 20 notes à la seconde.
PC fixe sous Bionic 64 bits et portable avec Focal 64 bits
Hors ligne
#27 Le 02/07/2008, à 10:33
- DrDam
Re : idée débile ... extraire des notes d'un son
quand tu parle d'une fenetre un peu grande, tu parle de quelle taille ? 1 - 10sec ou 1/10 - 1 sec ?
Tout ce qui a été crée par l'Homme devrait être patrimoine de l'humanité
Vous etes perdu ?, là ce sera trop loin
Hors ligne
#28 Le 02/07/2008, à 10:40
- Nasman
Re : idée débile ... extraire des notes d'un son
Il faudrait que tu partes de la note la plus grave probable et que tu définisses les erreurs admissibles (pourquoi pas 1/4 de ton), celà te donnera la largeur de fréquence admissible (par exemple 5 Hz). en prenant l'inverse tu auras la durée de ta fenêtre (1/5 = 0,2 s - toujours à titre d'exemple).
PC fixe sous Bionic 64 bits et portable avec Focal 64 bits
Hors ligne
#29 Le 02/07/2008, à 11:13
- DrDam
Re : idée débile ... extraire des notes d'un son
donc sa reste raisonable ...
Tout ce qui a été crée par l'Homme devrait être patrimoine de l'humanité
Vous etes perdu ?, là ce sera trop loin
Hors ligne
#30 Le 02/07/2008, à 17:08
- DrDam
Re : idée débile ... extraire des notes d'un son
@_YokoUno : je viens de jeter un oeil sur la methodes adaptative etc .... et a vrai dire .... j'ai vraiment tout rien compris !
tu pourrais m'aider ?
Tout ce qui a été crée par l'Homme devrait être patrimoine de l'humanité
Vous etes perdu ?, là ce sera trop loin
Hors ligne
#31 Le 03/07/2008, à 11:06
- YokoUno
Re : idée débile ... extraire des notes d'un son
Oui, je peux t'expliquer plus en détail le principe. Mais là j'ai trop de taf.
Je posterai un truc ce week-end, ça m'étonnerait que je trouve le temps avant.
D'ici là si tu veux voir la méthode à l'oeuvre, tu devrais compiler le toolkit mptk.
L'effort pour compiler et comprendre l'utilisation du toolkit est très inférieur à celui nécessaire pour coder tout ça.
De plus il y a probablement une doc dans mptk, et elle peut t'aider à piger.
(j'ai jamais utilisé mptk, mais un ancètre de ce toolkit, assez différent semble-t-il)
@+
#32 Le 03/07/2008, à 13:17
- DrDam
Re : idée débile ... extraire des notes d'un son
ok merci ...
Tout ce qui a été crée par l'Homme devrait être patrimoine de l'humanité
Vous etes perdu ?, là ce sera trop loin
Hors ligne
#33 Le 05/07/2008, à 21:02
- YokoUno
Re : idée débile ... extraire des notes d'un son
Post 1/3
Oublie deux minutes le son, et imagine un espace euclidien de dimension 3.
Dans la base orthonormée habituelle (i,j,k) n'importe quel vecteur de l'espace peut se décomposer de manière unique => 3 coordonnées.
Imagine de plus un grand nombre de vecteurs de norme 1, qu'on appelle "atomes", et l'ensemble de ces atomes se désigne par "dictionnaire".
Tu te retrouves donc avec une sorte d'oursin centré sur le vecteur 0. Par construction, on peut se débrouiller pour que:
- si on choisit au hasard 2 vecteurs du dictionnaire, ils ne sont pas colinéaires.
- si on choisit au hasard 3 vecteurs du dictionnaire, ils ne sont pas coplanaires.
Maintenant on a comme donnée du problème un vecteur S de l'espace, et le but du jeu est d'exprimer sa décomposition dans le dictionnaire.
Il peut y avoir plusieurs cas de figure:
1) S est colinéaire avec un atome. Coup de bol. Donc on a 1 coordonnée, et l'atome associé.
2) S est dans un plan défini par deux atomes. Coup de bol aussi. On aura donc 2 coordonnées, et les 2 atomes associés.
3) S n'est pas dans un des cas précédents. On aura 3 coordonnées, et les 3 atomes associés.
Ce qu'il faut remarquer, c'est que dans les cas 1) et 2) on arrive à exprimer S avec moins de coordonnées que la dimension de l'espace, donc quelque part "on y gagne" et le cas 1) est le plus favorable.
Le cas 3) est le plus défavorable. C'est aussi le moins intéressant: ça ressemble juste à un vulgaire changement de base.
Néanmoins si on raisonne sur les ordres de grandeur des valeurs absolues des 3 coordonnées:
- si une coordonnée est négligeable par rapport aux deux autres, alors on peut considérer qu'on est ramené au cas 2)
- si deux coordonnées sont négligeables par rapport à la troisième, on est ramené au cas 1)
Ainsi même dans le cas 3) il y a des cas plus favorables que d'autres, de facto.
Ce qu'on peut voir, c'est que plus le dictionnaire de départ est vaste, et moins on a de chance quand on décompose le vecteur S de se retrouver dans un cas défavorable.
Ceci dit pour l'instant c'est pas folichon: l'intérêt de la décomposition n'est pas évident, et qualifier les cas de favorable/défavorable semble complètement abusif. Pour comprendre où se situe le bénéfice, il faut imaginer deux choses en plus:
* que la dimension de l'espace soit très élévée. Par exemple, espace de dimension 100, dictionnaire de 10000 atomes. En admettant que le vecteur de départ se décompose en seulement 5 atomes du dictionnaire, l'avantage de la décomposition est déjà plus manifeste: 5 coordonnées au lieu de 100.
* que chaque atome du dictionnaire soit porteur d'une ou de plusieurs informations qui lui sont propres: des "features". Chacun des 10000 atomes trouve ainsi sa place dans le dictionnaire en fonction de quelques caractéristiques de "haut niveau", en opposition aux 100 caractéristiques de "bas niveau" que sont ses coordonnées dans l'espace.
Ce qu'il faut voir, c'est que le dictionnaire est construit au préalable en fonction des features qu'on veut détecter. Ce n'est pas facile, les atomes sont très nombreux, mais la récompense est ceci: le vecteur de départ a été analysé comme combinaison de 5 features, alors qu'il aurait été très difficile de déduire ces propriétés en se contentant d'examiner les 100 coordonnées du vecteur S.
#34 Le 05/07/2008, à 21:08
- YokoUno
Re : idée débile ... extraire des notes d'un son
Post 2/3
Retour au son
Imagine que la fréquence d'échantillonnage soit 40000 et que ton signal S ait une durée de 5 secondes => 200000 échantillons.
L'ensemble des "extraits sonores de 5 secondes échantillonnés à 40kHz" est un espace de dimension 200000, et ton extrait à toi n'est qu'un vecteur particulier de cet espace, parmi BEAUCOUP d'autres.
L'espace est muni du produit scalaire <U,V> = u(0)*v(0) + u(1)*v(1) + u(2)*v(2) + ... + u(199999)*v(199999)
où u(i) et v(i) sont les amplitudes respectives des échantillons des signaux U et V, à la position i.
La norme d'un signal est |U| = sqrt (<U,U>) = sqrt ( u(0)^2 + u(1)^2 + u(2)^2 + ... + u(199999)^2 )
Exemples de vecteurs de cet espace:
- le vecteur nul: 200000 échantillons d'amplitude 0, autrement dit 5 secondes de silence.
- un Dirac Di: l'échantillon qui se trouve à la position i a une amplitude égale à 1, tous les autres ont une amplitude nulle.
L'ensemble des Diracs Di (0<=i<=199999) forme une base orthonormée de l'espace.
La méthode vise à trouver une décomposition du signal dans un dictionnaire, comme dans l'exemple en dimension 3. Vu que c'est une méthode itérative, on parle de "poursuite". Le dictionnaire n'existant pas encore, il s'agit de le construire.
Construction d'un dictionnaire:
Imagine par exemple une sinusoïde de 1kHz. Elle peut durer pendant les 5 secondes, auquel cas elle peut être identifiée de manière unique par deux features: sa fréquence et sa phase à l'origine (par exemple π/2). La question de la phase est TRÈS importante: si tu considères deux sinusoïdes de 5 secondes qui ont même fréquence, même amplitude, mais des phases différentes et que tu les écoutes l'une après l'autre, pour tes oreilles ce sera kifkif. Mais dans l'espace de départ ce sont des signaux très différents. Ils ne sont pas colinéaires par exemple, à moins d'être en opposition de phase, ce qui est un cas particulier.
Pour limiter cette sinusoïde dans le temps, il suffit de lui donner une certaine enveloppe. Pour cela, on la multiplie par une fonction à valeurs positives qui n'est pas prise au hasard, on choisit une gaussienne. De cette manière, si on positionne le centre de la gaussienne à t=2s, on peut obtenir du 1kHz "localisé":
- en choisissant une gaussienne large: du 1kHz localisé entre t=0 et t=4s
- en choisissant une gaussienne étroite: du 1kHz localisé entre t=1,9s et t=2,1s.
Pour de telles sinusoïdes limitées dans le temps, on obtient un total de 4 features:
- fréquence: 1kHz
- phase: π/2
- position: t=2s, ou bien i=80000 si on raisonne sur les indices
- durée: 4s (160000 échantillons) ou 0,2s (8000 échantillons)
Pour la durée, on parle aussi de "support". En effet ces gaussiennes ont des bords: compte tenu de la précision numérique finie, en s'éloignant du centre de la gaussienne il arrive un moment où l'enveloppe est tellement petite qu'on l'assimile à 0. Pour illustrer ça, en écoutant par exemple le deuxième de ces deux signaux, on aura: 1,9s de silence suivi d'un bip de 0,2s suivi de 2,9s de silence.
Une opération qu'on peut appliquer à un signal est de le normaliser: on calcule sa norme, puis on le multiplie par l'inverse de cette norme. Le résultat est un vecteur de norme 1. En faisant subir ça aux deux signaux précédents, on obtient deux atomes nommés "atomes de Gabor", et tu peux deviner qu'il s'agit de construire un dictionnaire de tels atomes.
Il suffit pour cela de systématiser la construction des deux atomes précédents, en donnant un grand nombre de valeurs discrètes aux features. En fait ça revient à éparpiller une grande quantité d'événements très variés dans tout le plan temps/fréquences.
Compte tenu de l'explosion combinatoire, il est très facile d'atteindre et de dépasser le nombre fatidique de 200000 (dimension de l'espace).
En revanche, quelques précautions doivent être prises:
* certaines combinaisons position/durée sont impossibles, car le support d'un atome ne doit pas "déborder". Par exemple, un atome à la position t=1s ne peut pas avoir un support de 3s. Pour la même raison, le support maximum est de 5s, et dans ce cas la position est forcément t=2,5s
* certaines combinaisons support/fréquence doivent être évitées. Plus l'atome a l'occasion d'osciller sur toute la durée de son support, meilleure est la localisation en fréquence. Par exemple pour un support de 40ms, un atome de 5kHz aura une bonne localisation en fréquence, car 40ms représentent 200 périodes. Tandis que pour ce même support, un atome de 5Hz n'a "pas le temps d'osciller", les 40ms ne représentant que 1/5ème de période. La gaussienne qui module ce tronçon de sinusoïde fait d'autant plus ressembler l'atome à une impulsion, d'où la mauvaise localisation en fréquence.
* tout le plan T/F doit être couvert, sinon la poursuite échouera. Une manière de se prémunir de ce risque est d'inclure d'office dans le dictionnaire tous les atomes de Dirac.
En fin de construction, le dictionnaire contient M atomes.
#35 Le 05/07/2008, à 21:19
- YokoUno
Re : idée débile ... extraire des notes d'un son
Post 3/3
La poursuite:
Elle procède par itérations. On peut parler de grignotage, un peu comme pour une pomme: de grosses bouchées au début, puis de plus en plus petites, jusqu'à ce qu'il ne reste plus rien. Si le dictionnaire a été bien construit, le nombre total de bouchées sera très inférieur à 200000.
A la première itération, il s'agit de trouver lequel des M atomes est le mieux corrélé avec le signal. Chaque atome constitue la base d'une droite vectorielle. Chercher la meilleure corrélation revient à faire des projections du signal sur chacune de ces M droites vectorielles, afin de déterminer celle qui représente la plus forte contribution. Comme les atomes sont tous de norme 1, il suffit donc de calculer M produits scalaires. A la fin de ces M calculs, on a la valeur numérique de la plus forte des corrélations, ainsi que les features de l'atome associé à cette corrélation max. On sauve ces infos dans un fichier, par exemple xml. Puis on retire du signal la contribution correspondante (grain) ce qui est très facile puisque les infos qu'on vient de sauver suffisent à exprimer analytiquement ce grain, et donc de faire une soustraction parfaitement rigoureuse. La première itération est terminée, il suffit de faire exactement pareil pour les suivantes...
En imaginant qu'on stoppe la poursuite juste après une itération quelconque N, on aura un signal résiduel (trognon de la pomme) et N grains dans le fichier d'analyse, qui décrivent les N bouchées. Si on ajoute au signal résiduel les N grains, on retombe exactement sur le signal de départ.
Stopper l'analyse ainsi, à la main ou bien automatiquement suivant un certain critère, est nécessaire dans la pratique quand le signal à analyser résulte d'une prise de son. En effet après beaucoup d'itérations, quand la poursuite a fini de trouver toutes les composantes "utiles", elle attaque le seuil de bruit et ça lui donne du mal. Elle ne trouve plus que des grains mal localisés en fréquence, voire carrément des Dirac. Aucun intérêt d'aller plus loin, on ne cherche pas à analyser du bruit
Raffinements:
Si tu essaies de comparer ce qui précède avec le contenu du pdf, tu verras que dans celui-ci les nombres complexes sont beaucoup utilisés car l'espace de travail y est défini sur le corps des complexes. Mais pourquoi considérer un espace défini ainsi, puisque dès le départ le signal qu'on cherche à analyser est manifestement réel?
C'est pour mettre en oeuvre un raffinement important, qui est d'ailleurs utilisé aussi dans la fft: la reconstruction de phase.
Au lieu d'intégrer une phase discrète comme feature dans un dictionnaire d'atomes réels, on la considère comme feature enfouie et continue, dans un dictionnaire d'atomes de Gabor complexes. Ce faisant, la phase explicite peut disparaître et il ne reste plus que 3 features pour décrire le dictionnaire: fréquence, position et durée. En effectuant la projection du signal réel, non plus sur une droite, mais sur le plan engendré par un atome G et son atome conjugué G*, on obtient non seulement une corrélation (module) mais une phase.
Ça ne change pas grand chose pour la poursuite. A chaque itération, il s'agit toujours de trouver la corrélation maximum et de la stocker, mais en plus on stocke aussi la phase associée. Ces deux informations, ajoutées aux 3 features de l'atome associé, décrivent analytiquement un grain réel, exactement de la même manière que plus haut.
Il existe d'autres raffinements qui permettent de sérieusement booster le calcul, par exemple la "formule d'update". Libre à toi de creuser la question, mais pour une compréhension globale ça peut être mis de côté dans un premier temps.
Interprétation des résultats:
La capture d'écran postée il y a quelques jours montre les grains dans le plan T/F. Un Dirac est une ligne verticale. Une sinusoïde est une ligne horizontale. Les grains bien localisés en fréquence sont des segments horizontaux, les grains moins bien localisés en fréquence sont des nuages horizontaux. Et pour la localisation dans le temps, tu devines...
Une fondamentale et des harmoniques ressemblent à des segments horizontaux parallèles et équidistants (car le plan T/F est en fréquences linéaires, contrairement aux touches d'un piano, ainsi que le montre la formule de ton premier post).
Un début de note (attaque) se visualise par un grain vertical, juste avant le début des harmoniques. Si la fin de note (release) est brutale, ça se visualise également par un grain vertical, juste après la fin des harmoniques. Pour ce que tu veux faire, les notes auront donc souvent l'aspect d'une "échelle" dans le plan T/F.
Pour visualiser l'intensité des notes, il est possible d'utiliser un dégradé de couleurs plutôt que la variation d'intensité d'une couleur unique.
#36 Le 06/07/2008, à 09:37
- DrDam
Re : idée débile ... extraire des notes d'un son
j'ai pas tout suivie, mais dans l'ensemble, je crois avoir compris ....
au passage ça m'as legerement refroidi ... mais bon ....
Tout ce qui a été crée par l'Homme devrait être patrimoine de l'humanité
Vous etes perdu ?, là ce sera trop loin
Hors ligne