Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Travaux pratique
Rachid saadane
Plan
• Introduction à Matlab
• Applications
Synthèse d’un signal carré
Effet d’une salle sur un signal audio
Filtrage d’un signal audio
Autres
Introduction à Matlab
Matlab est un langage de programmation de haut niveau destiné
au calcul scientifique.
1. calcul,
2. développement d'algorithmes,
3. modélisation et simulation,
4. analyse et visualisation de données,
5. création de graphiques scientifiques,
6. création d'application avec interfaces utilisateurs.
Arrêter Matlab
Pour arrêter le Matlab il faut taper quit ou exit ou fermez les fenêtres.
Introduction à Matlab
Matlab comme interpréteur en ligne
Premiers pas
Au démarrage de Matlab, une fenêtre s'ouvre et propose le prompt >> :
on est en présence de l'interpréteur en ligne.
Premier essai
Taper 2+2 et appuyez sur envoi. L'affichage propose alors :
>> 2+2
ans =
4
>>
Taper 3*3 et appuyer sur entrer. Donc l’affichage propose :
>> 3*3
ans =
9
Taper i^2. La réponse est :
>> i^2
ans =
-1
Introduction à Matlab
Un peu de méthode
function r = rank(A,tol)
% RANK Matrix rank.
% RANK(A) provides an estimate of the number of linearly
% independent rows or columns of a matrix A.
% RANK(A,tol) is the number of singular values of A
% that are larger than tol.
% RANK(A) uses the default tol = max(size(A)) * norm(A) * eps.
s = svd(A);
%cas où il n'y qu'un argument
if nargin==1
tol = max(size(A)) * max(s) * eps;
end
%cas où il y a deux arguments
r = sum(s > tol);
Introduction à Matlab
Instructions et structures de contrôle
Matlab dispose d'un certain nombre d'instructions de contrôle :
if
switch
for
while
continue
Break
Pour la syntaxe exacte et pour des exemples, utiliser l'aide en ligne : help if (par exemple).
Il est parfois possible de réduire le temps de calcul en utilisant la vectorisation. Examinons par
exemple les lignes suivantes :
A=1:1:100;
for ii=1:1:100
B(ii)=sin(A(ii));
end;
Ces lignes sont strictement équivalentes à :
A=1:1:100;
B=sin(A);
Le résultat produit est le même que dans la première version, le temps de
calcul plus court et la lisibilité améliorée.
Introduction à Matlab
Instructions et structures de contrôle
Exemple
f=(1:10000);
d=[];
tic
for t=1:length(f)
d(t)=sin(f(t)^2);
end
toc
%%%%%%%%%%%%%%%%%
dd=[];
tic
dd=sin(f.^2);
toc
plot(d-dd)
%%%%%%%%%
elapsed_time = 0.3830
elapsed_time = 0.0200
Introduction à Matlab
Un peu plus sur la programmation
Y=fft(x)
Y=filter(h,1,x)
>>f=50;
>>signal=sin(2*pi*f*t);
sinusoïde bruitée (bruit blanc) :
>>signal_bruite = signal + 0.5*randn(size(t));
Génération de signaux sous Matlab
Les signaux numériques
Représentation des signaux
impulsion :
échelon unitaire :
>>y = ones(100,1);
rampe :
>>y = t;
etc…
>>y = t.^2;
>>y = square(4*t);
Génération de signaux sous Matlab
Les signaux numériques
Importer des signaux
La convolution de signaux
Filtres
C'est la fonction qui permet, à partir d'un signal d'entrée de calculer la sortie
d'un filtre donné.
Les conditions initiales sont supposées nulles dans cet exemple. Pour des
conditions initiales non nulles, consulter l'aide en ligne.
Les filtres sous Matlab
Réponse impulsionelle d'un filtre
Pour obtenir la réponse impulsionnelle d'un filtre il est possible d'utiliser la
fonction filter déjà rencontrée ou bien d'utiliser la fonction impz qui calcule
et trace la réponse impulsionnelle. Avec l'exemple précédent :
>>impz((A,B);
>>freqz(B,A)
Génération de signaux sous Matlab
Pôles et zéros d'un filtre
La fonction zpoles trace les pôles et les zéros d'un filtre numérique. (En
l'appliquant à notre exemple on comprend pourquoi sa réponse
impulsionelle diverge…).
Exemple :
figure
zeros=roots(b); % calcul des racines de la fonction de transfert.
plot(real(zeros), imag(zeros),'o') % Plot des racines dans le plan complexe
hold on
plot(0,0,'x')
theta=linspace(-pi,pi,10000);
plot(cos(theta),sin(theta)) % trace le cercle unitaire
grid
xlabel('Real\{z\}')
ylabel('Imag\{z\}')
axis([-1.5 1.5 -1.5 1.5])
axis square
title('Pole-Zero Plot')
Génération de signaux sous Matlab
❖ Création d’un signal sinusoïdal
F0=100;
Fs=3000;
Ts=1/Fs;
N=512;
t=[0:N]*Ts;
A=1;
x1=A*cos(2*pi*F0*t-pi/2);
x2=A/2*cos(2*pi*2*F0*t-(pi/4));
x3=A*cos(2*pi*6*F0*t-(pi/4));
x4=A/3*cos(2*pi*5*F0*t-(pi/6));
len=500;
figure
P=plot(t(1:len),x1(1:len));
set(P,'LineWidth',[2]);
hold on
P=plot(t(1:len),x2(1:len),'r');
set(P,'LineWidth',[2]);
X= xlabel('time (s)')
set(X,'FontSize',10);
Y= ylabel('Magnitude')
set(Y,'FontSize',10);
grid on;
axis([0 .035 -1.5 1.5 ]);
Génération de signaux sous Matlab
❖ Création d’un signal sinusoïdal
figure
P=plot(t(1:len),x2(1:len)+x1(1:len),'r');
set(P,'LineWidth',[2]);
% T=title('Train des impulsions sans canal');
% set(T,'FontSize',10);
X= xlabel('time (s)')
set(X,'FontSize',10);
Y= ylabel('Magnitude')
set(Y,'FontSize',10);
grid on;
axis([0 .035 -1.5 1.5 ]);
Génération de signaux sous Matlab
❖ Création d’un signal sinusoïdal
X1=fft(x1);
X2=fft(x2);
freq=[0:512]*Fs/N;
figure
subplot(2,1,1)
P=plot(freq(1:256),abs(X1(1:256)));
set(P,'LineWidth',[2]);
X= xlabel('f(kHz)')
set(X,'FontSize',10);
Y= ylabel('Magnitude')
set(Y,'FontSize',10);
grid on;
subplot(2,1,2)
P=plot(freq(1:256),abs(X2(1:256)));
set(P,'LineWidth',[2]);
X= xlabel('f(kHz)')
set(X,'FontSize',10);
Y= ylabel('Magnitude')
set(Y,'FontSize',10);
grid on;
Génération de signaux sous Matlab
❖ Création d’un signal sinusoïdal
figure
xs=1+x1(1:len)+x2(1:len)+x3(1:len)+x4(1:len)
P=plot(t(1:len),xs);
set(P,'LineWidth',[2]);
T=title(‘La somme des différents signaux');
set(T,'FontSize',10);
X= xlabel('time (s)')
set(X,'FontSize',10);
Y= ylabel('Magnitude')
set(Y,'FontSize',10);
grid on;
Xs=fft(xs);
freq=[0:512]*Fs/N;
figure
subplot(2,1,1)
P=plot(freq(1:256),10*log10(abs(Xs(1:256))));
set(P,'LineWidth',[2]);
X= xlabel('f(kHz)')
set(X,'FontSize',10);
Y= ylabel('Magnitude')
set(Y,'FontSize',10);
Échantillonnage
X( f ) À l’entrée de l’ADC
Fs/2 Fs
f
Au milieu de l’DAC
La sortie de l’DAC
Fs/2 f
Échantillonnage
X( f ) À l’entrée de l’ADC
Fs/2 Fs
f
Au milieu de l’DAC
La sortie de l’DAC
Fs/2 f
Synthèse d’un signal carré
L’objectif de ce tp est d’appliquer l’équation vue dans le cours pour la synthèse
des signaux SIR et SIC :
N=300;
k = [-N : N]; A = 1; T = 1;
f0 = 1/T; dt = .2;
X = A * dt/T * sinc(pi* k * f0 *dt);
t = -2*T : 1 *T/300 : 2 *T;
x = zeros(size(t));
for l = 1: length(k)
x = x + X(l).* exp(j*2*pi*t* f0*k(l));
end
clf
subplot(211)
%plot( k*f0 ,X,'or' )
P=plot( k*f0,X, 'r:' )
set(P,'LineWidth',[2]);
% X= xlabel('time (s)')
set(X,'FontSize',10);
Traitements d’un signal musical
Étude de l’effet d’un circuit RC sur une note musicale:
Voici le code
C=5e-9;R=100e3; %%% soit RC = 0.5 ms
RC=R*C; %% calcul de la constant du temps
[x,Fs]=wavread('guitar1.wav'); % lecture de la note musicale
del_t=1/Fs; % Fs la fréquence d’échantillonnage
t=(0:500)*del_t; %% création d’un vecteur de point de 501 points
h=(1/RC)*exp(-t/RC); %% Calcule de reponse impulsionnelle sur 501 points
%% utiliser del_t*h(nTs) pour rendre D-T conv proche de C-T conv
y=conv(x,del_t*h); %%
Essayer les deux commandes :
sound(x,Fs) pour ecouter le signal original
sound(y,Fs) noter que le circuit RC a enlever les effets des hautes fréquences
Filtrage d’un signal musical
Le contexte général :
Imaginez que vous êtes dans votre studio d'enregistrement et vient d'enregistrer ce
que vous ressentez est un « rythme parfait" d'un solo de guitare pour une chanson
que vous enregistrez, mais vous découvrez que quelqu'un avait allumé un dispositif
électronique à une proximité qui a causé le rayonnement électromagnétique qui a été
repris quelque part dans l'électronique et audio a été enregistrée au-dessus de la
guitare solo.
Plutôt que d'essayer de recréer ce « rythme parfait", vous décidez que vous pouvez
peut-être faire une conception d’un filtre DT pour le retirer.
t=(0:49999)*(1/Fs);
plot(t,x(1:50000))
title('Original Signal')
xlabel('t (s)')
ylabel('signal x[n]')
grid
subplot(2,2,3)
plot(f/1e3,20*log10(abs(X3))); subplot(2,2,4)
axis([-20 20 -60 60]) plot(f/1e3,20*log10(abs(
xlabel('f (kHz)') X4)));
ylabel('|DFT| (dB)') axis([-20 20 -60 60])
grid xlabel('f (kHz)')
ylabel('|DFT| (dB)')
grid
Filtrage d’un signal musical
L’ajout d’une interférence haute fréquence :
N= “Ordre du Filtre“
Ces filtres sont assez facile à l'aide d'un logiciel de conception. Nous allons utiliser les
routines appelé remezord.m et remez.m pour la conception des FIRs sous
MATLAB.
La commande remezord donnera une estimation du filtre FIR nécessaire afin
d'atteindre des spécifications. La routine remez.m ensuite donnera le design.
Filtrage d’un signal musical
Voici comment on indique les spécifications de filtre :
Les spécifications pour un filtre passe bas, passe haut, passe bande et Rejet
Bande
Filtrage d’un signal musical
III. Filtre passe-bas, les mesures pour la conception :
Voir le suivant
Filtrage d’un signal musical
Interférence auteur de 3000 Hz :