Delen via


series_fir()

Past een FIR-filter (Finite Impulse Response) toe op een reeks.

De functie gebruikt een expressie met een dynamische numerieke matrix als invoer en past een eindige impulsreactiefilter toe. Door de filter coëfficiënten op te geven, kan het worden gebruikt voor het berekenen van een voortschrijdend gemiddelde, het afvlakken, het detecteren van wijzigingen en nog veel meer gebruiksvoorbeelden. De functie neemt de kolom met de dynamische matrix en een statische dynamische matrix van de filtercoëfficiënten als invoer en past het filter toe op de kolom. Er wordt een nieuwe dynamische matrixkolom uitgevoerd, die de gefilterde uitvoer bevat.

Syntax

series_fir(Serie,filter [,normaliseren[,centreren]])

Meer informatie over syntaxisconventies.

Parameters

Naam Type Vereist Beschrijving
Serie dynamic ✔️ Een matrix van numerieke waarden.
Filter dynamic ✔️ Een matrix van numerieke waarden met de coëfficiënten van het filter.
Normalize bool Geeft aan of het filter moet worden genormaliseerd. Dat wil gezegd, gedeeld door de som van de coëfficiënten. Als het filter negatieve waarden bevat, moet normaliseren worden opgegeven als false, anders wordt nullhet resultaat . Als dit niet is opgegeven, wordt uitgegaan van een standaardwaarde van true , afhankelijk van de aanwezigheid van negatieve waarden in het filter. Als het filter ten minste één negatieve waarde bevat, wordt van normaliseren uitgegaan falsevan .
Center bool Hiermee wordt aangegeven of het filter symmetrisch wordt toegepast op een tijdvenster vóór en na het huidige punt, of op een tijdvenster vanaf het huidige punt naar achteren. Standaard is falsehet midden , wat past bij het scenario van streaminggegevens, zodat we het filter alleen kunnen toepassen op de huidige en oudere punten. Voor ad-hocverwerking kunt u deze echter instellen op true, zodat deze gesynchroniseerd blijft met de tijdreeks. Zie de onderstaande voorbeelden. Deze parameter bepaalt de groepsvertraging van het filter.

Tip

Normalisatie is een handige manier om ervoor te zorgen dat de som van de coëfficiënten 1 is. Wanneer genormaliseerd is, wordt truede reeks niet versterkt of verzwak door het filter. Het zwevende gemiddelde van vier klassen kan bijvoorbeeld worden opgegeven door filter=[1,1,1,1 ], wat=true eenvoudiger is dan het typen van [0,25,0.25.0.25,0,25].

Retouren

Een nieuwe dynamische matrixkolom met de gefilterde uitvoer.

Voorbeelden

  • Bereken een zwevend gemiddelde van vijf punten door filter=[1,1,1,1,1] in te stellen en te normaliseren=true (standaard). Let op het effect van centreren=false (standaard) versus 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

Deze query retourneert:
5h_MovingAvg: filter voor zwevend gemiddelde van vijf punten. De piek wordt afgevlakt en de piek verschoven met (5-1)/2 = 2u.
5h_MovingAvg_centered: Hetzelfde, maar door in te stellen center=true, blijft de piek op de oorspronkelijke locatie.

Seriesnuit.

  • Als u het verschil tussen een punt en het voorafgaande wilt berekenen, stelt u filter=[1,-1] in.
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

Serie fir 2.