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