Retour à la page d'accueil

CALCUL DE LA DISSONANCE DE DEUX SONS PURS


Le principe de ce calcul est le suivant.
- Pour deux sons d'amplitude égale à l'unité, la dissonance est donnée par la formule 118*x*x*exp(-8*x), où x est calculé à partir des fréquences, via la bande critique. Cette dissonance "unitaire", ou "dureté propre", dp, n'est appréciable que dans la bande critique. CECI EST IMPORTANT. LA DISSONANCE SERA DE TOUTE MANIÈRE NÉGLIGEABLE, SI LES DEUX SONS PURS SONT DISTANTS DE PLUS D'UNE BANDE CRITIQUE. ENSUITE, MÊME EN COMPOSITION AVEC UN AUTRE COUPLE DISSONANT, ILS N'INTERVIENDRONT PAS.
- Si les amplitudes ne sont pas égales à l'unité, je suppose que les sons produisent une intensité psychologique des battements (IBpsy) selon une formule semblable à celle qui relie l'intensité sonore psychologique (en sones) à l'intensité physique d'un son (en phone); cette formule, on le sait, est approximativement y = 0,0625 (I/I0)^0,3.  Or Helmholtz montre que l'énergie des battements est proportionnelle au produit des amplitudes des deux sons purs battants (p. 308 de mon article). L'intensité sonore dans le cas d'un seul son, le "I" de la formule (en watt par mêtre carré), peut donc avec une certaine vraisemblance être remplacée par le produit des amplitudes dans le cas du battement de deux sons battants. D'où la formule IBpsy = 0,0625 (A1*A2/I0)^0,3. I0 n'est défini qu'a une constante pres.
- La dissonance de deux sons d'amplitudes égales mais non unitaires est égale au produit de l'intensité psychologique des battements par la dureté propre : IBpsy*dp.



CALCUL SIMPLIFIÉ: ADDITION PURE ET SIMPLE DE TOUTES LES DISSONANCES
c'est-à-dire en considérant les contributions comme situées dans des bandes critiques distinctes


