series_fir()

Wendet einen FiR-Filter (Finite Impulse Response) auf eine Reihe an.

Die Funktion verwendet einen Ausdruck, der ein dynamisches numerisches Array als Eingabe enthält, und wendet einen Finite Impulse Response-Filter an . Durch Die Angabe der filter Koeffizienten kann es für die Berechnung eines gleitenden Durchschnitts, glätten, Änderungserkennung und viele weitere Anwendungsfälle verwendet werden. Die Funktion verwendet die Spalte, die das dynamische Array und ein statisches dynamisches Array der Filterkoeffizienten enthält, als Eingabe und wendet den Filter auf die Spalte an. Sie gibt eine neue dynamische Array-Spalte mit der gefilterten Ausgabe aus.

Syntax

series_fir(Serie,filter [,normalize[,center]])

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Typ Erforderlich BESCHREIBUNG
Serie dynamic ✔️ Ein Array numerischer Werte.
filter dynamic ✔️ Ein Array numerischer Werte, die die Koeffizienten des Filters enthalten.
normalize bool Gibt an, ob der Filter normalisiert werden soll. Das heißt, dividiert durch die Summe der Koeffizienten. Wenn filter negative Werte enthält, muss normalize als falseangegeben werden, andernfalls ist nullresult . Wenn nicht angegeben, wird abhängig vom Vorhandensein negativer Werte im Filter ein Standardwert von true angenommen. Wenn filter mindestens einen negativen Wert enthält, wird normalize als angenommen false.
Zentrum bool Gibt an, ob der Filter symmetrisch auf ein Zeitfenster vor und nach dem aktuellen Punkt oder auf ein Zeitfenster ab dem aktuellen Punkt rückwärts angewendet wird. Standardmäßig ist falsecenter , was dem Szenario des Streamings von Daten entspricht, sodass wir den Filter nur auf die aktuellen und älteren Punkte anwenden können. Für die Ad-hoc-Verarbeitung können Sie sie jedoch auf truefestlegen, wobei sie mit der Zeitreihe synchronisiert bleibt. Siehe folgende Beispiele. Dieser Parameter steuert die Gruppenverzögerung des Filters.

Tipp

Die Normalisierung ist eine bequeme Möglichkeit, um sicherzustellen, dass die Summe der Koeffizienten 1 ist. Wenn normalisiert ist true, wird die Reihe vom Filter nicht verstärkt oder abgeschwächt. Beispielsweise könnte der gleitende Durchschnitt von vier Behältern durch filter=[1,1,1,1] angegeben und normalisiert=true werden, was einfacher ist als die Eingabe von [0.25,0.25.0.25,0.25, 0.25].

Gibt zurück

Eine neue dynamische Arrayspalte, die die gefilterte Ausgabe enthält.

Beispiele

  • Berechnen Sie einen gleitenden Durchschnitt von fünf Punkten, indem Sie filter=[1,1,1,1,1] und normalisieren=true (Standard) festlegen. Beachten Sie die Auswirkungen von Zentriert=false (Standard) im Vergleich true:
range t from bin(now(), 1h) - 23h to bin(now(), 1h) step 1h
| summarize t=make_list(t)
| project
    id='TS',
    val=dynamic([0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 40, 100, 40, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0]),
    t
| extend
    5h_MovingAvg=series_fir(val, dynamic([1, 1, 1, 1, 1])),
    5h_MovingAvg_centered=series_fir(val, dynamic([1, 1, 1, 1, 1]), true, true)
| render timechart

Diese Abfrage gibt Folgendes zurück:
5h_MovingAvg: Filter für den gleitenden Durchschnitt von fünf Punkten. Die Spitze wird geglättet und um (5-1)/2 = 2 Stunden verschoben.
5h_MovingAvg_centered: Identisch, aber durch festlegen center=truebleibt der Peak an seinem ursprünglichen Standort.

Reihentanne.

  • Legen Sie filter=[1,-1] fest, um die Differenz zwischen einem Punkt und seinem vorangehenden Punkt zu berechnen.
range t from bin(now(), 1h) - 11h to bin(now(), 1h) step 1h
| summarize t=make_list(t)
| project id='TS', t, value=dynamic([0, 0, 0, 0, 2, 2, 2, 2, 3, 3, 3, 3])
| extend diff=series_fir(value, dynamic([1, -1]), false, false)
| render timechart

Reihentanne 2.