Spektralanalyse eines Sounds

Buch:Höhere Mathematik sehen und verstehen, Haftendorn, Riebesehl, Dammer, 
Springer Spektrum, Feb. 2021
Datei Chordwav.nb zu Abschnitt 1.9.5 Seite 107, Abb. 1.70

Importieren des Sounds

Achtung: Bitte den Pfad für den Import so anpassen, dass das originale chord.wav geladen wird.

chord=Import["C:\\...\\chord.wav"]

chord1=AudioData[chord]

rate=AudioSampleRate[chord][[1]]

amps=chord1[[1]]

Length[amps]

Sound[SampledSoundList[amps,rate]]

Analyse des Sounds mit diskreter Fourierzerlegung

n=2048;

amps2=Take[amps,n];

chordwavAkkord=Sound[SampledSoundList[amps2,rate]]

ListPlot[amps2[[Range[400]+100]],Joined->True]

ListPlot[amps2,Joined->True]

spec=FourierDCT[amps2];

spes=FourierDST[amps2];

Amp=(Sqrt[(spec^2)+(spes^2)]);

ListPlot[Take[spec//Abs,630]//Abs,Joined->True,PlotRange->All]

Bestimmung der Peaks

peaks={37,55,74,83,109,165,184,206,219,257,276,289,386,552,619};

{peaks,spec[[peaks-1]],spec[[peaks]],spec[[peaks+1]]}//Transpose//TableForm

Frequenzen dazu

(T=(n/rate))//N

(ν=(1/T))//N

Rekonstruktion des “chord”-Klanges aus den lautesten Frequenzen

(freqs=ν peaks)//N

geordnet nach Lautstärke

peaksloud=#[[2]]&/@({spec[[peaks]]//Abs,peaks}//Transpose//Sort//Reverse)

freqsloud=(freqs=ν peaksloud)//N

fl=Take[freqsloud,6]

chordfunc=Plus@@(Take[spec[[peaks]]//Sort//Reverse,6](Function[t,Cos[# 2Pi t]][x]&/@fl))

chordwavRebuild=Sound[Play[chordfunc,{x,0,0.1}]]

Vielfache der Peaks testen

set[peaks_,n_]:=Line[#]&/@({{100Range[Length[n peaks]],n peaks}//Transpose,{100Range[Length[n peaks]]+100,n peaks}//Transpose}//Transpose)

Graphics[Table[set[peaks,n],{n,1,3}]]