Je commence un premier calcul qui néglige ces différences, c'est-à-dire qui suppose que les dissonances s'ajoutent purement et simplement.
La notion de bande critique, ici, ne sert qu'à calculer la dissonance de deux sons purs (dis).
> restart;
Je fais varier la fréquence du second son de l'unisson jusqu'à l'octave du premier son.
> F2:=F1*k;
Je prends la même variable x que dans les feuilles précédentes, afin de définir la dureté propre dp (que j'appelle dis dans la feuille VERSION1, mais dp ensuite. Valeur de la théorie psychologique contemporaine (selon Pierce, Le son musical, p. 77)).

> x:=abs(F2*n-F1*m)/(0.2022*sqrt(1408969+F1*m*F2*n)-150):dp:=118*x^2*exp(-8*x);

REMARQUE.
Autour de la fréquence f, la bande critique est définie par la fonction
bc:=f->0.2022*sqrt(1408969+f^2)-150;
et la variable x, pour deux sons de fréquence fA et fB, est :
x:=(fA,fB)->abs(fB-fA)/bc((fA+fB)/2);
c'est-à-dire que dans x, c'est la bande critique de la moyenne arithmetique des fréquences qui intervient.
En revanche, dans le x choisi ci-dessus, au lieu du carré de la moyenne arithmétique, on a mis le produit des fréquences; cela veut donc dire que c'est la bande critique de la moyenne géométrique qui intervient. La différence est sans grande importance.

J'introduis maintenant l'intensité psychologique, proportionnelle à la puissance 0.3 de l'intensité physique des battements. Le calcul de cette dernière par Helmholtz paraît bon, c'est-à-dire qu'il est justifié de prendre cette intensité proportionnelle au produit des amplitudes. Ces amplitudes sont A/m et B/n, A et B étant celles de partiels fondamentaux.
Remarque : dans la feuille VERSION2, je prends à tort l'intensité psycho comme la combinaison, dans la bande critique, des intensités ordinaires physiques des deux sons, c'est-à-dire que je prends (A/m^2+B/n^2)^0.3 (dans la version 2.2, je prends seulement min(A/m^2,B/n^2)^0.3 ). Mais ces solutions sont fausses, car l'energie des battements se distingue de l'energie proprement dite des sons.

> IBpsy:=0.0625*(A/m*B/n/I0)^0.3;
> DIS:=IBpsy*dp;

CAS DE DEUX SONS PURS D'ÉGALE INTENSITÉ
Voici ce que produit ce calcul pour la dissonance des deux partiels fondamentaux. Dans ce cas, la dissonance s'identifie à la dureté propre, puisqu'il n'y a que deux sons purs d'égale intensité.
Il faut fixer la valeur des constantes A, B, I0, F1.
> A:=100;B:=100;I0:=1;F1:=440;
J'annule cette ligne d'instructions, afin de poursuivre les calculs plus bas.
> #m:=1;n:=1;plot(DIS,k=1..2);

CAS DE DEUX SONS DENTS DE SCIE DONT LES PARTIELS ONT MÊME INTENSITÉ

Il faut sommer deux fois 10 termes. La sommation fonctionne et donne bien 100 termes. Je ne les affiche pas, cela prendrait plusieurs pages (utilisation de ":" au lieu de ";").
Cette sommation suppose donc que les dissonances sont indépendantes et s'ajoutent arithmétiquement. Cela n'est pas vrai si les sons qui les produisent sont dans une même bande critique. L'addition est alors moins efficace. Un calcul plus précis devra être fait ensuite.

ATTENTION! m et n ayant reçu la valeur 1 dans l'instruction précédente, il faut reprendre au début (restart;) et passer la ligne attribuant la valeur 1 à m et n.

> DIStotale:=sum(sum(DIS,m=1..10),n=1..10):
Et maintenant le graphique, puisque Maple a l'air de bien vouloir avaler tous ces calculs.
Je fais le graphique de la dissonance totale pour la fréquence du second son variant de l'unisson jusqu'à l'octave, donc pour k de 1 à 2.
> plot(DIStotale,k=1..2,color=black);

Par "curiosité", je calcule la courbe qui ne tient compte que des 6 premiers partiels, c'est-à-dire ceux pour lesquels l'atténuation reste faible.
> DISunquatre:=sum(sum(DIS,m=1..6),n=1..6):
> plot(DISunquatre,k=1..2, color=black);



CALCUL NON SIMPLIFIÉ
c'est-à-dire tenant compte des chevauchements de bandes critiques


J'adopte un principe d'affaiblissement de l'effet de dissonance consistant à ne conserver que la dissonance la plus intense, de deux dissonances situées dans une même bande critique. Évidemment, cette méthode risque de supprimer beaucoup de contributions des partiels de rangs élevés.
Dans cette méthode, il faut donc, pour chaque couple produisant une dissonance non nulle, mettre en mémoire la bande critique sur laquelle il s'étale. Ensuite, quand on rencontre un nouveau couple, s'il se situe dans une bande critique mise en mémoire, on peut le laisser tomber.

Un autre procédé consiterait à multiplier par un facteur inférieur à 1 la somme des n contributions situées dans une même bande critique. Pour deux contributions de même amplitude, il faut prendre 1.26/2 = 0,63, pour trois environ 0,5 (cf. mon fichier Word "Additions psycho-sonores.doc"). En fait, les couples auront des intensités distinctes et il faudrait affiner; toutefois, comme on se trouve dans des rangs élevés de partiels, les différences d'intensité ne sont pas très grande. Conclusion pour cette seconde méthode : multiplier par 0,5 les contributions dans une même bande critique.

Étudions le premier procédé.
Voyons comment les partiels 8 et 9 peuvent interférer.
9*440 = 3960. (3960+30)/8 = 498,75 = 499.
Calculons les fréquences extrêmes des bandes critiques de tous les couples de partiels de rangs r, 7<=r<=10. Cela fait 16 bandes :
7-7, 7-8, 7-9, 7-10, 8-7, ..., 10-10.
> restart;
> F1:=440;F2:=499;
> fmoy:=sqrt(F1*m*F2*n);bc:=0.2022*sqrt(1408969+fmoy^2)-150;
> bcinf:=fmoy-bc/2;bcsup:=fmoy+bc/2;
> printlevel:=2:# On a besoin de l'instruction printlevel pour afficher le contenu de la boucle imbriquée (p. 391)

> Digits:=4:# Pour supprimer les décimales dans l'affichage du nombre à 4 chiffres des limites de bandes critiques

J'affiche respectivement m, n, la fréquence f1=440*m, la fréquence f2=499*n, la fréquence inf de la bc, la fréquence sup de la bc.
> for m from 7 to 10
>    do
> for n from 7 to 10
>    do
> evalf(m),evalf(n),evalf(F1*m),evalf(F2*n),evalf(bcinf),evalf(fmoy),evalf(bcsup)
>    od
>    od;
          
Le tableau obtenu montre :
- que les couples suivants ne produisent pas de dissonances, parce que f1 ou f2 sont hors de la bc : 7-8, 7-9, 7-10, 8-9, 8-10, 9-10, 10-7. Les seules dissonances sont donc:
  7-7, 8-7, 8-8, 9-7, 9-8, 9-9, 10-8, 10-9, 10-10.
Selon la méthode, fmoy(8-7)=3506 déjà dans bc(7-7) donc ignoré. On garde: bc(7-7)=[3002-3558], bc(8-8)=[3425-4071].
fmoy(9-7)=3720 déjà dans bc(8-8) -> ignoré. fmoy(9-8)=3976 déjà dans bc(8-8) -> ignoré. fmoy(9-9)=4218) -> on garde bc(9-9)=[3850-4586].
fmoy(10-8)=4192 déjà dans bc(9-9) -> ignoré. fmoy(10-9)=4446 déjà dans bc(9-9) -> ignoré. fmoy(10-10)=4686 -> on garde bc(10-10)=[4272-5100].

