RECONSTITUTION DES CALCULS DE HELMHOLTZ 

 

 

Ces calculs, effectués avec le logiciel Maple, reprenent au plus près ceux de Helmholtz, selon les "Appendices" pp. 516, 526, 527 de la Théorie physiologique de la musique.


Pourquoi une telle "reconstitution" ? En 1986, j'ai publié une étude intitulée "Valeur actuelle de l'acoustique musicale de Helmholtz", dans laquelle je relevais un grand nombre d'erreurs risquant de mettre en péril la théorie du savant allemand (étude disponible ici-même). Or je ne connaissais pas, à l'époque, la principale erreur qu'il avait faite : celle de concevoir la membrane basilaire (où s'attachent les terminaisons du nerf auditif) comme une succession de cordes tendues transversalement, un peu à la manière de celles d'un piano. Ainsi chaque corde était-elle censée résonner "par influence" de manière privilégiée à la même fréquence que le son excitateur, et l'oreille se comporter par là comme un analyseur de fréquence. Mais la membrane basilaire est en fait molle et se plie simplement aux mouvements du liquide dans lequel elle baigne (voir le préambule que je donne à l'article déjà mentionné). C'est ce que j'appelle, pour aller vite, l'erreur fondamentale de Helmholtz. Il convient de souligner que c'est justement mon ignorance de cette erreur, qui m'a donné l'envie d'en chercher d'autres... et j'en ai trouvé plusieurs, ainsi que je l'explique dans l'article de 1986. On pouvait alors se demander comment Helmholtz avait pu atteindre le but qu'il s'était fixé. Les deux tentatives d' "actualisation" de la théorie de Helmholtz que j'ai faites (celle de 1986 et, plus récemment, celle que j'ai publié dans le livre Du son à la musique, 2011) ont montré qu'il fallait abandonner tout espoir d'une preuve directement physico-physiologique du phénomène de la consonance et de la dissonance, et qu'on était obligé d'introduire la psychologie expérimentale dans la question. Cependant, du point de vue de l'histoire des sciences, il est important de savoir comment Helmholtz a opéré, comment, si l'on peut dire, il a triché afin de plier les résultats de ses calculs à ce qu'il pensait percevoir dans le son musical. Et pour cela, il faut d'abord reconstituer aussi précisément que possible les calculs qu'il a effectués… qui ne sont pas très simples et dont il ne donne pas tout le détail nécessaire. C'est ce qu'essaie de faire la présente page.




Il s'agit de retrouver, par des moyens actuels de calcul, les résultats de Helmholtz pour la dissonance de deux sons "en dents de scie", dont la fréquence du premier est constante (264 Hz, soit ut2) et celle du second variable (de 264 à 528 Hz - et même le double 1056 Hz -, soit de ut2 à ut3 - et même ut4). Rappelons que ces résultats sont résumés et illustrés par la figure 52A (52B pour la seconde octave, voir à la fin de cette feuille) ayant l'allure suivante :





> restart;
 

 

 

1. Energie des battements d'une fibre de la membrane basilaire 

 

Soient deux sons de pulsation n1 et n2 (en notation moderne on emploierait la lettre grecque omega au lieu de n). Ils produisent, par le phénomène de la vibration par influence, des vibrations avec battements en chaque fibre de la membrane basilaire. Helmholtz se restreint à ne prendre que celle où l'énergie des battements est maximale et calcule qu'elle vaut (formule 7b page 527) : 

 

> Eb:=4*B1*B2*beta^2/(beta^2+4*pi^2*delta^2);
 

`+`(`/`(`*`(4, `*`(B1, `*`(B2, `*`(`^`(beta, 2))))), `*`(`+`(`*`(`^`(beta, 2)), `*`(4, `*`(`^`(pi, 2), `*`(`^`(delta, 2)))))))) (1)
 

B1 et B2 représent les vitesses maximales des deux vibrations (p. 526), beta est "une quantité que nous pouvons considérer comme indépendante de n". Nous allons voir dans un instant qu'on peut la prendre constante; pour simplifier, nous poserons A = le carré de beta. Delta, enfin, vaut (n1 -n2) / (n1 + n2) ; cela résulte des trois formules données p. 527 : n1 + n2 = 2N, n1 = N(1+delta), n2 = N(1-delta). La formule étant homogène en n1 et n2, on peut employer à leur place les fréquences f1 et f2, plus explicites. Je prends donc, pour l'instant avec B1 = B2 = 1 : 

