Corde vibrante : propagation, spectre sonore

Propagation

On définit le profil de la corde à t=0 (la corde s'étend de x=0 à x=1), si on pince avec un médiator à l'abscisse x=a (avec 0<a<1) :

Clear[motif]
motif[x_, a_] := 
      motif[Mod[x, 2], a] /; 
        x ≥ 2  || x < 0
motif[x_, a_] := -((x - 1)/(1 - a))  /; 
        x > a  && x < 2 - a
motif[x_, a_] := -((2 - x)/a)  /; 
        x >= 2 - a  &&  x < 2
motif[x_, a_] := (x/a)  /; x <= a  &&  x >= 0

Par exemple en pinçant à 4/5 :

Plot[motif[x, (4/5)], {x, 0, 1}];

La solution de l'équation de propagation est la combinaison de deux ondes, une progressive et une régressive (à t=0, on vérifie que grace au coeff 1/2, on a bien le profil représentée ci-dessus avec la bonne amplitude) :

onde[x_, t_, 
        a_ ] := (1/2) (motif[x - t, a] + motif[x + t, a])

Traçons le profil de la corde en fonction du temps sur une période  (attention, ici c=1, "λ"=2 donc T=2 ! ) :

Table[
        Plot[{motif[x - t, a], motif[x + t, a], onde[x, t, a]} /. 
              a -> (3/4) // Evaluate, {x, 0, 1}, 
          PlotRange -> {All, {-1, 1}}, 
          PlotStyle -> {RGBColor[1, 0, 0], RGBColor[0, 0, 1], 
              RGBColor[0, 0, 0]}], {t, 0, 2, 0.025}];

Spectre sonore

Pour le calcul détaillé, voir le TD. 
On montre que, compte-tenu des conditions aux limites (corde attachée aux deux extrémités), toute solution de l'équation de propagation est une superposition de modes propres : (corde de longueur L)
y(x,t) = (∑_(n = 0)^∞)((Subscript[A, n]) 
                sin (Subscript[ω, n]) t + 
              (Subscript[B, n]) cos (Subscript[ω, n]) t) sin nπ(x/L), avec (Subscript[ω, n]) = (Subscript[k, n]) c  =  nπ(c/L)

On obtient les coefficients (Subscript[A, n]) et (Subscript[B, n]) en fonction des conditions initiales sur la position y(x,0) et la vitesse v(x,0)=(dy/dt) (x, 0) par projection (produit scalaire) de l'état initial sur le mode propre correspondant : (désormais je prendrai c=L=1 pour la simplicité de lecture des formules)

A[n_, 
        v_] := (2/n)π (∫_0^1) v[x] 
            Sin[n π x] \[DifferentialD]x
B[n_, y_] := 
      2 (∫_0^1) y[x] 
            Sin[n π x] \[DifferentialD]x

Corde de Piano

Dans ce cas, on frappe la corde avec un marteau (transfert de quantité de mouvement appelé "percussion"), donc y(x,0)=0 et v(x,0) est décrite par un créneau d'amplitude "u", à l'abscisse "a", et de largeur "e" très petite. On en déduit que (Subscript[B, n]) = 0.

A[n_] = 
      Series[(2/(n π)) (∫_a^(a + e))u Sin[
                  n π x] \[DifferentialD]x, {e, 0, 1}] // 
        Normal

Déterminons le spectre correspondant en fonction des valeurs de "a" :

A[n_, a_] = (π/2) A[n] /. {e -> 1, u -> 1}

Si on frappe à L/2 on obtient que des partiels impairs : (le fait de frapper au milieu élimine de facto tous les modes ayant un noeud en ce point)

partiels = Table[{n, A[n, (1/2)]}, {n, 1, 10}]

<< Miscellaneous`Audio`

ListWaveform[partiels, 220, 1] // Show;

Si on veut éliminer l'hamonique 7 (le DO/SIb dissonant), il faut frapper à un multiple de L/7. Comparez L/7,

partiels = 
        Table[{n, A[n, (1/7)]}, {n, 1, 10}] // N;
ListPlot[partiels, 
        Prolog -> AbsolutePointSize[5]];
ListWaveform[partiels, 220, 1] // Show;

avec 4L/7 :

partiels = 
        Table[{n, A[n, (4/7)]}, {n, 1, 10}] // N;
ListPlot[partiels, 
        Prolog -> AbsolutePointSize[5]];
ListWaveform[partiels, 220, 1] // Show;

Corde de Clavecin/Guitare

Dans ce cas, on pince  la corde avec un stylet ou un mediator, donc v(x,0)=0 [d'où (Subscript[A, n])=0] et y(x,0) est décrite par une forme en triangle d'amplitude h :
y(x)=hx/a si x < a
y(x) = (h/(a - L)) (x - L) si x>a

B[n_] = (2/L) 
            h ((∫_0^a) (x/a) 
                    Sin[((n π x)/L)] \[DifferentialD]x + (∫_a^L) ((x - L)/(a - L)) 
                    Sin[((n π x)/L)] \[DifferentialD]x) /. 
          Sin[ n π ] -> 0 // FullSimplify

Déterminons le spectre correspondant en fonction des valeurs de "a" :

B[n_, a_] = (π^2) B[n] /. {h -> 1, L -> 1}

Si on frappe à L/2 on obtient que des partiels impairs : (le fait de frapper au milieu élimine de facto tous les modes ayant un noeud en ce point)

partiels = Table[{n, B[n, (1/2)]}, {n, 1, 10}]

<< Miscellaneous`Audio`

ListWaveform[partiels, 220, 1] // Show;

Noter que le son est beaucoup plus "pur" (i.e. sonne davantage monochromatique) que pour le piano, du fait de la décroissance en 1/(n^2).
Si on veut éliminer l'hamonique 7 (le DO/SIb dissonant), il faut pincer à un multiple de L/7. Comparez L/7,

partiels = 
        Table[{n, B[n, (1/7)]}, {n, 1, 10}] // N;
ListPlot[partiels, 
        Prolog -> AbsolutePointSize[5]];
ListWaveform[partiels, 220, 1] // Show;

avec 4L/7 :

partiels = 
        Table[{n, B[n, (4/7)]}, {n, 1, 10}] // N;
ListPlot[partiels, 
        Prolog -> AbsolutePointSize[5]];
ListWaveform[partiels, 220, 1] // Show;