Académique Documents
Professionnel Documents
Culture Documents
TRAITEMENT DE SONS
MUSICAUX SOUS MATLAB
Niveau : LICENCE
Certificat :
Votre disponibilité, votre soutien et vos conseils, ont pu créer en nous une ambiance
favorable qui nous a permis de nous familiariser avec ce projet.
Le traitement du son est la branche du traitement du signal qui s'applique aux signaux
audio, dans le but notamment d'en améliorer la qualité, de les compresser, ou d'en
extraire de l'information.
Un fichier audio (type .wav, .mp3, .ogg, etc…) doit être traité, afin de retirer le bruit qui
s’est ajouté lors de l’enregistrement. La nature du bruit est une sinusoïde dont
l’amplitude est assez élevée pour être audible mais la fréquence est inconnue.
Mais ce que nous savons, par-contre, c’est que le bruit ne contient qu’une seule
composante fréquentielle.
Afin de pouvoir traiter le fichier audio à l’aide de MatLab, nous allons construire un
mixeur ou une plateforme de traitement de sons musicaux, c’est-à-dire la réalisation
d’une interface graphique de simulations sonores.
Partie I - Introduction
Historique
Parallèlement aux microprocesseurs et aux microcontrôleurs, les Processeurs de
traitement numérique du signal, ou DSP (Digital Signal Processor), ont bénéficié des
énormes progrès en rapidité (grâce au faible temps de commutation) et en puissance de
D'une manière générale, tous les processeurs vérifient la loi de Moore, l'un des
fondateurs de la société Intel qui annonçait, dès sa création, que la densité d'intégration
des composants doublerait tous les dix-huit mois. En 1995, on savait intégrer dix
millions de transistors dans un composant unique.
Utilisés initialement pour gérer la carte son des micro-ordinateurs, les DSP ont vu leur
utilisation s'accroître considérablement depuis 1985, tout D’abord grâce au
développement des télécommunications (téléphonie numérique, puis téléphonie sans fil
GSM ... ), puis grâce à ses possibilités de traitement rapide de certaines commandes
numériques faisant appel à des algorithmes complexes permettant ainsi le travail en «
temps réel ».
En utilisant des données numériques extraites d'un signal, on rend les systèmes de
commande et de gestion électroniques beaucoup plus fiables, et reproductibles. Là où il
fallait des réglages en électronique analogique, il suffit d'imposer une valeur constante
convenablement choisie dans un registre particulier du composant. On fixe ainsi
l'amplification ou la bande passante d'un filtre numérique, et ceci de manière définitive.
Objectif
Ce projet a pour objectif spécifique de corriger le son afin d’obtenir une bonne qualité
d’un enregistrement (du son), ainsi qu’appliquer les relations et les lois vu en traitement
de signal. Aussi de réaliser une interface graphique sous Matlab, permettant de
visualiser les différentes simulations sonores du signal audio traité
Problématique
Comment réaliser une telle interface permettant d’une part de configurer les paramètres
utilisés pour la reconstitution et d’autre part de visualiser les résultats obtenus à partir
de signaux simulés et réels ?
Partie II - Implémentation et génération du signal audio sous Matlab
1- Equipement matériel
Ordinateur utilisé
Commande « guide »
Comme sur la figure ci-dessus, afin d’écouter le fichier audio simulé qui est fourni,
directement à la sortie de l’ordinateur on clique sur l’un des boutons de simulations.
L’écoute des signaux confirme bien les dires. Le signal semble changer de fréquences
sonores à chaque fois on clique sur l’une des boutons puis sur Lecture comme nous
pouvions nous y attendre.
Nous avions fait la remarque (en regardant le graphe du signal traité), les résultats
semblent confirmer ce que nous pensions.
Conclusion
Enfin, on a mis en œuvre ce projet sous une plateforme Matlab et on remarque qu’on
peut facilement se rendre compte qu’il est très simple et facile de déployer une interface
graphique pour n’importe qu’elle application de traitement du signal.
Ce projet a répondu à nos attentes aussi bien au niveau éducatif que professionnel. Il
est notre premier pas avec succès en traitement du signal.
gui_Singleton = 1;
gui_State = struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningFcn',@MixeurAudio_OpeningFcn,...
'gui_OutputFcn',@MixeurAudio_OutputFcn,...
'gui_LayoutFcn',[],...
'gui_Callback',[]);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State,
varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
function play_equalizer(hObject,handles)
set(handles.text18,'String',handles.q1);
set(handles.text19,'String',handles.q2);
set(handles.text20,'String',handles.q3);
set(handles.text21,'String',handles.q4);
set(handles.text22,'String',handles.q5);
set(handles.text23,'String',handles.q6);
set(handles.text24,'String',handles.q7);
set(handles.text25,'String',handles.q8);
set(handles.text26,'String',handles.q9);
set(handles.text27,'String',handles.q10);
% --- cut off low pass
cut_off = 200;
orde = 16;
a = fir1(orde, cut_off/(handles.Fs/2),'low');
y1 = handles.q1*filter(a,1,handles.y);
% bandpass
f1 = 201;
f2 = 400;
b1 = fir1(orde, [f1/(handles.Fs/2)
f2/(handles.Fs/2)],'bandpass');
y2 = handles.q2*filter(b1,1,handles.y);
% bandpass
f3 = 401;
f4 = 800;
b2 = fir1(orde, [f3/(handles.Fs/2)
f4/(handles.Fs/2)],'bandpass');
y3 = handles.q3*filter(b2,1,handles.y);
% bandpass
f4 = 801;
f5 =1500;
b3 = fir1(orde, [f4/(handles.Fs/2)
f5/(handles.Fs/2)],'bandpass');
y4 = handles.q4*filter(b3,1,handles.y);
% bandpass
f5 = 1501;
f6 =3000;
b4 = fir1(orde, [f5/(handles.Fs/2)
f6/(handles.Fs/2)],'bandpass');
y5 = handles.q5*filter(b4,1,handles.y);
% highpass
cut_off2 = 15000;
c = fir1(orde, cut_off2/(handles.Fs/2),'high');
y10 = handles.q10*filter(c,1,handles.y);
handles.yT = y1+ y2+ y3+ y4+ y5+ y6+ y7+ y8+ y9+ y10;
player = audioplayer(handles.Volume*handles.yT,handles.Fs);
%
--- axes(hanles.axes1)
subplot(2,1,1);
plot(handles.y);
subplot(2,1,2);
plot(handles.yT);
guidata(hObject,handles);
set(handles.slider1,'value',q1);
set(handles.slider2,'value',q2);
set(handles.slider3,'value',q3);
set(handles.slider4,'value',q4);
set(handles.slider5,'value',q5);
set(handles.slider6,'value',q6);
set(handles.slider7,'value',q7);
set(handles.slider8,'value',q8);
set(handles.slider9,'value',q9);
set(handles.slider10,'value',q10);
set(handles.text18,'value',q1);
set(handles.text19,'value',q2);
set(handles.text20,'value',q3);
set(handles.text21,'value',q4);
set(handles.text22,'value',q5);
set(handles.text23,'value',q6);
set(handles.text24,'value',q7);
set(handles.text25,'value',q8);
set(handles.text26,'value',q9);
set(handles.text27,'value',q10);
set(handles.text18,'value',q1);
set(handles.text19,'value',q2);
set(handles.text20,'value',q3);
set(handles.text21,'value',q4);
set(handles.text22,'value',q5);
set(handles.text23,'value',q6);
set(handles.text24,'value',q7);
set(handles.text25,'value',q8);
set(handles.text26,'value',q9);
set(handles.text27,'value',q10);
% --- Executes on button press in rock.
function rock_Callback(hObject, eventdata, handles)
q1 = 4.5;
q2 = -3.6;
q3 = -6.6;
q4 = -2.7;
q5 = 2.1;
q6 = 6;
q7 = 7.5;
q8 = 7.0;
q9 = 7.0;
q10 = 0.1;
set(handles.slider1,'value',q1);
set(handles.slider2,'value',q2);
set(handles.slider3,'value',q3);
set(handles.slider4,'value',q4);
set(handles.slider5,'value',q5);
set(handles.slider6,'value',q6);
set(handles.slider7,'value',q7);
set(handles.slider8,'value',q8);
set(handles.slider9,'value',q9);
set(handles.slider10,'value',q10);
set(handles.text18,'value',q1);
set(handles.text19,'value',q2);
set(handles.text20,'value',q3);
set(handles.text21,'value',q4);
set(handles.text22,'value',q5);
set(handles.text23,'value',q6);
set(handles.text24,'value',q7);
set(handles.text25,'value',q8);
set(handles.text26,'value',q9);
set(handles.text27,'value',q10);
set(handles.text18,'value',q1);
set(handles.text19,'value',q2);
set(handles.text20,'value',q3);
set(handles.text21,'value',q4);
set(handles.text22,'value',q5);
set(handles.text23,'value',q6);
set(handles.text24,'value',q7);
set(handles.text25,'value',q8);
set(handles.text26,'value',q9);
set(handles.text27,'value',q10);
% --- Executes on button press in party.
function party_Callback(hObject, eventdata, handles)
q1 = 5.4;
q2 = 0;
q3 = 0;
q4 = 0;
q5 = 0;
q6 = 0;
q7 = 0;
q8 = 0;
q9 = 0;
q10 = 5.4;
set(handles.slider1,'value',q1);
set(handles.slider2,'value',q2);
set(handles.slider3,'value',q3);
set(handles.slider4,'value',q4);
set(handles.slider5,'value',q5);
set(handles.slider6,'value',q6);
set(handles.slider7,'value',q7);
set(handles.slider8,'value',q8);
set(handles.slider9,'value',q9);
set(handles.text18,'value',q1);
set(handles.text19,'value',q2);
set(handles.text20,'value',q3);
set(handles.text21,'value',q4);
set(handles.text22,'value',q5);
set(handles.text23,'value',q6);
set(handles.text24,'value',q7);
set(handles.text25,'value',q8);
set(handles.text26,'value',q9);
set(handles.text27,'value',q10);
set(handles.text18,'value',q1);
set(handles.text19,'value',q2);
set(handles.text20,'value',q3);
set(handles.text21,'value',q4);
set(handles.text22,'value',q5);
set(handles.text23,'value',q6);
set(handles.text24,'value',q7);
set(handles.text25,'value',q8);
set(handles.text26,'value',q9);
set(handles.text27,'value',q10);