Se connecter
Se connecter

ou
Créer un compte

ou
FR
EN
Synthèse Sonore

Comparaison de synthèses : modulation de phase et modulation de fréquence

  • 40 réponses
  • 8 participants
  • 13 316 vues
  • 9 followers
Sujet de la discussion Comparaison de synthèses : modulation de phase et modulation de fréquence
Sujet lancé par Yohda :


Citation de Pluton35 :
Voilà, j'espère que les choses sont plus claires maintenant. Vivement que l'on s'intéresse à la modulation de fréquence (ou de phase, qui n'est pas la même chose, du moins mathématiquement)

Que veut tu dire par "qui n'est pas la même chose" ?

Parce qu'a l'oreille c'est identique à partir de quelques Hz du moins. Et j'avais lu que c'était équivalent mathematiquement.

http://cours.musique.umontreal.ca/mus1321/Notes_de_cours/Csound_04_SynthMod.html

Citation :
Mais il faut savoir que modulation de fréquence et modulation de phase sont équivalentes. En effet, moduler la phase avec la fonction m(t) revient à moduler la fréquence avec m'(t), la dérivée de m(t). Donc, si une fonction sinus module la phase, une fonction cosinus (sa dérivée) module la fréquence.

On peut facilement montrer qu'une modulation de phase d'amplitude I est équivalente à modulation de fréquence d'amplitude D = I M, sachant que la dérivée en fonction du temps t du sinus de (ω t) est le cosinus (ω t) multiplié par la fréquence angulaire ω :
(sin ω t)' = ω cos ω t


Ainsi, en dérivant par rapport au temps le signal modulant la phase

Φ = I sin(ωM t )

on obtient le signal modulant la fréquence :

Φ' = I ωM cos(ωM t )


Ce qui donne l'expression suivante pour y :
y = A sin[ (ωC + I ωM cos(ωM t )) t ]




[ Dernière édition du message le 05/08/2010 à 10:07:47 ]

Afficher le sujet de la discussion
26

si j'ai bien compris:

la phase instantanée est l'ensemble de ce qu'il y a dans le sinus (ou cosinus).

la pulsation instantanée est la dérivée de la phase instantanée et inversement la phase instantanée est l'intégrale dans le temps de la pulsation instantanée...

 

donc après ce n'est plus qu'une question de dérivation/intégration d'une sinusoide à une fréquence donnée qui donne une autre sinusoide à la même fréquence... grossièrement icon_smile.gif

27

remarque: la fréquence instantanée d'un signal semble pouvoir être retrouvée par la transformée de Hilbert-Huang. Sinon, le FM8 fonctionne comment alors  ?

 

28

Pour info, il semble y avoir des articles intéressants, théoriques et pratiques à partir de ce lien : https://en.wikipedia.org/wiki/Frequency_modulation_synthesis  

Passer pour un idiot aux yeux d'un imbécile est une volupté de fin gourmet. (G. Courteline)

29

 

DrPouet > Ca date icon_boire.gif

 

 

Citation de lulumusique :

donc après ce n'est plus qu'une question de dérivation/intégration d'une sinusoide à une fréquence donnée qui donne une autre sinusoide à la même fréquence... grossièrement

Yep c'est ca ! 

Citation de pluton 35 :

se placer dans un cadre non-harmonique et faire appel à la transformée de Fourier, c'est un peu difficile, d'où l'hypothèse déjà évoquée plus haut de se restreindre aux signaux périodiques.

 Dans le cas d'une sinusoide modulé en phase (ou fréquence) par une sinusoide c'est pas trop compliqué...en fait vu l'equation:


on trouve directement la transformée de fourier...celle ci est egale à:

