TIPE synthese sonore: analyse/resynthese additive par temps fréquence
- 181 réponses
- 10 participants
- 21 044 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.

batman14
715

Posteur·euse AFfolé·e
Membre depuis 20 ans
176 Posté le 31/01/2007 à 15:01:42
Oui, pour moi c'est un problème de phase...
Quand tu shiftes une sinusoide pure, la reconstitution se fait mal, non ?
Tu dois avoir des sauts de phase assez génants...
Mais désolé, je crois que tu va devoir faire un peu de lecture ou attendre que choc repasse dans le coin.
Quand tu shiftes une sinusoide pure, la reconstitution se fait mal, non ?
Tu dois avoir des sauts de phase assez génants...
Mais désolé, je crois que tu va devoir faire un peu de lecture ou attendre que choc repasse dans le coin.
0
http://soundcloud.com/bat-manson

pet.delascar
14

Nouvel·le AFfilié·e
Membre depuis 20 ans
177 Posté le 01/02/2007 à 11:14:31
Batman a batcerné mon batprobleme.
0

Pov Gabou
19553

Drogué·e à l’AFéine
Membre depuis 23 ans
178 Posté le 01/02/2007 à 12:41:06
Tu as surement des problemes de "phase wrapping". Le truc a faire, c'est de tester ton algo sur une sinusoide, dont la frequence correspond d'abbord a un bin exact de ta trame de Fourier, puis apres en dehors.
Pour voir comment faire un phase unwrapping, tu peux voir la un code matlab que j'ai poste il y a un moment deja la:
http://www.musicdsp.org/files/vocoder.m
(le code suivant est pour une frame seulement du signal E, h est ta fenetre)
C'est pour un pitch shift en vocoder de phase, mais le principe est grosso modo le meme que pour ce que tu veux faire.
Pour voir comment faire un phase unwrapping, tu peux voir la un code matlab que j'ai poste il y a un moment deja la:
http://www.musicdsp.org/files/vocoder.m
(le code suivant est pour une frame seulement du signal E, h est ta fenetre)
%===================================================
% ( classic analysis part of a phase vocoder )
% Take a frame, and window it
X = h.*E((loop-1) * La + 1loop-1)*La + Nfft);
% XI is the amplitude spectrum, and Phia2 the phase spectrum.
tX = fft(X, Nfft);
Xi = abs(tX);
Phia2 = angle(tX);
%=================================================================
% the part which actually does the time scaling
% One compute the actual pulsations, and shift them. The tricky part
% is here...
omega = mod( (Phia2-Phia1)-2*pi*([0:Nfft-1].')/Nfft * La + pi, 2*pi) - pi;
omega = 2 * pi * ([0:Nfft-1].') / Nfft + omega / La;
Phis2 = Phis1 + lss_frame*omega;
% The new phases values :
Phis1 = Phis2;
Phia1 = Phia2;
%===========================================================
% Synthetise the frame, thanks to the
% computed phase and amplitude spectrum :
% ( classic synthesis part of a phase vocoder )
tfs = Xi.*exp(j*Phis2);
Xr = real(ifft(tfs)).*h;
% overlapp-add the synthetised frame Xr
S((loop-1)*lss_frame+1 : (loop-1) * lss_frame + Nfft) ...
= S((loop-1) * lss_frame + 1loop-1) * lss_frame + Nfft) + Xr;
C'est pour un pitch shift en vocoder de phase, mais le principe est grosso modo le meme que pour ce que tu veux faire.
0

pet.delascar
14

Nouvel·le AFfilié·e
Membre depuis 20 ans
179 Posté le 01/02/2007 à 14:06:32
Pov Gabou peux-tu m'expliquer brievement ce que tu fais là?
0

Pov Gabou
19553

Drogué·e à l’AFéine
Membre depuis 23 ans
180 Posté le 01/02/2007 à 16:28:44
C'est assez simple une fois que tu comprends le principe. Imagine que tu as une seule sinusoide a une frequence f dont tu dois calculer l'increment de phase au temps t+1 a partir du temps t. Si tu connais sa frequence, tu sais comment calculer la valeur du signal a tout instant. L'idee est d'etendre ca a une serie de sinusoides.
Une tranformee de Fourier, c'est rigoureusement equivalent a un banc de filtre, ou chaque bande correspond a une des frequence d'analyse. En regardant une bande k quelconque, tu supposes que tu as au max une sinusoide (une sinusoide par bande). Si tu sais quelle est la frequence de cette sinusoide, c'est tres facile de calculer quelle doit etre sa phase a tout instant: de sin(2 * pi * f * tn + phi), tu vas a sin(2 * pi * f * t(n+1) + phi). L'idee est donc de calculer la frequence f de la sinusoide dans cette bande.
L'idee c'est de calculer le decalage de phase entre t(n+1) et tn. Tu as, en considerant la frequence constante entre tn et t(n+1):
sin(wk * tn + phase) a la fenetre tn
sin(wk * t(n+1) + phase) a la fenetre t(n+1).
Donc l'increment total a l'interieur de ton sinus, c'est tout simplement wk * {t(n+1) - tn}. L'idee est de calculer l'argument principal (entre -pi et pi) de cet increment, et d'en deduire la frequence:
omega = mod( (Phia2-Phia1)-2*pi*([0:Nfft-1].')/Nfft * La + pi, 2*pi) - pi;
que tu peux lire comme: pour chaque bande k, calcule la frequence :
2 * pi *f(k) = mod (increment_phase a la bande k - increment_central a la bande k + pi, 2 pi) - pi
(omega etant la pulsation: w = 2 * pi * f, et increment_central correspondant a l'increment theorique si la sinusoide etait centree sur la bande k). Apres, comme tu connais la frequence de ta sinusoide, tu sais exactement combien rajouter a la phase pour avoir continuite, et ce pour chaque bande.
Si la frequence est constante entre deux fenetres, et que tu as une seule sinusoide dans chaque bande, cette methode te permet de faire un pitch shift parfait. Tout le probleme etant evidemment que si tu as des fenetres courtes (pour avoir le moins de changement possible de frequence), tu perdes en resolution frequentielle, et donc tu as plus de chance d'avoir plusieurs sinusoides dans une bande. C'est la fameux compromis temps frequence.
Dans ton cas, c'est un peu different, mais le principe fondamental est le meme: un point d'analyse de fft k (un point = un bin; tu as N bins pour une fft de N points) correspond a un filtre centre a la frequence fs / Nfft * k ou Nfft est le nombre de points de ta FFT, fs la frequence d'echantillonage.
Une tranformee de Fourier, c'est rigoureusement equivalent a un banc de filtre, ou chaque bande correspond a une des frequence d'analyse. En regardant une bande k quelconque, tu supposes que tu as au max une sinusoide (une sinusoide par bande). Si tu sais quelle est la frequence de cette sinusoide, c'est tres facile de calculer quelle doit etre sa phase a tout instant: de sin(2 * pi * f * tn + phi), tu vas a sin(2 * pi * f * t(n+1) + phi). L'idee est donc de calculer la frequence f de la sinusoide dans cette bande.
L'idee c'est de calculer le decalage de phase entre t(n+1) et tn. Tu as, en considerant la frequence constante entre tn et t(n+1):
sin(wk * tn + phase) a la fenetre tn
sin(wk * t(n+1) + phase) a la fenetre t(n+1).
Donc l'increment total a l'interieur de ton sinus, c'est tout simplement wk * {t(n+1) - tn}. L'idee est de calculer l'argument principal (entre -pi et pi) de cet increment, et d'en deduire la frequence:
omega = mod( (Phia2-Phia1)-2*pi*([0:Nfft-1].')/Nfft * La + pi, 2*pi) - pi;
que tu peux lire comme: pour chaque bande k, calcule la frequence :
2 * pi *f(k) = mod (increment_phase a la bande k - increment_central a la bande k + pi, 2 pi) - pi
(omega etant la pulsation: w = 2 * pi * f, et increment_central correspondant a l'increment theorique si la sinusoide etait centree sur la bande k). Apres, comme tu connais la frequence de ta sinusoide, tu sais exactement combien rajouter a la phase pour avoir continuite, et ce pour chaque bande.
Si la frequence est constante entre deux fenetres, et que tu as une seule sinusoide dans chaque bande, cette methode te permet de faire un pitch shift parfait. Tout le probleme etant evidemment que si tu as des fenetres courtes (pour avoir le moins de changement possible de frequence), tu perdes en resolution frequentielle, et donc tu as plus de chance d'avoir plusieurs sinusoides dans une bande. C'est la fameux compromis temps frequence.
Dans ton cas, c'est un peu different, mais le principe fondamental est le meme: un point d'analyse de fft k (un point = un bin; tu as N bins pour une fft de N points) correspond a un filtre centre a la frequence fs / Nfft * k ou Nfft est le nombre de points de ta FFT, fs la frequence d'echantillonage.
0

pet.delascar
14

Nouvel·le AFfilié·e
Membre depuis 20 ans
181 Posté le 02/02/2007 à 11:58:38
Cela semble impliquer que j'ai besoin de faire du suivi de trajectoire s'il faut que ma fréquence soit constante entre 2 fenêtres. ça complique la tache...
Merci les gars.
Merci les gars.
0

Pov Gabou
19553

Drogué·e à l’AFéine
Membre depuis 23 ans
182 Posté le 02/02/2007 à 12:27:55
Non non, tu supposes qu'elle l'est, c'est tout.
0
- < Liste des sujets
- Charte