Vous êtes sur la page 1sur 50

Traitement du signal

Travaux pratique
Rachid saadane
Plan

• Introduction à Matlab

• Génération de signaux sous Matlab


❖ Création d’un signal sinusoïdal
❖ Création d’un signal complexe
❖ Visualisation du spectre d’un signal complexe

• 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.

On le trouve dans les applications de :

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.

Il existe un grand nombre de toolboxes, familles de fonctions


étendant les fonctions de base de Matlab à un certain type de
problème.
Introduction à Matlab
Pour démarrer Matlab

Démarrez le programme. Un certain nombre de fenêtres apparaissent. Les


plus importante sont l'interpréteur en ligne et la fenêtre Help. Si cette
dernière n'apparaît pas, dans l'onglet Help sélectionnez Matlab Help.
C'est tout ; l'aide en ligne est extrêmement conviviale et permet d'acquérir
tout seul la maîtrise du logiciel…
Ce manuel se propose tout de même de décrire l'utilisation du logiciel pour
une utilisation en automatique et en traitement du signal.

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

Choisir un répertoire de travail


Avant toutes choses, le choix d’un répertoire de travail est nécessaire : c'est dans celui-
ci que vous stockerez vos fichiers personnels. Dans la barre de menu, utilisez File/Set
Path…
Les expressions
La programmation en Matlab consiste en l'enchaînement d'expressions composées de
variables, de nombres, de opérateurs et de fonctions.
Variables Il n'est pas nécessaire de déclarer le type ou la dimension des variables :

Matlab choisit selon le contexte.


Par exemple :
a=2.37
Crée la variable a de dimension 1 et lui attribue la valeur 2.37.
Autre exemple :
>> a(2)=1.5
a=
2.37 1.5
>>
Introduction à Matlab
Opérateurs :

Pour la liste des opérateurs disponibles, tapez help ops.


Fonctions
Pour obtenir une liste des fonctions mathématiques élémentaires taper :
>>help elfun
Pour obtenir une liste des fonctions matricielles élémentaires taper :
>>help elmat
Pour obtenir la liste des fonctions d'une toolbox spécifique, par exemple signal toolbox
(traitement du signal) taper :
>>help signal
Introduction à Matlab
Constantes :
Un certain nombre de fonctions prédéfinies (sans arguments) renvoient les valeurs
de constantes usuelles :

Il y a pas mal d’astuces a découvrir sur Matlab


Introduction à Matlab
Fonctions
Les M-files permettent aussi de définir des fonctions. A la différence des scripts, les
variables définies dans une fonction sont locales. Examinons par exemple le m-file
comportant les lignes d'instruction suivantes :

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

Le programmeur en Java ou C++ sera rassuré de savoir que le langage de


programmation de Matlab est aussi orienté-objet. Le lecteur qui vient d’assister
cette petite introduction et qui n'a rien compris est invité à attendre les cours
d'informatique.
Génération de signaux sous Matlab
Les fonctions de base du traitement du signal :

On ne rappellera pas ici les fondamentaux du traitement du signal qui


sont supposés connus. Rappelons uniquement que le traiteur du signal
s'occupe de filtrer des signaux. Les fonctions de base du traitement du
signal sont donc, du moins avec Matlab :

• la fonction fft qui calcule la transformée de Fourier d'une séquence x,

Y=fft(x)

• la fonction filter qui applique un filtre h numérique à une séquence x.

Y=filter(h,1,x)

La fonction filter est équivalente à fonction convolution de Matlab


Génération de signaux sous Matlab
Les signaux numériques
Représentation des signaux
Les signaux sous Matlab sont constitués de séries de chiffres stockés sous forme
de vecteurs. Par exemple :
>> x=1:1:20;
>>x=x';
>>y=[x 2*x x/pi];
x est un vecteur colonne composé de vingt éléments. y est composé des signaux x,
2*x et x/pi.
Signaux courants
Généralement les signaux dépendent du temps. Il est alors commode de commencer
par générer un signal représentant le temps. Par exemple pour une durée de 0 à 1
seconde, par intervalles de 1ms :
>> t=0:0.001:1;
Ci-après les signaux les plus courants et les manières de les obtenir :
sinusoïde :

>>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 :

>>y = [1; zeros(99,1)];

échelon unitaire :

>>y = ones(100,1);

rampe :

>>y = t;
etc…
>>y = t.^2;

signal carré (période : 2π)

>>y = square(4*t);
Génération de signaux sous Matlab
Les signaux numériques
Importer des signaux

