Se connecter
Se connecter

ou
Créer un compte

ou
FR
EN

TIPE synthese sonore: analyse/resynthese additive par temps fréquence

  • 181 réponses
  • 10 participants
  • 21 044 vues
  • 12 followers
Sujet de la discussion TIPE 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.
Afficher le sujet de la discussion
176
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.

http://soundcloud.com/bat-manson

177
Batman a batcerné mon batprobleme.
178
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)

%===================================================
% ( classic analysis part of a phase vocoder )
% Take a frame, and window it

X = h.*E((loop-1) * La + 1:(loop-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 + 1:(loop-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.
179
Pov Gabou peux-tu m'expliquer brievement ce que tu fais là?
180
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.
181
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.
182
Non non, tu supposes qu'elle l'est, c'est tout.