Share via


series_fir()

Aplica un filtro Finite Impulse Response (FIR) en una serie.

La función toma una expresión que contiene una matriz numérica dinámica como entrada y aplica un filtro Finite Impulse Response . Al especificar los filter coeficientes, se puede usar para calcular una media móvil, suavizar, detectar cambios y muchos más casos de uso. La función toma la columna que contiene la matriz dinámica y una matriz dinámica estática de los coeficientes del filtro como entrada y aplica el filtro en la columna. De este modo, genera una columna de matriz dinámica que contiene el resultado filtrado.

Syntax

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

Obtenga más información sobre las convenciones de sintaxis.

Parámetros

Nombre Tipo Requerido Descripción
Serie dynamic ✔️ Matriz de valores numéricos.
filter dynamic ✔️ Matriz de valores numéricos que contiene los coeficientes del filtro.
normalize bool Indica si se debe normalizar el filtro. Es decir, dividido por la suma de los coeficientes. Si el filtro contiene valores negativos, se debe especificar normalizar como false, de lo contrario, el resultado será null. Si no se especifica, se supone un valor predeterminado de true , en función de la presencia de valores negativos en el filtro. Si el filtro contiene al menos un valor negativo, se supone que normalizar es false.
centro bool Indica si el filtro se aplica simétricamente en un período de tiempo antes y después del punto actual, o en un período de tiempo desde el punto actual hacia atrás. De forma predeterminada, center es false, que se ajusta al escenario de datos de streaming para que solo podamos aplicar el filtro en los puntos actuales y anteriores. Sin embargo, para el procesamiento ad hoc, puede establecerlo trueen , manteniendo sincronizado con la serie temporal. Vea los ejemplos siguientes. Este parámetro controla el retraso del grupo del filtro.

Sugerencia

La normalización es una manera cómoda de asegurarse de que la suma de los coeficientes es 1. Cuando se normaliza es true, el filtro no amplifica ni atenua la serie. Por ejemplo, el promedio móvil de cuatro cubos podría especificarse mediante filter=[1,1,1,1] y normalizado=true, que es más sencillo que escribir [0,25,0.25.0.25,0.25.0.25].

Devoluciones

Nueva columna de matriz dinámica que contiene la salida filtrada.

Ejemplos

  • Calcule una media móvil de cinco puntos estableciendo filter=[1,1,1,1,1] y normalizar=true (valor predeterminado). Tenga en cuenta el efecto del centro=false (valor predeterminado) frente a 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

Esta consulta devuelve lo siguiente:
5h_MovingAvg: filtro de media móvil de cinco puntos. Se suaviza la punta y su pico se desplaza en (5-1)/2 = 2 h.
5h_MovingAvg_centered: igual, pero estableciendo center=true, el pico permanece en su ubicación original.

Fir serie.

  • Para calcular la diferencia entre un punto y su anterior, establezca filter=[1,-1].
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.