Dans la pratique il est courant de travailler avec des signaux provenant


de l'extérieur (résultats de mesures, enregistrements, etc…)
Si les signaux proviennent déjà de Matlab (extension .m) ou sont sous
forme texte (extension .txt) utiliser la fonction load.
Si les signaux sont des sons : utiliser auread, auwrite (extension .au),
wavread et wavwrite (format .wav)

Si les signaux sont des images : utiliser imread et imwrite (exemple


pour une image en format bitmap : imread(image.bmp,'bmp'). Les
formats d'image les plus courants sont reconnus.

De manière plus générale, un "assistant d'importation" facilite le travail


pour importer des données, sons, image, etc... Il est accessible depuis
la barre d'outils de Matlab : File / Import data.
Génération de signaux sous Matlab
Analyser les signaux

Plusieurs manières d'analyser les signaux (par exemple des sons) :

1. les écouter (wavplay, soundsc),

2. les voir si c'est des images (image),

3. visualiser leurs évolutions temporelles (plot),

4. calculer leurs transformées de Fourier (fonction fft)

5. visualiser directement leurs densités spectrales de puissance (psd pour


power spectral density, psdplot pour tracer la densité spectrale de
puissance)
Génération de signaux sous Matlab
Les filtres numériques

La convolution de signaux

La fonction de base du filtrage est la convolution. La fonction Matlab qui


réalise la convolution est conv. Voici un exemple d'application :

>>conv([1 1 1],[1 1 1])


ans =
1 2 3 2 1

Filtres

La sortie y(n) d'un filtre h en fonction de l'entrée x(n) est généralement


calculée à partir des transformées en z :
Les filtres sous Matlab
Fonction filter

C'est la fonction qui permet, à partir d'un signal d'entrée de calculer la sortie
d'un filtre donné.

L'exemple suivant est suffisamment explicite :


>>B=[1 2 ]; %polynome dénominateur (ordre croissant des coefficients)
>>A=[1 2 3]; %polynome numérateur (ordre croissant des coefficients)
>>x=[1 2 3 4 5 6 7 8 9 10]; %signal d'entrée
>>y=filter(B,A,x)%calcul de la sortie du filtre
y=
1 2 0 4 5 -6 16 8 -39 82
>>
Le filtre réalise l'algorithme suivant :

A(1)*y(n) = B(1)*x(n) + B(2)*x(n-1) + ... + B(nb+1)*x(n-nb)


- A(2)*y(n-1) - ... - A(na+1)*y(n-na)

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);

Réponse fréquentielle d'un filtre


La réponse fréquentielle d'un filtre s'obtient avec la fonction freqz
(fréquences normalisées).

>>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

-2Fs -Fs -Fs/2 Fs/2 Fs 2Fs f

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

-2Fs -Fs -Fs/2 Fs/2 Fs 2Fs f

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]);

xlabel( 'f[Hz ] X(j k)')


subplot(212)
P=plot( t , x , 'r' )
set(P,'LineWidth',[2]);
X=xlabel( 't , xN(t) ' )

% 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 :

Ce TP à pour objectif d'explorer l'utilisation les filtres dans le domaine


discret pour supprimer une interférence (dans ce cas un note unique)
d'un signal audio.

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.

Nous allons étudier deux cas différents:

i) Un ton aigu qui se trouve au-dessus de la partie importante du spectre


du signal de la guitare,

ii.) Un mi-ton lancé qui se trouve au milieu du spectre du signal de la


guitare.
Génération de signaux sous Matlab
La manipulation réelle :

Interférence Stockage dans mémoire Stockage dans mémoire

Amp Filtre dans le


Et filtre domaine
temporelle sur
CPU
Filtrage d’un signal musical
I. Accès et l'exploration du signal :

1.) Utiliser la commande wavread de MATLAB pour charger le Le fichier


guitar1.wav. Écouter le signal guitare à l'aide de la commande sound
de Matlab.

3.) Tracer la première seconde du signal dans le domaine temporel pour


voir ce que le signal ressemble plot.

4.) Visualiser le signal guitare dans le domaine des fréquences par le


traçage de son spectre (en dB) calculé à l’aide DFT sur un bloc de
16384-pt.

5.) Vérifiez que la partie importante de spectre du signal guitare est


inférieure à 5 kHz.
Filtrage d’un signal musical
1) Exploration du signal :

[x,Fs]=wavread('guitar1.wav'); 50000 points


