TIPE synthese sonore: analyse/resynthese additive par temps fréquence
- 181 réponses
- 10 participants
- 20 508 vues
- 12 followers
abel_b
60
Posteur·euse AFfranchi·e
Membre depuis 19 ans
Sujet de la discussion Posté le 16/12/2005 à 19:26:51TIPE synthese sonore: analyse/resynthese additive par temps fréquence
Bonjour à tous,
Voilà, je dois présenter un TIPE sur la synthèse sonore analogique en vue de passer des concours des grandes écoles.
Je voudrais savoir si certains pouvaient m'indiquer des livres (ou site si ça existe) qui approfondissent ce thème (au moins des auteurs).
Ma difficulté est de comprendre le principe de la synthese FM (pas du pt de vue mathematique mais du pt de vue réalisation). En fait j'aimerais savoir si on pouvait me donner de quoi elaborer une simulation de montage qui utiliserait le principe de la FM.
De même je cherche une idée ou quelques conseils pour realiser un montage qui simule une synthèse AM (multiplieur etc...) car je connais bien le principe mais je vois pas quel algorithme appliquer pr avoir des sons semblables à ceux d'instruments de musique par exemple.
Le but final est de faire une experience au labo de physique et de faire une analyse spectrale du signal emis (par exemple le son d'une guitare) et de le comparer au signal qu'on a voulu imiter.
Aussi, je voudrais savoir si qqun pouvait m'indiquer un site où l'on peut trouver l'analyse spectrale de différents instruments de musique (peu importe lesquels)
Merci à vous.
Voilà, je dois présenter un TIPE sur la synthèse sonore analogique en vue de passer des concours des grandes écoles.
Je voudrais savoir si certains pouvaient m'indiquer des livres (ou site si ça existe) qui approfondissent ce thème (au moins des auteurs).
Ma difficulté est de comprendre le principe de la synthese FM (pas du pt de vue mathematique mais du pt de vue réalisation). En fait j'aimerais savoir si on pouvait me donner de quoi elaborer une simulation de montage qui utiliserait le principe de la FM.
De même je cherche une idée ou quelques conseils pour realiser un montage qui simule une synthèse AM (multiplieur etc...) car je connais bien le principe mais je vois pas quel algorithme appliquer pr avoir des sons semblables à ceux d'instruments de musique par exemple.
Le but final est de faire une experience au labo de physique et de faire une analyse spectrale du signal emis (par exemple le son d'une guitare) et de le comparer au signal qu'on a voulu imiter.
Aussi, je voudrais savoir si qqun pouvait m'indiquer un site où l'on peut trouver l'analyse spectrale de différents instruments de musique (peu importe lesquels)
Merci à vous.
abel_b
60
Posteur·euse AFfranchi·e
Membre depuis 19 ans
71 Posté le 18/05/2006 à 18:06:51
OK merci
J'essaierais de programmer un truc comme ça si tout le reste marche nickel car ca doit etre un peu lourd à coder un truc qui interpole (quoique je v regarder si maple n'a pas une fonction qui trouve le polynome passant par n points). Mais ca risque pas d'être lourd comme truc car une fois le polynome calculé, il faut le dériver et tout ca pr trouver le maxi non et vu le nombre de pics, ca va faire péter mon ordi ?
J'essaierais de programmer un truc comme ça si tout le reste marche nickel car ca doit etre un peu lourd à coder un truc qui interpole (quoique je v regarder si maple n'a pas une fonction qui trouve le polynome passant par n points). Mais ca risque pas d'être lourd comme truc car une fois le polynome calculé, il faut le dériver et tout ca pr trouver le maxi non et vu le nombre de pics, ca va faire péter mon ordi ?
Choc
6968
Membre d’honneur
Membre depuis 22 ans
72 Posté le 18/05/2006 à 18:22:55
T'inquietes il y a des solution analytiques ca va tres vite
Site personnel: https://www.enib.fr/~choqueuse/
abel_b
60
Posteur·euse AFfranchi·e
Membre depuis 19 ans
73 Posté le 19/05/2006 à 11:19:22
Hey, je viens de trouver la FFT dans maple. Par contre je comprend pas l'utilisation : elle s'utilise comme ceci :
FFT(x,y,m) où x (resp y) est la liste de la partie reele (resp immaginaire=sequence de 0 dans mon cas)) et m est tel qu'on ait 2^m éléments dans chaque sequence : jusque là je comprend les parametres, le truc c'est que cette fonction une fois utilisée affecte à x une liste de taille 2^m des parties réelles et pareil pr y en partie immaginaire.
- Il me semblait que la FFT appliquée à une liste renvoyait un seul nombre complexe (enfin une fonction) non (la somme des s(k)*exp(-j*...) au lieu de renvoyer une liste ???
FFT(x,y,m) où x (resp y) est la liste de la partie reele (resp immaginaire=sequence de 0 dans mon cas)) et m est tel qu'on ait 2^m éléments dans chaque sequence : jusque là je comprend les parametres, le truc c'est que cette fonction une fois utilisée affecte à x une liste de taille 2^m des parties réelles et pareil pr y en partie immaginaire.
- Il me semblait que la FFT appliquée à une liste renvoyait un seul nombre complexe (enfin une fonction) non (la somme des s(k)*exp(-j*...) au lieu de renvoyer une liste ???
Choc
6968
Membre d’honneur
Membre depuis 22 ans
74 Posté le 19/05/2006 à 11:22:40
Je connais pas mapple, la je peux pas t'aider
la FFT te renvoie un vecteur de nombre complexe...la si il te renvoie les reelles et les imaginaires y a pas de soucis
la FFT te renvoie un vecteur de nombre complexe...la si il te renvoie les reelles et les imaginaires y a pas de soucis
Site personnel: https://www.enib.fr/~choqueuse/
abel_b
60
Posteur·euse AFfranchi·e
Membre depuis 19 ans
75 Posté le 19/05/2006 à 11:31:36
En fait moi c'est comme si il me renvoyait un vecteur de nombre complexe (sauf qu'il y a séparation de Re() et Im() mais bon il est assez facile de les regrouper dans une meme liste) de taille 2^m, le problème c'est que je ne vois pas du tout à quoi ça correspond (comment accéder au module et tout ça ensuite ???)
- Peut etre que ca correspond aux FFT(s)(n) pour n allant de 1 à 2^m....mais bon, je suis pas sûr.
- Peut etre que ca correspond aux FFT(s)(n) pour n allant de 1 à 2^m....mais bon, je suis pas sûr.
Choc
6968
Membre d’honneur
Membre depuis 22 ans
76 Posté le 19/05/2006 à 12:27:34
T'as juste a calculer le module pour chaque points
|FFT(f)|=sqrt(Re(liste(f))²+Im(liste(f))²)
la fonction doit surement etre integré dans mapple
|FFT(f)|=sqrt(Re(liste(f))²+Im(liste(f))²)
la fonction doit surement etre integré dans mapple
Site personnel: https://www.enib.fr/~choqueuse/
abel_b
60
Posteur·euse AFfranchi·e
Membre depuis 19 ans
77 Posté le 19/05/2006 à 12:33:50
Il y a effectivement une fonction "module" ( abs() ). Ok merci bien, en fait il te renvoie la liste des FFT(s)(n) avec n de 1 à 2^m.
Sinon je voulais juste savoir un truc sur le repliement spectral, cela veut-il dire graphiquement que le module du spectre est symetrique par rapport à l'axe f = Fe/2 où Fe est la frequence d'echantillonnage ?
Sinon je voulais juste savoir un truc sur le repliement spectral, cela veut-il dire graphiquement que le module du spectre est symetrique par rapport à l'axe f = Fe/2 où Fe est la frequence d'echantillonnage ?
Choc
6968
Membre d’honneur
Membre depuis 22 ans
78 Posté le 19/05/2006 à 12:38:06
Citation : Sinon je voulais juste savoir un truc sur le repliement spectral, cela veut-il dire graphiquement que le module du spectre est symetrique par rapport à l'axe f = Fe/2 où Fe est la frequence d'echantillonnage
Oui
tu peux pour illustrer ca generer par exemple un signal en dent de scie a une frequence assez elevée genre 10000Hz, ensuite quand tu vas voir le module de la FFT, il y aura bien les harmonique de la dent de scie avec une certaine decroissance et arrivé a Fe/2, ca se replie, on parle parfois de mirroir spectrale !
Site personnel: https://www.enib.fr/~choqueuse/
abel_b
60
Posteur·euse AFfranchi·e
Membre depuis 19 ans
79 Posté le 19/05/2006 à 12:50:09
OK merci bcp.
Allez je vais modifier le programme et utiliser la FFT déjà programmée car mon truc ca ramait vraiment trop, puis je vais continuer, il me reste à implémenter mc-aulay-quatieri et j'en aurai fini avec l'analyse.
- Sinon juste par curiosité, elle vaut quoi la complexité de calcul pour la TFD classique ? (je sais que pr la FFT c'est en n*log(n)).
EDIT : Je viens de refaire mon truc avc la FFT, effectivement c'est carrément + rapide (30sec au lieu de 15min, je pensais pas que ca le faisait à ce point).
J'ai une petite question : Si je comprend bien, quand le prog calcule la FFT sur 2^n echantillons, il renvoie donc un spectre utile de 2^(n-1) valeurs de frequence ? Par exemple pr une fenetre de 256 echantillons, on n'a acces qu'à 128 valeurs du spectre : 0, Fe/128, Fe/127 ... Fe/2 donc pour Fe=44100 Hz, on ne pourra pas représenter les fréquence entre 0Hz et 344Hz ??? (344=44100/128)
Je trouve que ca fait pas mal d'erreur tout ça non ???(enfin si je ne me trompe pas dans mon raisonnement).
EDIT : j'ai un autre problème : quand je calcule la liste des [indices,FFT], je ne constate pas la symetrie au 128ème indice (les indices en 127 et 129 ne possèdent pas la meme norme) -> j'ai pris une fenetre de taille 256 echantillons. Est ce que la FFT prévois cela et surechantillonne automatiquement ?? ou je me suis trompé...
Allez je vais modifier le programme et utiliser la FFT déjà programmée car mon truc ca ramait vraiment trop, puis je vais continuer, il me reste à implémenter mc-aulay-quatieri et j'en aurai fini avec l'analyse.
- Sinon juste par curiosité, elle vaut quoi la complexité de calcul pour la TFD classique ? (je sais que pr la FFT c'est en n*log(n)).
EDIT : Je viens de refaire mon truc avc la FFT, effectivement c'est carrément + rapide (30sec au lieu de 15min, je pensais pas que ca le faisait à ce point).
J'ai une petite question : Si je comprend bien, quand le prog calcule la FFT sur 2^n echantillons, il renvoie donc un spectre utile de 2^(n-1) valeurs de frequence ? Par exemple pr une fenetre de 256 echantillons, on n'a acces qu'à 128 valeurs du spectre : 0, Fe/128, Fe/127 ... Fe/2 donc pour Fe=44100 Hz, on ne pourra pas représenter les fréquence entre 0Hz et 344Hz ??? (344=44100/128)
Je trouve que ca fait pas mal d'erreur tout ça non ???(enfin si je ne me trompe pas dans mon raisonnement).
EDIT : j'ai un autre problème : quand je calcule la liste des [indices,FFT], je ne constate pas la symetrie au 128ème indice (les indices en 127 et 129 ne possèdent pas la meme norme) -> j'ai pris une fenetre de taille 256 echantillons. Est ce que la FFT prévois cela et surechantillonne automatiquement ?? ou je me suis trompé...
abel_b
60
Posteur·euse AFfranchi·e
Membre depuis 19 ans
80 Posté le 19/05/2006 à 19:46:13
Bon j'ai essayé avec des fenetres de 512 echantillons, et je trouve des pics (très grands par rapport aux autres) pour n=6 donc à 44100/512*6= 516 Hz (j'ai utilisé des fenêtres rectangulaires donc j'ai viré les valeurs à -13dB par rapport au max, conformément au bouquin). Sachant que le truc c'est un "la" de guitare, est ce que c'est normal car je crois qu'un "la" c'est à 440 Hz (en supposant la guitare bien accordée) donc, vue la marge d'erreur, ca me semble bon...
Qqun peut-il confirmer que c'est assez "logique" comme résultat ?
Merci.
Je viens de le faire à 1024 echantillons par fenetres et je trouve des grands pics à 473Hz
EDIT : Je suis en train de mettre en place l'algo de mc auley quatieri, et il y a un truc que je capte pas, comment on fait ensuite pr interpoler les enveloppes d'une manière simple (legère aussi) une fois que l'on a apparié tous les pics etc...par exemple je vais detecter un partiel qui dure sur plusieurs fenetres et donc je vais avoir pleins de points [frequence,amplitude] (autant qu'il ya de fenetres) mon pb etait de savoir s'il fallait interpoler l'evolution du partiel ou s'il fallait juste conserver ces valeurs car elles suffisent quand on voudra recréer numériquement les sinusoïdes ??
RE-EDIT : je me demadais si dans mon exemple il etait nécessaire de passer par mc auley-quatieri car je travaille sur un temps de 1sec et que chacune de mes fenetres ne possedent pas plus de 6/7 pics principaux (en + de cela je n'ai pas bcp de fenetres (87)) : Donc il serait peut etre possible de resynthétiser le son à paritir de la valeur de ces pics prise direnctement dans les fenêtres et tant pis pour les petites imprecisions et le temps de calcul vous croyez pas ???
RE-RE-EDIT : encore une question (je sais ca fait bcp) : quand je vousrais recréer les sinusoïdes pr recréer mon son, est ce que je peux faire l'approximation de fréquence constante, c'est à dire que sur le suivi d'un partiel, le lui associe la fréquence constante la + présente.
Ex : si j'ai [400Hz,a1],...,[400Hz,an], [423Hz,an+1]..etc avec bcp de 400Hz, j'impose que mon partiel est toujours à 400Hz au lieu de faire varier la fréquence dans le le temps. Est ce que les pertes sont négligeables ??? (sachant que sur mon exemple, il y a bcp de régularité, les endroits où la fréquence change sont peu nombreux voir inexistants)
Qqun peut-il confirmer que c'est assez "logique" comme résultat ?
Merci.
Je viens de le faire à 1024 echantillons par fenetres et je trouve des grands pics à 473Hz
EDIT : Je suis en train de mettre en place l'algo de mc auley quatieri, et il y a un truc que je capte pas, comment on fait ensuite pr interpoler les enveloppes d'une manière simple (legère aussi) une fois que l'on a apparié tous les pics etc...par exemple je vais detecter un partiel qui dure sur plusieurs fenetres et donc je vais avoir pleins de points [frequence,amplitude] (autant qu'il ya de fenetres) mon pb etait de savoir s'il fallait interpoler l'evolution du partiel ou s'il fallait juste conserver ces valeurs car elles suffisent quand on voudra recréer numériquement les sinusoïdes ??
RE-EDIT : je me demadais si dans mon exemple il etait nécessaire de passer par mc auley-quatieri car je travaille sur un temps de 1sec et que chacune de mes fenetres ne possedent pas plus de 6/7 pics principaux (en + de cela je n'ai pas bcp de fenetres (87)) : Donc il serait peut etre possible de resynthétiser le son à paritir de la valeur de ces pics prise direnctement dans les fenêtres et tant pis pour les petites imprecisions et le temps de calcul vous croyez pas ???
RE-RE-EDIT : encore une question (je sais ca fait bcp) : quand je vousrais recréer les sinusoïdes pr recréer mon son, est ce que je peux faire l'approximation de fréquence constante, c'est à dire que sur le suivi d'un partiel, le lui associe la fréquence constante la + présente.
Ex : si j'ai [400Hz,a1],...,[400Hz,an], [423Hz,an+1]..etc avec bcp de 400Hz, j'impose que mon partiel est toujours à 400Hz au lieu de faire varier la fréquence dans le le temps. Est ce que les pertes sont négligeables ??? (sachant que sur mon exemple, il y a bcp de régularité, les endroits où la fréquence change sont peu nombreux voir inexistants)
- < Liste des sujets
- Charte