Partager via


series_iir()

S’applique à : ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

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

La fonction prend une expression contenant un tableau numérique dynamique comme entrée et applique un filtre de réponse d’impulsion infinie. En spécifiant les coefficients de filtre, vous pouvez utiliser la fonction pour :

  • calculer la somme cumulative de la série
  • appliquer des opérations de lissage
  • appliquer différents filtres à passes élevées, passe-bande et filtres à faible passe

La fonction prend comme entrée la colonne contenant le tableau dynamique et deux tableaux dynamiques statiques des dénominateurs et des coefficients 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.

Syntaxe

series_iir(numérateurs de , série, dénominateurs)

En savoir plus sur les conventions de syntaxe.

Paramètres

Nom Type Requise 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 des coefficients tableaux a et b de longueurs n_a et n_b respectivement. La fonction de transfert du filtre qui génère le tableau de sortie Y est définie par :
Yi = a0-1(b0Xi + b1Xi-1 + ... + b nb-1 Xi-nb-1 - a1Yi-1-a 2Yi-2 - ... - ana-1 Yi-na-1)

Exemple

Calculez une somme cumulative. Utilisez le filtre iir avec des coefficients dénominateurs=[1,-1] et des 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

j dd
[0,1,2,3,4] 10