> Eb:=A/(A+(2*pi*(f1-f2)/(f1+f2))^2);
 

`/`(`*`(A), `*`(`+`(A, `/`(`*`(4, `*`(`^`(pi, 2), `*`(`^`(`+`(f1, `-`(f2)), 2)))), `*`(`^`(`+`(f1, f2), 2)))))) (2)
 

Tous les calculs de Helmholtz étant faits pour f1 constante = 264 Hz (fréquence de ut2), je restreins cette fonction à f1 = 264. En outre, pour la viabilité des calculs Maple, j'utilise 3,14 au lieu de pi. 

 

 

> Eb:=(A,f2)->A/(A+(2*3.14*(264-f2)/(264+f2))^2);
 

proc (A, f2) options operator, arrow; `/`(`*`(A), `*`(`+`(A, `/`(`*`(4, `*`(`^`(3.14, 2), `*`(`^`(`+`(264, `-`(f2)), 2)))), `*`(`^`(`+`(264, f2), 2)))))) end proc (3)
 

 

Comme Helmholtz ne dit rien du paramètre beta (ici A), il est d'abord utile de voir comment cette fonction évolue compte tenu du paramètre A. 

 

Pour A = 10 : 

 

> plot(Eb(10,f2),f2=132..528);
 

Plot_2d
 

Pour A = 0,1 : 

 

> plot(Eb(0.1,f2),f2=132..528);
 

Plot_2d
 

On constate que les petites valeurs de A accentuent la sélectivité de la vibration par influence. A retenir pour la suite! 

Il est d'ailleurs utile de tracer un extrait de cette courbe entre les fréquences 264 (ut2) et 396 (sol2) : 

> plot(Eb(0.1,f2),f2=264..396,thickness=4);
 

Plot_2d
 

Cette fonction, multipliée par la dureté propre que je vais bientôt calculer, donnera une courbe de dissonance que l'on pourra directement comparer avec celle qu'a tracée Helmholtz (voir ci-dessous). 

 

 

On peut encore s'amuser à tracer les variations à deux dimensions de l'énergie des battements Eb en fonction de A et de f2 : 

 

> plot3d(Eb(A,f2),A=0.1..100,f2=132..528,axes=frame);
 

Plot_2d
 

 

 

 

 

 

2. Dureté propre 

 

Par ailleurs, la dissonance ressentie par l'oreille dépend non seulement de l'énergie des battements, mais aussi de la fréquence de ces battements. Helmholtz admet qu'à énergie égale, la dissonance est nulle pour une fréquence nulle ou très grande, et qu'elle est maximale pour environ 30 Hz. Il choisit, à un facteur près, la fonction [60 x /(900 + x.x)]^2, x représentant l'écart en fréquence des deux sons battant. "C'est l'expression la plus simple qui remplisse les conditions données, écrit-il, mais elle est naturellement arbitraire jusqu'à un certain point." 

 

 

> dur:=x->(60*x/(900+x*x))^2;
 

proc (x) options operator, arrow; `+`(`/`(`*`(3600, `*`(`^`(x, 2))), `*`(`^`(`+`(900, `*`(x, `*`(x))), 2)))) end proc (4)
 

Comme je veux faire une comparaison avec le graphique de Helmholtz et, pour commencer, avec la courbe de dissonance du fondamental à 264 Hz avec le fondamental à la fréquence variable f2, il faut prendre cette fonction sur la variable x = f2 - 264, qui représente l'écart en fréquence de f2 avec f1 = 264. Donc : 

 

> dh:=f2->(60*(f2-264)/(900+(f2-264)^2))^2;
 

proc (f2) options operator, arrow; `+`(`/`(`*`(3600, `*`(`^`(`+`(f2, `-`(264)), 2))), `*`(`^`(`+`(900, `*`(`^`(`+`(f2, `-`(264)), 2))), 2)))) end proc (5)
 

> plot(dh,264..396,thickness=4);
 

Plot_2d
 

 

 

 

 