x=x.'; % convertir en un vecteur colonne
44100 points
sound(x,Fs);

t=(0:49999)*(1/Fs);
plot(t,x(1:50000))
title('Original Signal')
xlabel('t (s)')
ylabel('signal x[n]')
grid

Fs=44100 Hz ou bien 44100 1/s;


N=?? Pour représenter 1 seconde
44100 1/s🡺 44100 points pour
représenter une seconde.
Génération de signaux sous Matlab
Le spectre du signal :
X1=fftshift(fft(x(20000+(1:16384)),65536));
X2=fftshift(fft(x(40000+(1:16384)),65536));
X3=fftshift(fft(x(60000+(1:16384)),65536));
X4=fftshift(fft(x(80000+(1:16384)),65536));
f=(-32768:32767)*Fs/65536;
subplot(2,2,1)
plot(f/1e3,20*log10(abs(X1)));
title('DFTs of Original Signal')
axis([-20 20 -60 60])
xlabel('f (kHz)')
ylabel('|DFT| (dB)')
grid
subplot(2,2,2)
plot(f/1e3,20*log10(abs(X2)));
axis([-20 20 -60 60])
xlabel('f (kHz)')
ylabel('|DFT| (dB)')
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 :

1.) Créer un sinusoïde dont la fréquence est 10kHz échantillonné avec la


même fréquence du signal guitare est de la même longueur. L’amplitude
de ce sinusoïde doit être 1.

2. Ajouter ce signal au signal guitare pour créer la simulation de signal


enregistré qui a l'interférence (appel x_10 ce signal pour indiquer qu'il a une
interférence à 10 kHz).

3. Écouter le signal guitare l'aide du logiciel MATLAB, la commande sound.

4. Tracer la première seconde du signal guitare avec et sans interférence.

5. Calculer la DFTs du signal qui à des interférences. Vérifiez que


