République Algérienne Démocratique et Populaire
Ministère de l’Enseignement Supérieur et de la Recherche Scientifique
Université des Sciences et de la Technologie Houari Boumediene
Faculté de Génie Electrique
Domaine Sciences et Technologie
Filière Electronique
Compte rendu TP 5 TAS :
Filtrage multi-cadence
Présenté par: ZITOUNI Hadjira 191931066092
YALA Nour el Houda 191931069561
M1 INST // Sous-groupe :01
2022/2023
Introduction :
Les systèmes étudiés jusqu’à présent ne mettaient en œuvre qu’une seule fréquence ou cadence
d’échantillonnage 1/Te, il est possible de trouver certaines applications ou le signal d’entrée du filtre
et le signal de sortie ne fonctionnent pas à la même cadence « filtre passe bas » « modulation ».
Dans les deux cas, on cherchera à adapter le filtre à la cadence la plus petite afin de minimiser les
temps de calcul.
- Réduction de la fréquence d’échantillonnage « décimation ».
- Augmentation de la fréquence d’échantillonnage « implémentation ».
Manipulation :
1. Soit le signal x(n)=n.U(n), donner et tracer le signal :
Décimation par 2 et par 4 :
Programme :
Un=ones(1,200); %déclaration de Un
n=[1:200] %déclaration de pas n
x(n)=n.*Un; %signal original
subplot(3,3,1) %traçage de signal original x(n)
plot(x)
subplot(3,3,2); %traçage de signal échantillonner de x(n)
stem(x)
subplot(3,3,3); %traçage de spectre d’amplitude de x(n)
plot(abs(fft(x)))
y = decimate(x,2) %décimation par 2 de signal x(n)
subplot(3,3,4) %traçage de signal x(n) décimée par 2
plot(y)
subplot(3,3,5); %traçage de signal échantillonner décimé par 2
stem(y)
subplot(3,3,6) %traçage de spectre d’amplitude de x(n) décimer par 2
plot(abs(fft(y)))
h=decimate(x,4) %décimation par 4 de signal x(n)
subplot(3,3,7) %traçage de signal décimée par 4
plot(h)
subplot(3,3,8); %traçage de signal échantillonner décimé par 4
stem(h)
subplot(3,3,9) %traçage de spectre d’amplitude x(n) décimer par 4
plot(abs(fft(h)))
Figure 1 : Traçage de signal x(n), échantillonner, décimation par 2 et par 4
Commentaire : on à un signal d’origine avec fe=200, X(n)= {0, 1, 2,3, 4, 5, 6, 7, 8, 9,…}
- Avec décimation par 2 « fe’= fe/2 », donc fe=100, on enlève un échantillon entre n
échantillon, x(n)= {0, 2, 4, 6, 8, 10,...}
- Avec décimation par 4 « fe’=fe/4 », donc fe=50, on enlève trois échantillon entre n
échantillon, x(n)= {0, 4, 8, 12, 16, 20,...}
Interpolation par 2 et par 4 :
Programme :
Un=ones(1,200); %déclaration de Un
n=[1:200] %déclaration de pas n
x(n)=n.*Un; %signal original
subplot(3,3,1) %traçage de signal original x(n)
plot(x)
subplot(3,3,2); %traçage de signal échantillonner de x(n)
stem(x)
subplot(3,3,3); %traçage de spectre d’amplitude de x(n)
plot(abs(fft(x)))
y =interp(x,2) %interpolation par 2 de signal x(n)
subplot(3,3,4) %traçage de signal x(n) interpoler par 2
plot(y)
subplot(3,3,5); %traçage de signal échantillonner interpoler par 2
stem(y)
subplot(3,3,6) %traçage de spectre d’amplitude de x(n) interpoler par 2
plot(abs(fft(y)))
h=interp(x,4) %interpolation par 4 de signal x(n)
subplot(3,3,7) %traçage de signal x(n) interpoler par 4
plot(h)
subplot(3,3,8); %traçage de signal échantillonner par 4
stem(h)
subplot(3,3,9) %traçage de spectre d’amplitude de x(n)interpoler par 4
plot(abs(fft(h)))
Figure 2 : Traçage de signal x(n), échantillonné, interpolation par 2 et par 4
Commentaire : on à un signal d’origine avec fe=200, X(n)= {0, 1, 2,3, 4, 5, 6, 7, 8, 9,…}
- Interpolation par 2 « fe’= fe*2 », donc fe=400, on rajoute un « 0 » entre chaque
échantillon : x(n)= {0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5,…}
- Interpolation par 4 « fe’=fe*4 », donc fe=800, on rajoute trois « 0 » entre chaque
échantillon : x(n)= {0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,…}
NOTE : Là vous m’aves dit que je dois travailler avec « upsample » non plus avec « interp »,
voici le résultat obtenue :
Figure 3 : Traçage de signal x(n), échantillonné, interpolation par 2 et par 4 « avec upsample »
Décimation par 2 puis interpolation par 2 :
Programme :
Un=ones(1,200); %déclaration de Un
n=[1:200]; %déclaration de pas n
x(n)=n.*Un; %signal original
subplot(3,3,1) %traçage de signal original x(n)
plot(x)
subplot(3,3,4); %traçage de signal échantillonner de x(n)
stem(x)
subplot(3,3,7); %traçage de spectre d’amplitude de x(n)
plot(abs(fft(x)))
y =decimate(x,2) %décimation par 2 de signal x(n)
subplot(3,3,2) %traçage de signal x(n) décimée par 2
plot(y)
subplot(3,3,5); %traçage de signal échantillonner décimé par 2
stem(y)
subplot(3,3,8) %traçage de spectre d’amplitude de x(n) décimer par 2
plot(abs(fft(y)))
%h=interp(y,2)
h=upsample(y,2) %interpolation par 2 de signal y(n)
subplot(3,3,3) %traçage de signal y(n) interpoler par 2
plot(h)
subplot(3,3,6); %traçage de signal échantillonner interpoler par 2
stem(h)
subplot(3,3,9) %traçage de spectre d’amplitude de y(n) interpoler par 2
plot(abs(fft(h)))
Figure 4 : Traçage de signal x(n), échantillonné, décimé par 2 puis interpoler par 2
Commentaire : on à un signal d’origine avec fe=200, X(n)= {0, 1, 2,3, 4, 5, 6, 7, 8, 9,…}
- décimation par 2 « fe’= fe/2 », donc fe=100, on enlève un entre chaque échantillon :
x(n)= {0, 2, 4, 6, 8, 10, 12, 14,…}
- puis Interpolation par 2 « fe’’=fe’*2 », donc fe’’=200, on rajoute un « 0 » entre chaque
échantillon : x(n)= {0, 0, 2, 0, 4, 0, 6, 0, 8,…}
l’inverse « interpolation par 2 puis décimation par 2 »
Un=ones(1,200); %déclaration de Un
n=[1:200]; %déclaration de pas n
x(n)=n.*Un; %signal original
subplot(3,3,1) %traçage de signal original x(n)
plot(x)
subplot(3,3,4); %traçage de signal échantillonner de x(n)
stem(x)
subplot(3,3,7); %traçage de spectre d’amplitude de x(n)
plot(abs(fft(x)))
%h=interp(y,2)
y =upsample(x,2) %interpolation par 2 de signal x(n)
subplot(3,3,2) %traçage de signal x(n) interpoler par 2
plot(y)
subplot(3,3,5); %traçage de signal échantillonner interpoler par 2
stem(y)
subplot(3,3,8) %traçage de spectre d’amplitude de x(n) interpoler par 2
plot(abs(fft(y)))
h=decimate(y,2) %décimation par 2 de signal y(n)
subplot(3,3,3) %traçage de signal y(n) décimer par 2
plot(h)
subplot(3,3,6); %traçage de signal échantillonner décimer par 2
stem(h)
subplot(3,3,9) %traçage de spectre d’amplitude de y(n) décimer par 2
plot(abs(fft(h)))
Commentaire : on à un signal d’origine avec fe=200, X(n)= {0, 1, 2,3, 4, 5, 6, 7, 8, 9,…}
- interpolation par 2 « fe’= fe*2 », donc fe=400, on rajoute un « 0 » chaque échantillon :
x(n)= {0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5,…}
- puis décimation par 2 « fe’’=fe’/2 », donc fe’’=200, on enlève un échantillon entre chaque
échantillon : x(n)= {0, 1, 2, 3, 4, 5, 6, 7, 8,…} « retour au signal d’origine x(n) »
Figure 5 : Traçage de signal x(n), échantillonné, interpolé par 2 puis décimé par 2
décimation de 3 puis interpolation de 2 :
programme :
Un=ones(1,200); %déclaration de Un
n=[1:200]; %déclaration de pas n
x(n)=n.*Un; %signal original
subplot(3,3,1) %traçage de signal original x(n)
plot(x)
subplot(3,3,4); %traçage de signal échantillonner de x(n)
stem(x)
subplot(3,3,7); %traçage de spectre d’amplitude de x(n)
plot(abs(fft(x)))
y =decimate(x,3) %décimation par 3 de signal x(n)
subplot(3,3,2) %traçage de signal x(n) décimée par 3
plot(y)
subplot(3,3,5); %traçage de signal échantillonner décimé par 3
stem(y)
subplot(3,3,8) %traçage de spectre d’amplitude de x(n) décimer par 3
plot(abs(fft(y)))
%h=interp(y,2)
h=upsample(y,2) %interpolation par 2 de signal y(n)
subplot(3,3,3) %traçage de signal y(n) interpoler par 2
plot(h)
subplot(3,3,6); %traçage de signal échantillonner interpoler par 2
stem(h)
subplot(3,3,9) %traçage de spectre d’amplitude de y(n) interpoler par 2
plot(abs(fft(h)))
Figure 6 : Traçage de signal x(n), échantillonné, décimé par 3 puis interpoler par 2
Commentaire : on à un signal d’origine avec fe=200, X(n)= {0, 1, 2,3, 4, 5, 6, 7, 8, 9,…}
- décimation par 3 « fe’= fe/3 », donc fe=66.6, on enlève deux échantillon entre chaque
échantillon : x(n)= {0, 3, 6, 9, 12, 15, 18, 21,…}
- puis Interpolation par 2 « fe’’=fe’*2 », donc fe’’=133.33, on rajoute un « 0 » entre chaque
échantillon : x(n)= {0, 0, 3, 0, 6, 0, 9, 0, 12,…}
l’inverse « interpolation par 3 puis décimation par 2 »
programme :
Un=ones(1,200); %déclaration de Un
n=[1:200]; %déclaration de pas n
x(n)=n.*Un; %signal original
subplot(3,3,1) %traçage de signal original x(n)
plot(x)
subplot(3,3,4); %traçage de signal échantillonner de x(n)
stem(x)
subplot(3,3,7); %traçage de spectre d’amplitude de x(n)
plot(abs(fft(x)))
%h=interp(y,2)
y =upsample(x,2) %interpolation par 2 de signal x(n)
subplot(3,3,2) %traçage de signal x(n) interpoler par 2
plot(y)
subplot(3,3,5); %traçage de signal échantillonner interpoler par 2
stem(y)
subplot(3,3,8) %traçage de spectre d’amplitude de x(n) interpoler par 2
plot(abs(fft(y)))
h=decimate(y,3) %décimation par 3 de signal y(n)
subplot(3,3,3) %traçage de signal y(n) décimer par 3
plot(h)
subplot(3,3,6); %traçage de signal échantillonner décimer par 3
stem(h)
subplot(3,3,9) %traçage de spectre d’amplitude de y(n) décimer par 3
plot(abs(fft(h)))
Figure 7 : Traçage de signal x(n), échantillonné, interpolé par 2 puis décimé par 3
Commentaire : on à un signal d’origine avec fe=200, X(n)= {0, 1, 2,3, 4, 5, 6, 7, 8, 9,…}
- interpolation par 2 « fe’= fe*2 », donc fe=400, on rajoute un « 0 » chaque échantillon :
x(n)= {0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5,…}
- puis décimation par 3 « fe’’=fe’/3 », donc fe’’=133.33, on enlève un échantillon entre
chaque échantillon : x(n)= {0, 0, 3, 0, 6, 0, 9, 0, 12,…}
2. considérons le signal x(t) :
Traçage de signal x(n) et son spectre d’amplitude :
Programme :
fe=2000; %fréquence d'échantillonnage
te=1/fe; %temps d'échantillonnage
t=0:te:1-te; %le temps
f1=100; %valeur de fréquence f1
f2=300; %valeur de fréquence f2
x=cos(2*f1*pi*t)+cos(2*f2*pi*t) ; %le signal x(t)
figure(1) %traçage de signal x(n)
plot(t,x)
figure(2) %traçage de spectre d'amplitude
plot(abs(fft(x)))
Figure 8 : signal x(n)
Figure 9 : spectre d’amplitude de signal x(n)
Décimation de 2 avec et sans filtrage :
fe=2000; %fréquence d'échantillonage
te=1/fe; %temps d'échantillonnage
t=0:te:1-te; %le temps
f1=100; %valeur de fréquence f1
f2=300; %valeur de fréquence f2
x=cos(2*f1*pi*t)+cos(2*f2*pi*t) %le signal x(t)
subplot(3,3,1) %traçage de signal x
plot(x)
subplot(3,3,4) %traçage de signal échantillonner de x
stem(x)
subplot(3,3,7) %traçage de spectre d’amplitude de x
plot(abs(fft(x)))
y =decimate(x,2) %décimation par 2 de signal x "avant filtrage"
subplot(3,3,2) %traçage de signal décimée par 2
plot(y)
subplot(3,3,5); %traçage de signal échantillonner décimé par 2
stem(y)
subplot(3,3,8)
plot(abs(fft(y))) %traçage de spectre d’amplitude décimer par 2
N=6; %l'ordre de filtre
fc=400; %fréquence de coupure
Wn=(2*fc)/fe; %fréquence normalisée
h=fir1(N,Wn) %déclaration de fir1
h1=filter(h,1,x) %filtrage de signal
%LA J'AI ESSAYER DE FAIRE LE TRACAGE DE FILTE MAIS J'AI VU QYE C'EST PAS LA PEINE!
% subplot(3,4,3)
% plot(h)
% subplot(3,4,7)
% stem(h)
% subplot(3,4,11)
% plot(abs(fft(h1)));
y1 =decimate(h1,2) %décimation par 2 de signal x "après filtrage"
subplot(3,3,3) %traçage de signal décimée par 2
plot(y1)
subplot(3,3,6); %traçage de signal échantillonner décimé par 2
stem(y1)
subplot(3,3,9)
plot(abs(fft(y1))) %traçage de spectre d’amplitude décimer par 2
Figure 10 : Décimation par 2 de signal sans et avec filtrage
Commentaire : le milieu de la figure représente le signal décimé par 2 sans filtre, et adroite on à
décimation par 2 avec filtre
Décimation de 4 avec et sans filtrage :
fe=2000; %fréquence d'échantillonnage
te=1/fe; %temps d'échantillonnage
t=0:te:1-te; %le temps
f1=100; %valeur de fréquence f1
f2=300; %valeur de fréquence f2
x=cos(2*f1*pi*t)+cos(2*f2*pi*t) %le signal x(t)
subplot(3,3,1) %traçage de signal x
plot(x)
subplot(3,3,4) %traçage de signal échantillonner de x
stem(x)
subplot(3,3,7) %traçage de spectre d’amplitude de x
plot(abs(fft(x)))
y =decimate(x,4) %décimation par 4 de signal x "avant filtrage"
subplot(3,3,2) %traçage de signal décimée par 4
plot(y)
subplot(3,3,5); %traçage de signal échantillonner décimé par 4
stem(y)
subplot(3,3,8)
plot(abs(fft(y))) %traçage de spectre d’amplitude décimer par 4
N=6; %l'ordre de filtre
fc=400; %fréquence de coupure
Wn=(2*fc)/fe; %fréquence normalisée
h=fir1(N,Wn) %déclaration de fir1
h1=filter(h,1,x) %filtrage de signal
y1 =decimate(h1,4) %décimation par 4 de signal x "après filtrage"
subplot(3,3,3) %traçage de signal décimée par 4
plot(y1)
subplot(3,3,6); %traçage de signal échantillonner décimé par 4
stem(y1)
subplot(3,3,9)
plot(abs(fft(y1))) %traçage de spectre d’amplitude décimer par 4
Figure 11 : Décimation par 4 de signal sans et avec filtrage
Commentaire : le milieu de la figure représente le signal décimé par 4 sans filtre, et adroite on à
décimation par 4 avec filtre
Interpolation de 2 avec et sans filtrage :
fe=2000; %fréquence d'échantillonnage
te=1/fe; %temps d'échantillonnage
t=0:te:1-te; %le temps
f1=100; %valeur de fréquence f1
f2=300; %valeur de fréquence f2
x=cos(2*f1*pi*t)+cos(2*f2*pi*t) %le signal x(t)
subplot(3,3,1) %traçage de signal x
plot(x)
subplot(3,3,4) %traçage de signal échantillonner de x
stem(x)
subplot(3,3,7) %traçage de spectre d’amplitude de x
plot(abs(fft(x)))
y =upsample(x,2) %interpolation par 2 de signal x "avant filtrage"
subplot(3,3,2) %traçage de signal décimée par 2
plot(y)
subplot(3,3,5); %traçage de signal échantillonner interpolé par 2
stem(y)
subplot(3,3,8)
plot(abs(fft(y))) %traçage de spectre d’amplitude interpolé par 2
N=6; %l'ordre de filtre
fc=400; %fréquence de coupure
Wn=(2*fc)/fe; %fréquence normalisée
h=fir1(N,Wn) %déclaration de fir1
h1=filter(h,1,x) %filtrage de signal
y1 =upsample(h1,2) %interpolation par 2 de signal x "après filtrage"
subplot(3,3,3) %traçage de signal interpolé par 2
plot(y1)
subplot(3,3,6); %traçage de signal échantillonner interpolé par 2
stem(y1)
subplot(3,3,9)
plot(abs(fft(y1))) %traçage de spectre d’amplitude interpolé par 2
Figure 12 : Interpolation de 2 de signal sans et avec filtrage
Commentaire : le milieu de la figure représente le signal interpolé par 2 sans filtre, et adroite on
à interpolation par 2 avec filtre
Interpolation de 4 avec et sans filtrage :
fe=2000; %fréquence d'échantillonnage
te=1/fe; %temps d'échantillonnage
t=0:te:1-te; %le temps
f1=100; %valeur de fréquence f1
f2=300; %valeur de fréquence f2
x=cos(2*f1*pi*t)+cos(2*f2*pi*t) %le signal x(t)
subplot(3,3,1) %traçage de signal x
plot(x)
subplot(3,3,4) %traçage de signal échantillonner de x
stem(x)
subplot(3,3,7) %traçage de spectre d’amplitude de x
plot(abs(fft(x)))
y =upsample(x,4) %interpolation par 4 de signal x "avant filtrage"
subplot(3,3,2) %traçage de signal décimée par 4
plot(y)
subplot(3,3,5); %traçage de signal échantillonner interpolé par 4
stem(y)
subplot(3,3,8)
plot(abs(fft(y))) %traçage de spectre d’amplitude interpolé par 4
N=6; %l'ordre de filtre
fc=400; %fréquence de coupure
Wn=(2*fc)/fe; %fréquence normalisée
h=fir1(N,Wn) %déclaration de fir1
h1=filter(h,1,x) %filtrage de signal
y1 =upsample(h1,4) %interpolation par 4 de signal x "après filtrage"
subplot(3,3,3) %traçage de signal interpolé par 4
plot(y1)
subplot(3,3,6); %traçage de signal échantillonner interpolé par 4
stem(y1)
subplot(3,3,9)
plot(abs(fft(y1))) %traçage de spectre d’amplitude interpolé par 4
Figure 13 : Interpolation de 4 de signal sans et avec filtrage
3. Traçage de signal x(n) et son spectre d’amplitude :
Programme :
fe=2000; %fréquence d'échantillonnage
te=1/fe; %temps d'échantillonnage
t=0:te:1-te; %le temps
a1=0.2 ; a2=0.5 ; a3=0.7 ; a4=1 ; a5=1.5 ; a6=1.5 ; a7=1 ; a8=0.7 ; a9=0.5 ; a10=0.2;
f1=100 ; f2=300 ; f3=300 ; f4=400 ; f5=450 ; f6=550 ; f7=600 ; f8=700 ; f9=800 ; f10=900;
x=a1*cos(2*f1*pi*t)+a2*cos(2*f2*pi*t)+a3*cos(2*f3*pi*t)+a4*cos(2*f4*pi*t)+a5*cos(2*f5*pi*t)+a6*cos(2
*f6*pi*t)+a7*cos(2*f7*pi*t)+a8*cos(2*f8*pi*t)+a9*cos(2*f9*pi*t)+a10*cos(2*f10*pi*t);
figure(1)
plot(t,x)
figure(2)
plot(abs(fft(x)));
Figure 14 : signal x(n)
Figure 15 : spectre d’amplitude d’un signal x(n)
CONCLUSION :
Dans ce TP on à bien compris le fonctionnement des filtre multi-cadence et le principe de la
décimation et l’interpolation.
- Réduction de la fréquence d’échantillonnage « décimation », fe’=fe/n
- Augmentation de la fréquence d’échantillonnage « implémentation », fe’=fe*n