3. Dissonance des deux fondamentaux 264 Hz et f2 

 

Cette dissonance est le produit de l'énergie des battements par la dureté propre. Le résultat dépend de la constante A. Faisons donc cette dissonance une fonction de A (et de f2) : 

 

> dissonance:=(A,f2)->A/(A+(2*3.14*(264-f2)/(264+f2))^2)*(60*(f2-264)/(900+(f2-264)^2))^2;# Il faut expliciter les fonctions Eb et dh, sinon Maple refuse.
 

proc (A, f2) options operator, arrow; `+`(`/`(`*`(3600, `*`(A, `*`(`^`(`+`(f2, `-`(264)), 2)))), `*`(`+`(A, `/`(`*`(4, `*`(`^`(3.14, 2), `*`(`^`(`+`(264, `-`(f2)), 2)))), `*`(`^`(`+`(264, f2), 2)))), ... (6)
 

> plot(dissonance(1,f2),f2=264..396,thickness=4);
 

Plot_2d
 

Avec cette valeur de A la dissonance reste assez élevée (environ 0,1) à 396 Hz (la quinte de 264) . Prenons un A plus petit, soit 0,1 : 

 

> plot(dissonance(0.1,f2),f2=264..396,thickness=4);
 

Plot_2d
 

Bon résultat cette fois, en ce sens qu'il correspond bien à celui de Helmholtz : par juxtaposition, nous constatons qu'il s'identifie à la courbe notée "1:1", celle qui correspond à la contribution des fondamentaux dans la dissonance des deux sons en dents de scie. C'est le résultat que j'annonçais ci-dessus (avant la fin du paragraphe 1).
Courbe "1:1" de Helmholtz, extraite de la figure 52A p. 247 :


 

 

 

4. Reconstitution de la dissonance des deux sons en dents de scie 

 

Il suffit à présent de sommer, comme l'avait fait Helmholtz, les contributions à la dissonance de tous les couples de partiel de chacun des deux sons : les 10 premiers partiels du ut2 (264 Hz) avec les 10 premiers du son de fréquence f2 (s'étendant de ut2 à ut3, 264 à 528 Hz). On se limite au 10 premiers partiels, comme Helmholtz. 

Il faut donc maintenant faire intervenir le produit des vitesses B1 et B2, mentionné au début. D'après la décomposition en série de Fourier de la fonction dents de scie, ce produit est proportionnel à 1/(m1.m2), où m1 et m2 sont les ordres des partiels des sons 1 et 2. C'est ce qu'écrit Helmholtz p. 527 (avec un coefficient a2 qu'on peut considérer comme constant). 

Ici les fonctions Eb et dh doivent être plus générales que ci-dessus, les fréquences concernées étant m1.f1 et m2.f2, celles de chaque partiel. 

 

> restart;
 

Commençons par l'énergie de battements. La fonction précédente doit être divisée par m1.m2 : 

 

> Eb:=(A,m1,m2,f2)->1/(m1*m2)*A/(A+(2*3.14*(m1*264-m2*f2)/(m1*264+m2*f2))^2);
 

proc (A, m1, m2, f2) options operator, arrow; `/`(`*`(A), `*`(m1, `*`(m2, `*`(`+`(A, `/`(`*`(4, `*`(`^`(3.14, 2), `*`(`^`(`+`(`*`(264, `*`(m1)), `-`(`*`(m2, `*`(f2)))), 2)))), `*`(`^`(`+`(`*`(264, `*`... (7)
 

Poursuivons par la dureté propre, maintenant pour les fréquences m1.f1 et m2.f2 : 

 

> dh:=(m1,m2,f2)->(60*(m2*f2-m1*264)/(900+(m2*f2-m1*264)^2))^2;
 

proc (m1, m2, f2) options operator, arrow; `+`(`/`(`*`(3600, `*`(`^`(`+`(`*`(m2, `*`(f2)), `-`(`*`(264, `*`(m1)))), 2))), `*`(`^`(`+`(900, `*`(`^`(`+`(`*`(m2, `*`(f2)), `-`(`*`(264, `*`(m1)))), 2))), ... (8)
 

La dissonance est le produit de ces deux fonctions : 

 

> diss:=(A,m1,m2,f2)->1/(m1*m2)*A/(A+(2*3.14*(m1*264-m2*f2)/(m1*264+m2*f2))^2)*(60*(m2*f2-m1*264)/(900+(m2*f2-m1*264)^2))^2;
 

proc (A, m1, m2, f2) options operator, arrow; `+`(`/`(`*`(3600, `*`(A, `*`(`^`(`+`(`*`(m2, `*`(f2)), `-`(`*`(264, `*`(m1)))), 2)))), `*`(m1, `*`(m2, `*`(`+`(A, `/`(`*`(4, `*`(`^`(3.14, 2), `*`(`^`(`+`... (9)
 

Un exemple. A = 0,1, m1 = 2, m2 = 1, f2 de 264 à 528 : 

> plot(diss(0.1,2,1,f2),f2=264..528,thickness=4);
 

Plot_2d
 

Un autre exemple. A = 0,1, m1 = 1, m2 = 1, f2 de 264 à 528 : 

> plot(diss(0.1,1,1,f2),f2=264..528,thickness=4);
 

Plot_2d
 
Notons en passant que ces deux exemples correspondent respectivement aux courbes "1:2" et "1:1" dans la figure 52A de Helmholtz. Puisque, dans l'expression de la dissonance, l'énergie des battements est divisée par les vitesses m1 et m2, il n'est pas surprenant que le maximum de la courbe "1:2" est inférieur à celui de la courbe "1:1". Or sur la figure 52A c'est le contraire (voir ci-dessus, au début). Il s'agit d'une erreur de Helmholtz... que j'ai mis presque trente ans à débusquer!

Pour tracer la courbe générale, je pose f2 = k.f1, soit f2 = 264.k, la variable k allant de 1 à 2. 

> restart;
 

> dissh:=(A,m1,m2,k)->1/(m1*m2)*A/(A+(2*3.14*(m1-m2*k)/(m1+m2*k))^2)*(60*(m2*264*k-m1*264)/(900+(m2*264*k-m1*264)^2))^2;
 

proc (A, m1, m2, k) options operator, arrow; `+`(`/`(`*`(3600, `*`(A, `*`(`^`(`+`(`*`(264, `*`(m2, `*`(k))), `-`(`*`(264, `*`(m1)))), 2)))), `*`(m1, `*`(m2, `*`(`+`(A, `/`(`*`(4, `*`(`^`(3.14, 2), `*`... (10)
 

> dissonanceh:=A->add(add(dissh(A,m1,m2,k),m1=1..10),m2=1..10);
 

proc (A) options operator, arrow; add(add(dissh(A, m1, m2, k), m1 = 1 .. 10), m2 = 1 .. 10) end proc (11)
 

> plot(dissonanceh(0.1),k=1..2,color=black);
 

Plot_2d
 

 

On note que le coefficient A doit être petit pour retrouver une courbe semblable à celle de Helmholtz. Avec A = 1, il reste une dissonance non négligeable à la quinte : 

> plot(dissonanceh(1),k=1..2,color=blue);
 

Plot_2d
 

On peut encore s'amuser à tracer la surface représentant la dissonance en fonction de A variable : 

 

> plot3d(dissonanceh(A,k),A=0.1..10,k=1..2,axes=frame);
 

Plot_2d
 

Pour visionner cette surface en mouvement (à défaut, pour l'instant, de pouvoir la manipuler avec la souris) aller ici.

 

On peut enfin tracer la courbe de dissonance sur la deuxième octave, comme le fait Helmholtz (figure 52B de la page 247). 

> plot(dissonanceh(0.1),k=2..4,color=black);
 

Plot_2d
 

>
 

Cette fois, la courbe ne correspond pas bien à celle de Helmholtz (dans laquelle la dissonance autour de la quinte est beaucoup plus forte). On peut toutefois améliorer la correspondance en diminuant le facteur A : 

 

> plot(dissonanceh(0.01),k=2..4,color=black);
 

Plot_2d
 



 Rappel de la figure 52B p. 427 pour la dissonance sur la seconde octave :

 


On pourra poursuivre la lecture par la feuille d'actualisation de la théorie de Helmholtz grâce à la psychophysiologie.

Patrice Bailhache, 28/11/2014