l'interférence est en dehors de la partie importante du spectre du signal de
la guitare.
Génération de signaux sous Matlab
Le spectre du signal :
omega=2*pi*(10000/Fs); %convertir 10 kHz à une fréquence discrète
N=length(x);
n=0:(N-1);
x_10=x+cos(omega*n);
sound(x_10,Fs);
%figure
t=(0:49999)*(1/Fs);
plot(t,x_10(1:50000),'r',t,x(1:50000))
title(‘ Comparaison entre le signal avec et sans Interférence')
legend(‘avec interférence',‘sans interférence')
xlabel('t (s)')
ylabel('signal x[n]')
Grid
X_10_1=fftshift(fft(x_10(20000+(1:16384)),65536));
figure;
subplot(2,1,1)
plot(f/1e3,20*log10(abs(X_10_1)));
title('DFT du Signal avec Interférence')
axis([-20 20 -60 90])
xlabel('f (kHz)')
ylabel('|DFT| (dB)')
grid
subplot(2,1,2)
plot(f/1e3,20*log10(abs(X1)));
title('DFT du Signal sans Interférence')
axis([-20 20 -60 90])
xlabel('f (kHz)')
ylabel('|DFT| (dB)')
grid
Génération de signaux sous Matlab
Le filtrage du signal :

III. Conception des Filtre: MATLAB contient certains routines pour la


conception des filtres FIR (Finite-Impulse Response) facile à utiliser. Sont
filtres n’utilisent pas la contre-réaction, ils n’ont pas de pôles et ils seront
toujours stable. Ils sont les plus largement utilisés DT type de filtre dans la
pratique.

Un filtre FIR simple :

Un filtre FIR en général :

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 :

1. Utilisez les commandes "remezord" et "Remez" pour la conception


d’un filtre passe-bas pour obtenir:

-- delta_s ou rs = 60 dB d’atténuation dans la bande coupée pour le


signal indésirable
-- delta_p ou rp =1 dB d'ondulation dans la bande passante
-- Omega_p = 7kHz
-- Omega_s = 9 kHz.

Utilisez la variable b pour le vecteur qui détient les coefficients de filtre


FIR

2. Tracer la réponse impulsionnelle du filtre FIR.


3. Calculer et tracer la réponse en fréquence du filtre FIR.
Filtrage d’un signal musical
Conception du filtre passe bas
rp=1; rs=60; % atténuation passe bande et stop bande en dB
f_spec=[7000 9000]; % passe bande et stop bande in Hz
AA=[1 0]; %%% veut dire qu’on cherche un filtre passe bande
dev=[(10^(rp/20)-1)/(10^(rp/20)+1) 10^(-rs/20)]; % pour la routine
Fs=44.1e3;
[N,fo,ao,w]=remezord(f_spec,AA,dev,Fs) % estime l’ordre du filtre et donne d’autre
paramètres
b=remez(N,fo,ao,w);%Calcule les coefficients du filtre conçu dans vecteur b
[H,ff]=freqz(b,1,1024,Fs); % calcule la réponse en fréquence du filtre

figure; stem(0:N,b) % Trace la réponse impulsionnelle du filtre


figure; subplot(2,1,1);
plot(ff,20*log10(abs(H)))% Plot magnitude en dB
subplot(2,1,2); plot(ff,unwrap(angle(H)))% Plot l’angle en radians
Figure
zeros=roots(b); % calcule les roots de la fonction de transfert
plot(real(zeros), imag(zeros),'o') % Plot les zeros dans le plan complex z
hold on
plot(0,0,'x')
theta=linspace(-pi,pi,10000);
plot(cos(theta),sin(theta)) %
axis([-1.5 1.5 -1.5 1.5])
axis square
Filtrage d’un signal musical
Figures
Filtrage d’un signal musical
Suppression de l’interférence par filtrage :

1. Le filtre conçu pour enlever l’interférence


- Filtrer le signal x_10 par le filtre passe bas pour trouver x_10_out
y=filter(b,a,x) filtre la donnée x par le filtre donner par a et b pour générer
la donnée y
Les coefficients a et b sont des coefficients de l’équation au
Différence

Pour un filtre FIR avec


2. Évaluer les résultats

1. Comparer le x_10 et x_10_out dans le domaine fréquentiel


2. Comparer le x_10 et x_10_out dans le domaine temporel
3. Écouter le signal filtré en utilisant Matlab
Filtrage d’un signal musical
le code Matlab suppression de l’interférence par filtrage :

x_10_out=filter(b,1,x_10); %%% filtre le signal avec le filtre conçu


X_10_out_1=fftshift(fft(x_10_out(20000+(1:16384)),65536));
figure
subplot(3,1,1); plot(f/1e3,20*log10(abs(X_10_1))); title('DFTof Signal w/
Interference')
subplot(3,1,2); plot(f/1e3,20*log10(abs(X_10_out_1))); title('DFT du signal
filtré')
subplot(3,1,3); plot(f/1e3,20*log10(abs(X1))); title('DFT du signal original')
figure
subplot(3,1,1); plot(t,x_10(1:50000),'r'); title('Signal avec interférence')
subplot(3,1,2); plot(t,x(1:50000),'b',t,x_10_out(1:50000),'m--');
title('le signal filtré et le signal original')
subplot(3,1,3) %%%%% pour visualiser le retard dans signal filtré
%%% pour un filtre d’ordre N le retard est de (N-1)/2
plot(t,x(1:50000),'b',t,x_10_out(22+(1:50000)),'m--')
Filtrage d’un signal musical
Le résultat de filtrage :
Filtrage d’un signal musical
Interférence auteur de 3000 Hz :

Supposons l’interférence maintenant est un sinusoïde de fréquence 3000 Hz.


Ce n’est simplement concevoir un filtre passe bas parce que va enlever le
signal guitare utile aussi.
1. Pour un test changer le filtre passe bas par un filtre passe bande entre
2500 Hz et 2900 Hz et l’appliquer sur le signal original.

2. comparer le signal filtré avec le signal original en fréquence domaine

3. Écouter le signal filtré

4. Ajouter un sinusoïde d’amplitude 1 et de fréquence 3000 Hz au signal


original; Utiliser DFT pour visualise le spectre.

5. Concevoir un filtre stop bande en utilisant remezord et remez.


regarder au spectre du signal interférant avec le signal pour concevoir le
filtre

Voir le suivant
Filtrage d’un signal musical
Interférence auteur de 3000 Hz :

rp=1; rs=60; % les niveaux d’ondulation et stop en dB


f_spec=[2800 2990 3010 3200]; % les bornes de la bande en Hz
AA=[1 0 1]; %%% pour le “stop bande”
Filtrage d’un signal musical
Interférence auteur de 3000 Hz :
Filtrage d’un signal musical
Interférence auteur de 3000 Hz :
Filtrage d’un signal musical
Interférence auteur de 3000 Hz :
Filtrage d’un signal musical
Interférence auteur de 3000 Hz :

Vous aimerez peut-être aussi