Ce fichier est créé par le logiciel 'Vibrations' (rédigé
dans le cadre des olympiades de la physique 1998 - 1999), à partir
d'un enregistrement effectué à l'aide d'une carte son, sur
16 bits. Les nombres, résultant des mesures, sont écrits
à la suite les uns des autres, séparés par des tabulations.
Ce logiciel vous est proposé en téléchargement
gratuit. Voir le chapitre logiciels ou olympiades.
Voici le code Mathematica :
Nous commençons par désaffecter les variables, et vider
la mémoire.
ClearAll["Global`*"];
adresse="C:\\Mesdoc\\Olympiades\\Sons\\tmp3";
Remarquez que l'adresse du fichier doit être écrite 'à
la main' entièrement. Le séparateur est le double \, comme
en langage C, car \ suivi d'une lettre peut parfois être une fonction
Mathematica, ce qui entraîne des erreurs difficilement détectables.
Nous lisons la liste créée par 'Vibrations' en tant que
nombres.
suite = ReadList[adresse, Number];
nPoints=Length[suite]
suiteCourte = Drop[suite,Ceiling[0.1 nPoints]];
suiteCourte = Drop[suiteCourte,-Ceiling[0.85 nPoints]];
ListPlot[suite, PlotJoined->True, PlotRange->All];
ListPlot[suiteCourte, PlotJoined->True, PlotRange->All];
(* ListPlot[suite, PlotJoined->True, PlotRange->{All,{-32768,+32767}}];
*)
Pour créer un effet de zoom, nous coupons par Drop, les deux
extrémités de la suite de nombres obtenue.
La ligne de code mise en remarque, par (* *) permet d'afficher en ordonnées,
l'échelle complète des valeurs mesurables sur 16 bits. Nous
constatons que les courbes obtenues sont très lisses, bien que notre
signal soit relativement faible. Ce ne serait pas du tout le cas sur 8
bits.
Nous effectuons maintenant une transformée de Fourier, numérique
rapide, ou FFT, sur un nombre quelconque de points.
Mathematica permet cela, car il ne décompose pas la liste seulement
selon des puissances de 2, mais en employant des nombres premiers. Rappelons
que notre logiciel 'Vibrations' permet aussi une telle transformation de
Fourier numérique sur un nombre quelconque de points, mais selon
une méthode 'lente'.
La durée de calcul pour la méthode 'lente' est approximativement
proportionnelle au carré du nombre de termes ; celle de la FFT est
à peu près proportionnelle au nombre de termes.
amplitude=Abs[Fourier[suite]];
freqEchant=11025 ; nPointsSpectre=Ceiling[nPoints/2]
liste=Table[{((i-1)freqEchant)/Length[suite],amplitude[[i]]},{i, nPointsSpectre}];
La fréquence d'échantillonnage est entrée à
la main, car le fichier ne contient que les mesures. Nous constituons une
liste de couples (fréquence, module (Abs) donné par la FFT).
ListPlot[liste, PlotJoined->True, PlotRange->All, ImageSize->{500,300}];
Et encore un effet de zoom !
listeCourte= Drop[liste,-Ceiling[0.9 nPointsSpectre]];
listeCourte= Drop[listeCourte,Ceiling[0. nPointsSpectre]];
Length[listeCourte]
ListPlot[listeCourte, PlotJoined->True, PlotRange->All, ImageSize->{500,300}];
Vous pouvez transférer ce code par copier coller, pour limiter les risques d'erreurs.
En ce
cas, veillez, après le Coller dans une page Mathematica, à
tronçonner le texte, par Cell | Divide Cell. Sinon, Mathematica
va interpréter les commentaires comme des opérations sur
des variables formelles !
Mathematica 3 possède une fonction ReadSoundFile, mais qui ne
marche que pour les enregistrements sur 8 bits.