series_fir()

Aplica um filtro FIR (Resposta de Impulso Finito) em uma série.

A função usa uma expressão que contém uma matriz numérica dinâmica como entrada e aplica um filtro Finite Impulse Response . Ao especificar os filter coeficientes, ele pode ser usado para calcular uma média móvel, suavização, detecção de alterações e muitos outros casos de uso. A função usa a coluna que contém a matriz dinâmica e uma matriz dinâmica estática dos coeficientes do filtro como entrada e aplica o filtro na coluna. Ela resulta em uma nova coluna de matriz dinâmica que contém a saída filtrada.

Syntax

series_fir(Série,filter [,normalize[,center]])

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Obrigatório Descrição
Série dynamic ✔️ Uma matriz de valores numéricos.
filter dynamic ✔️ Uma matriz de valores numéricos que contém os coeficientes do filtro.
normalize bool Indica se o filtro deve ser normalizado. Ou seja, dividido pela soma dos coeficientes. Se o filtro contiver valores negativos, normalizar deverá ser especificado como false, caso contrário, o resultado será null. Se não for especificado, um valor padrão de true será assumido, dependendo da presença de valores negativos no filtro. Se o filtro contiver pelo menos um valor negativo, é considerado que normalizar será false.
centro bool Indica se o filtro é aplicado simétricamente em uma janela de tempo antes e depois do ponto atual ou em uma janela de tempo do ponto atual para trás. Por padrão, o centro é false, que se ajusta ao cenário de dados de streaming para que possamos aplicar apenas o filtro nos pontos atuais e mais antigos. No entanto, para o processamento ad hoc, você pode defini-lo como true, mantendo-o sincronizado com a série temporal. Veja exemplos abaixo. Esse parâmetro controla o atraso do grupo do filtro.

Dica

A normalização é uma maneira conveniente de garantir que a soma dos coeficientes seja 1. Quando normalizado é true, o filtro não amplifica ou atenua a série. Por exemplo, a média móvel de quatro compartimentos pode ser especificada por filter=[1,1,1,1] e normalizada=true, o que é mais simples do que digitar [0,25,0,25,0,25,0,25].

Retornos

Uma nova coluna de matriz dinâmica que contém a saída filtrada.

Exemplos

  • Calcule uma média móvel de cinco pontos definindo filter=[1,1,1,1,1] e normalize=true (padrão). Observe o efeito do centro=false (padrão) 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

A consulta retorna:
5h_MovingAvg: filtro médio móvel de cinco pontos. O pico é suavizado e seu pico é deslocado em (5-1)/2 = 2h.
5h_MovingAvg_centered: o mesmo, mas definindo center=true, o pico permanece em seu local original.

Série de abetos.

  • Para calcular a diferença entre um ponto e o anterior, defina 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

Série de abetos 2.