Comparaison de synthèses : modulation de phase et modulation de fréquence
- 40 réponses
- 8 participants
- 13 316 vues
- 9 followers
Dr Pouet
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
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 ]
- 1
- 2
lulumusique
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 ![]()
plutonak
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 ?
Danguit
Choc
DrPouet > Ca date![]()
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 !
Site personnel: https://www.enib.fr/~choqueuse/
plutonak
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 ?
Choc
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
Site personnel: https://www.enib.fr/~choqueuse/
[ Dernière édition du message le 24/08/2010 à 20:46:40 ]
Danguit
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.
Choc
Oui oui, je suis d'accord...ce qui compte c'est le resultat sonore...
Site personnel: https://www.enib.fr/~choqueuse/
plutonak
Danguit, peux-tu partager ton code scilab ? merci
Danguit
plutonak
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...
Danguit
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
//********************
Choc
Site personnel: https://www.enib.fr/~choqueuse/
Danguit
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.
[ Dernière édition du message le 26/08/2010 à 09:31:29 ]
Anonyme
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'à...
plutonak
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 ]
- < Liste des sujets
- Charte
- 1
- 2

