design_riia

Design RII d'après un prototype analogique classique.

Espace de nom : tsd::filtrage

Prototype

FRat<cfloat> design_riia(entier n, cstring type, cstring prototype, float fc, float δ_bp=0.1f, float δ_bc=60)

Paramètres

nOrdre du filtre.
typeType de filtre ("lp" pour passe-bas, "hp" pour passe-haut, ...)
prototype"butt", "cheb1", "cheb2" ou "ellip"
fcFréquence de coupure normalisée (entre 0 et 0,5)
δ_bpOndulation maximale en decibels dans la bande passante (utilisé seulement pour un filtre de Chebychev de type I ou un filtre elliptique).
δ_bcAtténuation minimale en decibels dans la bande coupée (utilisé seulement pour un filtre de Chebychev type II ou un filtre elliptique).

Retourne

h Fonction de transfert (digitale)

Description

Cette fonction renvoie une fonction de transfert discrète, sous forme de pôles et de zéros (idéal pour une implémentation sous la forme de sections du second ordre, voir filtre_sois()). Les prototypes supportés sont les suivants :

  • Butterworth (pas d'ondulation, bande de transition large)
  • Chebychev type I (ondulations dans la bande passante)
  • Chebychev type II (ondulations dans la bande coupée)
  • Elliptique (ondulations partout, mais bande de transition la plus étroite)

Le filtre est d'abort conçu dans le domaine analogique (transformée de Laplace), puis converti en filtre digital (transformée en z) grâce à la transformée bilinéaire.

Exemple


  // Test des 4 types de filtre, avec les paramètres suivants :
  // - Filtres passe-bas (lp = low-pass)
  // - Fréquence de coupure       = fe/4
  // - Ondulation bande passante  = 1 dB  (Chebychev type I & elliptique)
  // - Atténuation bande coupée   = 60 dB (Chebychev type II & elliptique)
  Figures f;
  pour(auto type: {"butt", "cheb1", "cheb2", "ellip"})
  {
    soit h = design_riia(10, "lp", type, 0.25, 1, 60);
    soit [fr, xm] = frmag(h);

    f.subplot().plot(fr, mag2db(xm), "b-", type);
    // pour pouvoir comparer les réponses entre elles
    f.gcf().def_rdi({0, -100, 0.5, 100});
  }

Voir aussi

trf_bilineaire(), filtre_sois(), filtre_rii()