X(f)=sum_{n=-infty}^{infty}A.J_n(beta).(delta(f-(fp+nfm))+delta(f+(fp+nfm))

donc une infinité de pics, placés aux fréquences fp+nfm (n entier) et dont l'amplitude est donnée par le coefficient de bessel Jn(beta)...un simple changement de l'index de modulation beta peut avoir une repercution importante sur les amplitudes des composantes fréquentielles.

Citation de pluton35 :

remarque: la fréquence instantanée d'un signal semble pouvoir être retrouvée par la transformée de Hilbert-Huang

 En régle general oui, mais dans certains cas c'est comme utiliser une ferrari dans une route limitée a 30km/h.

  • Si x(t)=sin(O(t)), alors O(t) peut etre retrouvé simplement (avec des ambiguités potentielles) via la fonction arcsin..c-a-d O(t)=arcsin(x(t))
  • Si x(t)=a(t)sin(O(t)), c-a-d un signal monocomposante modulé en phase et en amplitude, on peut utiliser la transformée de Hilbert ou alors l'operateur d'énergie de Teager...
  • Si x(t)=sum_{n}a_{n}(t)sin(O_{n}(t)), c-a-d un signal mutlicomposante la decomposition modale empirique (EMD) permet de séparer les différents élements de la somme...ensuite on revient dans le cas precedant et on peut utiliser soit Hilbert soit Teager...On donne également le nome de transformée de Hilbert/Huang ou Teager/Huang pour cette approche.

 

Citation de pluton35 :

Sinon, le FM8 fonctionne comment alors  ?

 Dans les synthé, il n'est pas necessaire d'estimer la fréquence instantanée ou la phase instantanée...EN fait, dans le FM8, le coeur du moteur de synthèse c'est la matrice placée à droite..

 

Le FM8 possede plusieurs oscillateurs...(A,B,C,D etc). A chaque oscillateur on spécifie une forme d'onde (sinusoide, mais pas seulement), une fréquence fondamentale (par rapport à la note jouée). Ensuite la matrice permet de specifier qui module qui. Le nombre specifié entre le modulateur et le modulant correspond à l'index de modulation. On concoit assez bien que, même si dans des cas simples le signal de sortie peut se calculer facilement, dans le cas général c'est beaucoup plus compliqué !

Dans le FM8, il y a une previsualisation de la forme d'onde et du spectre de sortie. A mon avis, tout cela est calculé à partir d'une rapide simulation !

30

merci pour ces détails. La série série impliquant les fonctions de Bessel ressemble, je crois, à une double série de Fourier en m*fp+n*fm pour les signaux apériodiques, composés de deux fréquences sans dénominateur commun, mais limitée à m=1. On obtient alors la série de Fourier simple d'un signal xp(t), qui peut ne pas être périodique du fait de la présence de fp. C'est un cas assez particulier j'ai l'impression : je me trompe ?

31

Je suis pas assez callé sur la question...en tout cas lorsque fm=fp on obtient bien directement la decomposition en série de fourier d' un signal périodique de période 1/fm

[ Dernière édition du message le 24/08/2010 à 20:46:40 ]

32

Pour en revenir à la question initiale, l'une des conclusions dès le premier post était que pour une fréquence de modulation sinusoïdale, les deux types de modulations sont équivalents (avec quand même un déphasage quelque part).

Après quelques petits calculs, je me suis fait un petit script Scilab. Celui-ci me permet pour l'instant de générer les modulations, de modifier les paramètres (Fp, Fm, m), de visualiser la forme temporelle et le module du spectre, et d'écouter en stéréo d'un côté la PM de l'autre la FM. Accessoirement, cela permet aussi de constater l'effet du repliement quand l'indice de modulation induit des fréquences > fe/2.

On constate bien que les formes temporelles sont légèrement différentes et que les module des spectres sont identiques.

A l'écoute au casque, les deux sons me paraissent identiques, mais le positionnement par rapport au centre varie en fonction des paramètres. 

On peut évidemment arriver à ces conclusions de façon purement mathématique, mais je trouve que l'expérimentation a aussi de bons côtés, notamment quand on veut faire de la musique.

Passer pour un idiot aux yeux d'un imbécile est une volupté de fin gourmet. (G. Courteline)

33

Oui oui, je suis d'accord...ce qui compte c'est le resultat sonore...

34

Danguit, peux-tu partager ton code scilab ? merci

35

Pas de problème, sachant qu'il ne contient rien de révolutionnaire et que je ne suis pas (encore) un pro de Scilab.

Il suffit de m'indiquer où l'envoyer.

Passer pour un idiot aux yeux d'un imbécile est une volupté de fin gourmet. (G. Courteline)

36

ah. En fait, je pensais directement sur le forum. Ça peut intéresser plusieurs personnes, non ? Je me demande dans quelle mesure une section scilab sur AF ne serait pas recommandée. On pourrait s'échanger des morceaux de code qui font des sons bizarres...

37

Bon, on va essayer :

// exemple PM&FM - DQ 20100825 -
// Init
gstacksize('max');
stacksize('max');
// Prélim
fs=44100;
dt=1/fs;
npts=2^16
npf=npts/2;
npgr0=500; // Par défaut : loupe pour graphe temporel
df=fs/npts;
fr=[1:npf].*df;
ts=[1:npts].*dt;
// Param init
f0=100*sqrt(5);
fm=1000//*sqrt(2);
pham=1//2.4048;
choix=1;
// Boucle Calcul
while choix==1
  clf(0); clf(1);
  Sp1=[]; xmpm=[]; xmfm=[]; Stereo=[];
  txt=["Porteuse";"Modulation";"Indice"];
  sig=x_mdialog('Paramètres Modulation',txt,[string(f0);string(fm);string(pham)])
  f0=evstr(sig(1))
  fm=evstr(sig(2))
  pham=evstr(sig(3))
  param='Fp='+sig(1)+'Hz - Fm='+sig(2)+'Hz - Ind='+sig(3);
  Bp=2*(pham+1)*fm // Estimation grossière de la bande
  // Signaux
  xmpm=cos(2*%pi*fm*ts);
  xmfm=sin(2*%pi*fm*ts);
  Stereo(1,:)=cos(2*%pi*f0*ts+pham*xmpm); // PM
  Stereo(2,:)=cos(2*%pi*f0*ts+pham*xmfm); // FM
  //Spectre
  Sp1=fft(Stereo(1,1:npts)); // Fenêtre rectangulaire pour l'instant
  Sp1=Sp1(1:npf);
  // Essai d'optimisation de la fenêtre temporelle
  [ma,ka]=max(abs(Sp1));
  npgr=min(max(5/(ka*df)/dt,npgr0),npgr0*5);
  //Graphe Temporel
  subplot(2,1,1)
  xtitle(param,'t (s)');
  coul='b';
  if Bp>fs/2 then
    coul='r'; // Attention au repliement !
    legends('Attention au repliement !',1,2);
  end  
  plot(ts(1:npgr),Stereo(1,1:npgr),coul);
  //Graphe Spectre
  subplot(2,1,2)
  xtitle('Spectre','F (Hz)');
  plot(fr,abs(Sp1),coul);
  a=gca(); a.log_flags = "lln";
  // Ecoute
  playsnd(Stereo,fs);
  // Fin ?
  choix=x_choose(['Autre calcul'],['Choix'],'Fin')
end
//********************

Passer pour un idiot aux yeux d'un imbécile est une volupté de fin gourmet. (G. Courteline)

38
A la vue de ton utilise ici simplement une modulation de phase. Remarque aussi que xmpm et xmfm sont les mêmes signaux au détail près qu'ils sont simplement déphases de pi/2.
39

Si je ne m'abuse, si je ne suis pas trompé dans mon petit calcul, et comme le rappelle le premier post, Citation :

Donc, si une fonction sinus module la phase, une fonction cosinus (sa dérivée) module la fréquence.

Le fait que j'ai utilisé la même variable (pham) pour les 2 peut effectivement prêter à confusion. 

EDIT du 26/8 : 

Le script a été écrit pour mon usage et n'avait pas de vocation pédagogique. Quelques précisions sont donc peut-être utiles.
Le signal modulant est cos(Om_m*ts) avec Om_m=2*%pi*fm.
Dans le cas d'une modulation de phase, on retrouve bien ce cosinus multiplié par pham correspondant à l'excursion max de phase (qui est aussi l'indice de modulation).
Dans le cas d'une modulation de fréquence, il faut intégrer le signal modulant, ce qui donne 1/(Om_m)*sin(Om_m*ts) à multiplier par l'excursion Delta_Om.

Comme l'indice de modulation est égal à Delta_Om/Om_m, on retrouve bien la même formule qu'en modulation de phase, mais avec un sinus à la place du cosinus.

 

 

Passer pour un idiot aux yeux d'un imbécile est une volupté de fin gourmet. (G. Courteline)

[ Dernière édition du message le 26/08/2010 à 09:31:29 ]

40

j'ai lu en détail les docs originales rédigées par J CHOWNING, pour vous épargner la lecture en anglais j'ai trouvé 2 sites qui résume la FM :

http://cours.musique.umontreal.ca/mus1321/Notes_de_cours/Csound_04_SynthMod.html

qui contient d'ailleurs bcp de choses : http://cours.musique.umontreal.ca/mus1321/

et

http://dept-info.labri.u-bordeaux.fr/~sm/Enseignements/Master/2/ASSM/modulation.pdf

Quand vous aurez lu (et compris) tout ça : ya plus qu'à...

 

41
15 ans ont passé, il n'est jamais trop tard ! :) Bon, en fait, les choses sont relativement simples, en tous les cas pour les signaux porteurs sinusoïdaux. Le cadre général est celui-ci : soit un signal x(t) = sin(Φ(t)) où Φ(t) est une fonction qui dépend du temps et représentant la phase. Exemple classique Φ(t) = ωt. La fréquence (instantanée) est la dérivée par rapport au temps de Φ(t), notée Φ'(t) (pour comprendre, il faut connaître les dérivées de fonctions!). Exemple : Φ(t) = ωt implique Φ'(t) = ω (fréquence constante, donc). Ensuite, tout dépend de ce que l'on souhaite faire : moduler Φ(t) ou Φ'(t). Si on décide de moduler Φ'(t), il faut ensuite remonter à Φ(t) par intégration (l'inverse de la dérivée), ce qui n'est pas toujours simple. Autrement dit, il faut toujours (re)construire la phase Φ(t) pour obtenir la forme du signal mais l'oreille est plutôt habituée à Φ'(t) (la fréquence).

Prenons l'exemple d'une fréquence constante ω avec une petite modulation cos(αt). On a donc Φ'(t) = ω + cos(αt) : la fréquence instantanée est centrée autour de ω (supposée assez grande par rapport à 1) avec de petites fluctuations de "fréquence" α. Par intégration, on obtient Φ(t) = ωt + (1/α)sin(αt). Le terme cos(αt) module la fréquence, ce qui est équivalent à dire que le terme (1/α)sin(αt) module la phase (ici, de manière additive, mais il y a certainement d'autres possibilités).

Un autre exemple intéressant illustre une erreur classique : on souhaite passer d'un sin(ω1*t) à un sin(ω2*t) dans un intervalle de temps donné, disons [0, T] (une sorte de legato si je ne me trompe pas). On a donc une fréquence instantanée que l'on note ω(t). A t = 0, ω(t=0) = ω1 et à t = T, ω(t=T) = ω2. Une manière de paramétrer ω(t) selon t est d'écrire ω(t) = ω1*(1-t/T) + ω2*t/T (qui est une modulation de fréquence en quelque sorte) et l'on vérifie que les conditions ci-dessus sont vérifiées à t = 0 et t = T. On a donc ω(t) = Φ'(t) = ω1 + (ω2 - ω1)*t/T. Par intégration, on obtient Φ(t) = ω1*t + (ω2 - ω1)*t^2/(2T) (bien faire attention au terme 1/(2T) et non pas 1/T comme on pourrait le croire intuitivement) et le signal qui permet d'entendre ce legato est donc sin(ω1*t + (ω2 - ω1)*t^2/(2T)). L'erreur classique, c'est d'écrire qu'une fois que l'on a choisi une fréquence instantanée ω(t), on revient au signal écouté en écrivant x(t) = sin(ω(t)*t) soit Φ(t) = ω(t)*t . Ceci est FAUX! En effet ∫ω(t)dt (opération d'intégration, inverse de la dérivée) n'est pas égal à ω(t)*t. Il est assez simple de vérifier avec sin(ω(t)*t) = sin(ω1*t + (ω2 - ω1)*t^2/T) [incorrect] que la fréquence instantanée en t = T est 2ω2, deux fois plus élevée qu'espéré !

Morale de l'histoire selon moi : il est un peu plus intuitif d'imaginer des sons en travaillant avec Φ'(t) (modulation de fréquence) mais il faut remonter à Φ(t) (et donc à la modulation de phase équivalente) par intégration pour une implémentation algorithmique du son recherché. Cette opération n'est pas toujours simple et peut être coûteuse en CPU.

[*]Commentaire 1: ce qui est écrit ci-dessus fonctionne seulement quand le signal porteur est sinusoïdal. Il faudrait potasser la question pour un signal porteur plus sophistiqué (carré, triangle...)[newline]
[*]Commentaire 2: la plupart des liens url indiqués dans le fil de discussion sont obsolètes. Dommage.

[ Dernière édition du message le 09/06/2025 à 23:22:05 ]