Leçons de niveau 14

Filtre elliptique/Modélisation sous MATLAB

Une page de Wikiversité.
Sauter à la navigation Sauter à la recherche
Début de la boite de navigation du chapitre
Modélisation sous MATLAB
Icône de la faculté
Chapitre no 2
Leçon : Filtre elliptique
Chap. préc. :Introduction
fin de la boite de navigation du chapitre
Icon falscher Titel.svg
En raison de limitations techniques, la typographie souhaitable du titre, « Filtre elliptique : Modélisation sous MATLAB
Filtre elliptique/Modélisation sous MATLAB
 », n'a pu être restituée correctement ci-dessus.

Introduction[modifier | modifier le wikicode]

Dans cet article est décrite une manière de concevoir un filtre passe-bande analogique à caractéristique elliptique (de Cauer) à l'aide de l'outil MATLAB et de le simuler. Le logiciel MATLAB nous permet de calculer rapidement les filtres partiels nécessaires à sa réalisation.

Cahier des charges[modifier | modifier le wikicode]

Le gabarit de la figure 1 défini la réponse en fréquence de notre filtre. Il est sensé ne laisser passer que le bip de fréquence la plus élevée d'un signal radiophonique soit .

Figure 1: Gabarit de réalisation


Sur le gabarit nous avons les valeurs suivantes qui sont données :

Étant donnée que la fréquence centrale d’un passe bande se trouve au centre du gabarit, nous pouvons facilement à l’aide de la moyenne géométrique calculer les fréquences et .

Conception avec MATLAB[modifier | modifier le wikicode]

Le programme MATLAB nous met à disposition tout un set de fonctions qui nous permettent de concevoir facilement notre filtre.

ellipord, ellip, zp2sos, zpk, bode, lsim, waveread, wavplay

Script de conception[modifier | modifier le wikicode]

Ce script permet de calculer le filtre complet ainsi que les deux filtres d’ordre 2 qui le composent. De plus il affiche les diagrammes de bode des filtres partiels et de leur mise en cascade. Le script suivant n'a été testé que sous MATLAB 7.1

%*********************************************************************
%       CONCEPTION D'UN FILTRE ELLIPTIQUE                            *
%*********************************************************************
clear; clc;
close all;
%Definitions des paramètres du gabarit
fr=1250;
f1=1000;
f2=1220;
f3=fr^2/f2;
f4=fr^2/f1;
H0=0;
H1=-0.5;
H2=-40;

%Fréquences de stop et de pass
Wp=2*pi*[f2 f3];
Ws=2*pi*[f1 f4];
%Amplitudes des "vagues" ripples
Rp=abs(H1);
Rs=abs(H2);

%Détermine l’ordre du filtre ainsi que ses fréquences propres
[N, Wn] = ellipord(Wp, Ws, Rp, Rs, 's');
%Créée une matrice contenant les zéros, les poles et le gain du filtre 
[Z,P,K] = ellip(N, Rp, Rs, Wn, 's');
%Donne les coefficients des polynômes du numérateur et du dénumérateur 
[num, den] = ellip(N, Rp, Rs, Wn, 's');

%Matrice SOS contenant les coefficients de la forme standard de la fonction
% de transfert d'ordre 2 (selon Laplace). 
[SOS, G] = zp2sos(Z,P,K);

%Plotting complete filter
syst = ZPK(Z,P,K);
delta_f=1;
fmin=0;
fmax=10000;
%f=(fmin:delta_f:fmax); %linear frequency axis
f=logspace(0,4,10000); %logaritmic frequency axis
[Ampl, Phase] = bode(syst, 2*pi*f);
Ampl = squeeze(Ampl);

figure(1);
plot(f, 20*log10(Ampl+eps));
xlabel('Frequency [Hz]');
ylabel('Amplitude response [dB]');
grid on;

%Plotting 1st second-order section
[Z1,P1,K1]=sos2zp(SOS(1,1:6), G);
syst2=ZPK(Z1,P1,K1);
delta_f=1;
fmin=0;
fmax=10000;
%f=(fmin:delta_f:fmax); %linear frequency axis
f=logspace(0,4,10000); %logaritmic frequency axis
[Ampl, Phase] = bode(syst2, 2*pi*f);
Ampl = squeeze(Ampl);

figure(2);
plot(f, 20*log10(Ampl+eps));
xlabel('Frequency [Hz]');
ylabel('Amplitude response [dB]');
grid on;

%Plotting 2nd second-order section
[Z1,P1,K1]=sos2zp(SOS(2,1:6), 1);
syst2=ZPK(Z1,P1,K1);
delta_f=1;
fmin=0;
fmax=10000;
%f=(fmin:delta_f:fmax); %linear frequency axis
f=logspace(0,4,10000); %logaritmic frequency axis
[Ampl, Phase] = bode(syst2, 2*pi*f);
Ampl = squeeze(Ampl);

figure(3);
plot(f, 20*log10(Ampl+eps));
xlabel('Frequency [Hz]');
ylabel('Amplitude response [dB]');
grid on;

%Test with the sound
figure(4);
[bach,FS,NBITS,OPTS]=wavread('R:\Labos\SI\2321_Eln1\bach_bip_short.wav');
wavplay(bach, FS);
t=(0:length(bach)-1)/FS;
Y=lsim(syst,bach,t);
plot(Y);
sound(Y,FS);

Fonction de transfert[modifier | modifier le wikicode]

La fonction de transfert d'un filtre de deuxième ordre oscillant est exprimée par rapport aux paramètres suivants :

  •  : Facteur de qualité des zéros
  •  : Facteur de qualité des pôles
  •  : Pulstation du zéro
  •  : Pulstation du pôle