Bilan : on garde 7-7, 8-8, 9-9, 10-10.

Première étape des calculs : limiter les dissonances aux bandes critiques

Je supprime cette étape. Les calculs montrent qu'il y a très peu de différence avec le cas où l'on prend la dissonance non nulle en dehors des bandes critiques. Voir la version antérieure 3. Je redonne toutefois le résultat à la fin de cette feuille, pour le comparer aux autres calcul.



Seconde étape des calculs :
Atténuer les contributions dissonantes situées dans une même bande critique



Il faut commencer par étudier les bandes critiques.

Commençons par le calcul pour une valeur de k donnée, par exemple 1,48  (un peu en dessous de la quinte).
> restart;
> k:=1.48;
> bc:=f->0.2022*(1408969+f^2)^.5-150;# Ne pas mettre la fonction sqrt au lieu de ^.5. Maple refuse de calculer.
> x:=(fA,fB)->abs(fB-fA)/bc((fA+fB)/2);# Je prends la moyenne arithmétique... pas gênant.
> dp:=x->118*x^2*exp(-8*x);
> IBpsy:=(m,n)->(1/m/n)^0.3;# Il se trouve que A=B=100 et I0=1 produisent une constante = 0,99..

REMARQUE. Je prévoyais d'abord ceci :
Il faut faire croître m et n simultanément, par valeurs croissantes de m+n. On prend p de 2 à 20, m de 1 à 10, n:=p-m en résultant. Donc les boucles :
for p from 2 to 20 do for m from 1 to p-1 do   do;od;
On aura ainsi successivement les couples p,m : 2,1;3,1;3,2;4,1;4,2;4,3;5,1... soit les couples m,n : 1,1;1,2;2,1;1,3;2,2;3,1;1,4...
Avec cette suite de couples on sélectionne les seules bandes critiques qui donnent une dissonance non nulle, c'est-à-dire qui contient bien les deux partiels générateurs de la bande critique.
(pour mémoire, la programmation pour les boucles devaient être :
for p from 2 to 20
   do
for m from max(1,p-10) to min(p-1,10)# Pour 2<=p<=11 1<=m<=p-1, pour 12<=p<=20 p-10<=m<=10
      do
n:=p-m;)

LE CALCUL A MONTRÉ QUE CE CLASSEMENT DES COUPLES N'EST PAS PERTINENT. On obtient exactement le même tableau qu'en faisant croître m de 1 à 10 et n de 1 à 10 par deux boucles imbriquées. JE LAISSE DONC TOMBER ET PASSE AU CALCUL DES DISSONANCES DES COUPLES, AVEC LEURS BANDES CRITIQUES.

Je calcule ci-dessous un tableau des couples de dissonances, affichant successivement :
rang du couple, m, n, fréquence moyenne des sons battants, [fréquence inf., fréquence sup. de la bande critique], valeur de la dissonance
> i:=1;

