Les signaux sonores

Nigen Clara, MMI1, Groupe D



Introduction : commandes Matlab

Le logiciel Matlab permet de lire et de créer des fichiers sonores en format wav. Il permet également d’en obtenir une représentation temporelle et fréquentielle.



Exercice 1

1

Pour cet exercice, nous utiliserons les commandes LireSon pour activer la lecture du fichier .wav ainsi que AnalyseSon qui nous permettra d'afficher le spectre de Fourier et de déterminer ainsi la fréquence fondamentale et le nombre d'harmonique(s).

Fichier wav Durée Fréquence
fondamentale
Nombre
d'harmonique(s)
DiapasonLa 3s 440 Hz 0
FluteLa 2s 440 Hz 2
FluteSol 2s 390 Hz 4
OrgueDo 2s 260 Hz 12
ClavecinRe 2s 295 Hz 15
ClavecinLa 2s 440 Hz 14

2

La fréquence fondamentale détermine la hauteur du son. Tout son possède sa fréquence fondamentale.


3

La fréquence fondamentale et les fréquences harmoniques forment le son produit par l'instrument. Le nombre d'harmoniques et leurs intensités définissent le timbre de l'instrument.


4

Le son le plus pur est "DiapasonLa" car il ne possède aucune harmonique. Viennent ensuite, du plus purs au plus complexes :

Les trois derniers sons sont les plus complexes. Plus il y a d'harmoniques, plus le son est complexe.



Exercice 2

1

Pour créer un son, nous utiliserons la commande CreationSon. Puis, comme pour l'exercice 1, le spectre de Fourier sera tracé grâce à AnalyseSon.
Le son1 dure 1 seconde, contient la fréquence 1000Hz. Son amplitude est de 0.8. Sur MatLab, il faudra donc entrer la commande : CreationSon([1000 1000], [0.8 0.8], 1, 'Son1.wav');


Son1

Sur le spectre de Fourier, on peut voir la fréquence fondamentale à 1000 Hz qui monte bien jusqu'à 0.8 en Y(t) pour son amplitude.


2

Le son2 dure 1 seconde, contient la fréquence 3000Hz. Son amplitude est de 0.1. Sur MatLab, il faudra donc entrer la commande : CreationSon([3000 3000], [0.1 0.1], 1, 'Son2.wav');


Son2

Ces deux premiers sons sont des sons purs. On peut le voir car il n'y a pas d'harmonique, seule la fréquence fondamentale apparaît sur le spectre de Fourier


3

Le son3 dure 1 seconde, contient les fréquences 1000Hz et 3000Hz. Ses amplitudes sont de 0.8 et 0.1. Sur MatLab, il faudra donc entrer la commande : CreationSon([1000 3000], [0.8 0.1], 1, 'Son3.wav');


Son3

On peut voir sur le spectre une harmonique à la fréquence 3000 Hz.

4

Le son2 paraît moins fort et plus aigu que le son1. Ainsi on peut remarquer que plus la fréquence du son est élevée, plus celui ci est aigu et à l'inverse, plus la fréquence est basse, plus le son nous semble grave.


5

Le masquage fréquentiel est la capacité d’un son fort à masquer un son faible.



Exercice 3

Chaque touche du clavier du téléphone émet un signal sonore qui lui est propre. Ce signal est émis par superposition de deux signaux sinusoïdaux dont les fréquences sont données dans ce tableau :


Fréquence 1209 Hz 1336 Hz 1477 Hz
697 Hz Touche 1 Touche 2 Touche 3
770 Hz Touche 4 Touche 5 Touche 6
852 Hz Touche 7 Touche 8 Touche 9
941 Hz Touche * Touche 0 Touche #

1

Après avoir créé les touches 2 et 9 à partir des informations du tableau ci-dessus, leur spectre respectif est tracé.


La touche 2 contient les fréquences 697Hz et 1336Hz. Commande MatLab :
CreationSon([697 1336], [0.3 0.3], 2, 'touche2.wav');

Touche 2




La touche 9 contient les fréquences 852Hz et 1477Hz. Commande MatLab :
CreationSon([852 1477], [0.3 0.3], 2, 'touche9.wav');

Touche 9





2

telephone.wav


D'après le spectre, nous pouvons voir que les fréquences de la fondamentale et de son harmonique correspondent à celles de la touche 1.


3

La touche 4 contient les fréquences 770Hz et 1209Hz. Commande MatLab :
CreationSon([770 1209], [0.3 0.3], 2, 'telephone4.wav');

telephone4.wav


4

disp('Taper une touche du clavier');

Fe = 44100;
d = 0.3;
a = [0.5 0.5];
t = linspace(1/Fe, d, d*Fe);


run = 1;
compt = 0;

while run
y = zeros(1,Fe*d);
ch = getkey ;
compt = compt + 1;
% A complèter :
switch ch
case '1'
disp('Touche 1')
F = [697 1209];
for n=1:length(a), y = y + a(n)*sin(2*pi*F(n)*t); end
soundsc(y,Fe);
case '2'
disp('Touche 2')
F = [697 1336];
for n=1:length(a), y = y + a(n)*sin(2*pi*F(n)*t); end
soundsc(y,Fe);
case '3'
disp('Touche 3')
F = [697 1477];
for n=1:length(a), y = y + a(n)*sin(2*pi*F(n)*t); end
soundsc(y,Fe);
case '4'
disp('Touche 4')
F = [770 1209];
for n=1:length(a), y = y + a(n)*sin(2*pi*F(n)*t); end
soundsc(y,Fe);
case '5'
disp('Touche 5')
F = [770 1336];
for n=1:length(a), y = y + a(n)*sin(2*pi*F(n)*t); end
soundsc(y,Fe);
case '6'
disp('Touche 6')
F = [770 1477];
for n=1:length(a), y = y + a(n)*sin(2*pi*F(n)*t); end
soundsc(y,Fe);
case '7'
disp('Touche 7')
F = [852 1209];
for n=1:length(a), y = y + a(n)*sin(2*pi*F(n)*t); end
soundsc(y,Fe);
case '8'
disp('Touche 8')
F = [852 1336];
for n=1:length(a), y = y + a(n)*sin(2*pi*F(n)*t); end
soundsc(y,Fe);
case '9'
disp('Touche 9')
F = [852 1477];
for n=1:length(a), y = y + a(n)*sin(2*pi*F(n)*t); end
soundsc(y,Fe);
case '*'
disp('Touche *')
F = [941 1209];
for n=1:length(a), y = y + a(n)*sin(2*pi*F(n)*t); end
soundsc(y,Fe);
case '0'
disp('Touche 0')
F = [941 1336];
for n=1:length(a), y = y + a(n)*sin(2*pi*F(n)*t); end
soundsc(y,Fe);
case '#'
disp('Touche #')
F = [941 1477];
for n=1:length(a), y = y + a(n)*sin(2*pi*F(n)*t); end
soundsc(y,Fe);
otherwise
disp('Mauvaise touche !')
run = 0; end

if(compt ==10)
disp('10 touches tapées')
run = 0;
end

end

Taper une touche du clavier
Touche 1
Touche 2
Touche 3
Touche 4
Touche 5
Touche 6
Touche 7
Touche 8
Touche 9
Touche *
10 touches tapées