Filtre elliptique/Modélisation sous MATLAB
Introduction
modifierDans 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
modifierLe 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 .
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
modifierLe 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
modifierCe 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
modifierLa 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