series_iir()

Applique un filtre à réponse impulsionnelle infinie sur une série.

La fonction prend une expression contenant un tableau numérique dynamique en tant qu’entrée et applique un filtre Infinite Impulse Response . En spécifiant les coefficients de filtre, vous pouvez utiliser la fonction pour :

La fonction prend comme entrée la colonne contenant le tableau dynamique et deux tableaux dynamiques statiques des coefficients de dénominateurs et de numérateurs du filtre, et applique le filtre sur la colonne. Elle génère une nouvelle colonne de tableau dynamique, qui contient la sortie filtrée.

Syntax

series_iir(Série,Numérateurs,Dénominateurs)

Découvrez les conventions de syntaxe.

Paramètres

Nom Type Obligatoire Description
Série dynamic ✔️ Tableau de valeurs numériques, généralement la sortie résultante d’opérateurs make-series ou make_list .
Numérateurs dynamic ✔️ Tableau de valeurs numériques, contenant les coefficients de numérateur du filtre.
Dénominateurs dynamic ✔️ Tableau de valeurs numériques, contenant les coefficients de dénominateur du filtre.

Important

Le premier élément de a (autrement dit, a[0]) ne doit pas être égal à zéro pour éviter la division par 0. Consultez la formule suivante.

Formule récursive du filtre

  • Considérez un tableau d’entrée X et les tableaux de coefficients a et b de longueurs n_a et n_b respectivement. La fonction de transfert du filtre qui générera le tableau de sortie Y est définie par :
Yi = a0-1(b0Xi + b1Xi-1 + ... + bnb-1 Xi-nb-1 - a1Yi-1-a2Yi-2 - ... -a na-1 Yi-na-1)

Exemple

Calculez une somme cumulée. Utilisez le filtre iir avec les coefficients dénominateurs=[1,-1] et les numérateurs=[1] :

let x = range(1.0, 10, 1);
print x=x, y = series_iir(x, dynamic([1]), dynamic([1,-1]))
| mv-expand x, y

Sortie

x y
1.0 1.0
2.0 3.0
3,0 6.0
4.0 10.0

Voici comment l’encapsuler dans une fonction :

let vector_sum=(x: dynamic) {
    let y=array_length(x) - 1;
    todouble(series_iir(x, dynamic([1]), dynamic([1, -1]))[y])
};
print d=dynamic([0, 1, 2, 3, 4])
| extend dd=vector_sum(d)

Sortie

d jj
[0,1,2,3,4] 10