====== introduction au traitement du signal avec scilab ======
====== Synthèse des filtres à réponse impulsionnelle infinie ======
===== Méthode de l’invariance impulsionnelle =====
//
clear
//
// définition des constante
Te=1e-3; w0=.01*2*%pi/Te; A=1;
//
// variable temps
t=Te*(0:128);
//
// réponse impulsionnelle
h=w0*exp(-w0*t);
//
// description du filtre par la transformée en z, numérateur puis dénominateur
H1n=A*w0*poly([0 1],'z','c');H1d= poly([-exp(-w0*Te) 1],'z','c');
//
// description d’un second filtre en ajustant le gain basse fréquence
A=(1-exp(-Te*w0))/w0;
//
H2n=A*w0*poly([0 1],'z','c');H2d= poly([-exp(-w0*Te) 1],'z','c');
//
//
//
// calcul de la réponse fréquentielle des deux filtres précédents
f=(0:.001:.05);
hdf1=freq(H1n,H1d,exp(2*%pi*%i*f));
hdf2=freq(H2n,H2d,exp(2*%pi*%i*f));
//
// affichage
xbasc(); xset("font size",4);
xsetech([0,0,1,.3]);plot2d(t,h, style=-9);plot2d3(t,h);xtitle("réponse impulsionnelle");
xsetech([0,1/3,1,.3]);plot2d(f,hdf1);xtitle("réponse fréquentielle pour A=1");
xsetech([0,2/3,1,.3]);plot2d(f,hdf2);xtitle("réponse fréquentielle corrigée");
===== Transformation bilinéaire =====
clear
//
// définition des constantes
Te=1e-3; Fcd=200;
//
// filtre analogique équivalent
Ga=analpf(6,'cheb1',[.1,0],2*%pi*Fcd);
//
// filtre analogique pour le calcul
teta=Fcd*(2*Te)*%pi;
Fcad=(2/Te*tan(teta/2))/(2*%pi);
Gad=analpf(6,'cheb1',[.1,0],2*%pi*Fcad);
//
// définition de la variable z
z=poly(0,'z');
//
// transformation bilinéaire
Gd=horner(Gad,2/Te*(z-1)/(z+1));
//
// calcul des points du filtre analogique équivalent
fa=(100:10:300);
Gain_a=freq(Ga(2),Ga(3),%i*2*%pi*fa);
//
// calcul des points du filtre numérique
fd=(.1:.01:.3);
Gain_d=freq(Gd(2),Gd(3),exp(%i*2*%pi*fd));
//
// affichage
xbasc(); xset("font size",4);
//
xsetech([0,0,1,.5]);plot2d(fa,20*log10(abs(Gain_a)), rect=[100, -60 300, 10]);
xtitle("réponse fréquentielle du filtre analogique équivalent","fréquence", "gain en dB");
//
xsetech([0,1/2,1,.5]);plot2d(fd,20*log10(abs(Gain_d)) ,rect=[0.1, -60 0.3, 10]);
xtitle("réponse fréquentielle du filtre numérique","f normalisée","gain en dB");