> for m from 1 to 10
>    do
> for n from 1 to 10
>       do
> fmoy:=(440*m+440*k*n)/2;
> if (min(440*m,440*k*n)<fmoy-bc(fmoy)/2 or max(440*m,440*k*n)>fmoy+bc(fmoy)/2)
>    then 0
> else DIS[i]:=IBpsy(m,n)*dp(x(440*m,440*k*n));BC[i]:=[fmoy-bc(fmoy)/2,fmoy+bc(fmoy)/2];
> M[i]:=m;N[i]:=n;FMOY[i]:=fmoy;
> i:=i+1;
> fi;
>       od;
>    od;

> evalf(i-1);
Il n'y a que 12 couples (sur 100) donnant une dissonance non nulle (j'en trouvais 15 avec bc:=f->f/5).
> for j from 1 to i-1
>    do
> evalf([j,M[j],N[j],FMOY[j],BC[j],DIS[j]])
>    od;
Qui plus est, le tableau produit est exactement le même, avec les couples exactement dans le même ordre!

Dans le cas de cet exemple (k:=1.48), quelle dissonance le calcul doit-il donner? C'est le problème essentiel.

L'addition pure et simple produit :
> sum(DIS[q],q=1..i-1);
C'est bien la valeur qu'on peut lire sur le diagramme obtenu ci-dessus.

Il faut maintenant examiner de près les bandes critiques des 15 contributions et adopter un principe d'addition qui réduit cette valeur si les contributions sont dans une même bande critique.

PREMIÈRE APPROCHE SIMPLE. Le tableau obtenu montre que, comme démontré par ailleurs, il n'y a pas de recouvrement de bandes pour des partiels de rang inférieur ou égal à 4; qu'il y a par contre de nombreux recouvrements pour les rangs 8, 9 et 10 (ex. contributions 9, 10, 11 dans la même bande, 11 et 12 dans une autre même bande). Je propose : de conserver les contributions telles quelles jusqu'au rang 4 (lorsque m+n<=8), de les multiplier par 0,6 pour 8<m+n<=14, par 0,4 pour m+n>14.




APPLICATION DE CETTE MÉTHODE D'ATTÉNUATION DES DISSONANCES SANS ANNULATION EN DEHORS DES BANDES CRITIQUES

Cette application se justifie par le fait que la fonction de dissonance propre prend, de toutes manières, de très faibles valeurs en dehors de la bande critique.
> restart;
> bc:=f->0.2022*(1408969+f^2)^.5-150;# Ne pas mettre la fonction sqrt au lieu de ^.5. Maple refuse de calculer.
> x:=(fA,fB)->abs(fB-fA)/bc((fA+fB)/2);# Je prends la moyenne arithmétique... pas gênant.
> dp:=x->118*x^2*exp(-8*x);
> IBpsy:=(m,n)->(1/m/n)^0.3;
Pour comparaison, je redonne d'abord la dissonance sans aucune atténuation, que j'appelle "simplissime".
> DIS_simplissime:=(k,m,n)->IBpsy(m,n)*dp(x(440*m,440*k*n));# Aucune atténuation pour les rangs supérieurs
Ensuite, je calcule la dissonance annoncée en titre, à savoir avec atténuation dans les bandes critiques, mais sans annulation en dehors d'elles. Je l'appelle "simple".
> DIS_simple:=(k,m,n)->
> if m+n<=8 then IBpsy(m,n)*dp(x(440*m,440*k*n))
> elif m+n<=14 then 0.6*IBpsy(m,n)*dp(x(440*m,440*k*n))
> else 0.4*IBpsy(m,n)*dp(x(440*m,440*k*n))
> fi;
Enfin, à nouveau pour comparaison, je recalcule la dissonance avec att\351nuation dans les bandes critiques et annulation en dehors d'elles.
> DIS:=(k,m,n)->
> if (min(440*m,440*k*n)<(440*m+440*k*n)/2-bc((440*m+440*k*n)/2)/2 or max(440*m,440*k*n)>(440*m+440*k*n)/2+bc((440*m+440*k*n)/2)/2)
>    then 0
> elif m+n<=8 then IBpsy(m,n)*dp(x(440*m,440*k*n))
> elif m+n<=14 then 0.6*IBpsy(m,n)*dp(x(440*m,440*k*n))
> else 0.4*IBpsy(m,n)*dp(x(440*m,440*k*n))
> fi;
> Dissonance_simplissime:=[seq([h,add(add(DIS_simplissime(h/100,m,n),m=1..10),n=1..10)],h=100..200)]:
> Dissonance_simple:=[seq([h,add(add(DIS_simple(h/100,m,n),m=1..10),n=1..10)],h=100..200)]:
> Dissonance:=[seq([h,add(add(DIS(h/100,m,n),m=1..10),n=1..10)],h=100..200)]:
> plot([Dissonance_simplissime,Dissonance_simple,Dissonance],100..200);

