IIR / FIR filters analysis

Ce petit script fourni une fonction "analyse_filtre(h)", qui prend en entrée une fonction de transfert (polynôme en fonction de z), et qui trace différents graphes relatifs à ce filtre :

  • Pôles et zéros
  • Réponse fréquentielle (échelles linéaire et logarithmique)
  • Réponse à un échelon
  • Réponse à une impulsion
  • Temps de groupe

Exemple d'analyse 1 : sur un filtre exponentiel (dit filtre "RC numérique")


//     yn = (1-g)*y_n-1 + g*x_n
//     y * (1 - (1 - g) z^-1) = g x
// <=> y = g / (1 - (1 - g) z^-1))
g = 0.1;
h = g / (1 - (1-g)/%z);
analyse_filtre(h);


Exemple d'analyse 2 : sur un filtre moyenne mobile


// h = 0.1 * (1 + z + z^2 + ... + z^9)
h = poly(ones(1,10),'z','c') / 10;
// Remplace z par z^-1 pour avoir un filtre causal
h = horner(h,%z^-1);
analyse_filtre(h);

Note : le temps de groupe est bien sûr constant pour ce filtre (et égal au retard moyen du filtre, soit, ici, 4,5 échantillons), les fluctuations vues sur le graphe étant juste des erreurs d'arrondis dans les calculs (ordre de grandeur : 10e-17)...