Conclusion
- rouge : fonction "simplissime", dans laquelle les dissonances des partiels de rang élevé ne sont pas atténuées;
- verte : fonction "simple", dans laquelle la dissonance n'est pas annulée en dehors des bandes critiques, mais où les partiels de rang élevé sont atténués;
- jaune : fonction dans laquelle la dissonance est annulée en dehors des bandes critiques et où les partiels de rang élevé sont atténués.

Comme on pouvait s'y attendre, l'annulation en dehors des bandes critiques a peu d'importance, car dans ces régions la fonction de dissonance propre est, de toutes manières, très faible.
La courbe verte paraît ainsi la plus vraisemblable.

Donnons cette courbe verte (ici en noir) toute seule :
> plot(Dissonance_simple,100..200,color=black);


LES DERNIERS PARTIELS

Il est intéressant de connaître la contribution des derniers partiels, ceux qui sont susceptibles d'atténuation, c'est-à-dire de rang supérieur ou égal à 5. Je les donne d'abord sans atténuation, ensuite avec, sur la même figure.
> Dissonance_simplissime_finale:=[seq([h,add(add(DIS_simplissime(h/100,m,n),m=5..10),n=5..10)],h=100..200)]:
> Dissonance_simple_finale:=[seq([h,add(add(DIS_simple(h/100,m,n),m=5..10),n=5..10)],h=100..200)]:
> plot([Dissonance_simplissime_finale,Dissonance_simple_finale],100..200);

Même chose pour les partiels de rangs 5 et 6, de telle sorte à ne pas dépasser les partiels en jeu dans les consonances "classiques".
> Dissonance_simplissime_5_6:=[seq([h,add(add(DIS_simplissime(h/100,m,n),m=5..6),n=5..6)],h=100..200)]:
> Dissonance_simple_5_6:=[seq([h,add(add(DIS_simple(h/100,m,n),m=5..6),n=5..6)],h=100..200)]:
> plot([Dissonance_simplissime_5_6,Dissonance_simple_5_6],100..200);

Conclusion intéressante : ce ne sont pas ces contributions qui produisent de la dissonance à la quinte (valeur 150), ni à la tierce mineure (120). Mais elles en apportent à la quarte (133) et à la tierce majeure (125), ce qui est tout à fait cohérent.
Cela incite à examiner les dissonances produites par les tout derniers partiels, de rangs 7 à 10.
> Dissonance_simplissime_7_10:=[seq([h,add(add(DIS_simplissime(h/100,m,n),m=7..10),n=7..10)],h=100..200)]:
> Dissonance_simple_7_10:=[seq([h,add(add(DIS_simple(h/100,m,n),m=7..10),n=7..10)],h=100..200)]:
> plot([Dissonance_simplissime_7_10,Dissonance_simple_7_10],100..200);

La contribution des partiels de 5 à 10 peut aussi se visualiser par la différence entre la dissonance totale et la dissonance des partiels de 1 à 4 (laquelle est égale à la "simple" ou la "simplissime", puisque etc.).
> Contribution_5_10:=Dissonance-[seq([h,add(add(DIS_simplissime(h/100,m,n),m=1..4),n=1..4)],h=100..200)]:
> plot(Contribution_5_10,100..200);# NE DONNE RIEN !

Essayons un calcul détaillé direct.
> Contribution_5_10:=[seq([h,add(add(DIS(h/100,m,n),m=1..10),n=1..10)-add(add(DIS_simplissime(h/100,m,n),m=1..4),n=1..4)],h=100..200)]:
> plot(Contribution_5_10,100..200);

C'est bien cette fonction qui est la bonne, et non pas celle que je calculais plus haut. Car la précédente ne prenait pas en compte les dissonances produites par les interférences entre les partiels 5-10 et les partiels 1-4.