series_fir()

对序列应用有限脉冲响应 (FIR) 滤波器。

此函数接受一个包含动态数值数组的表达式作为输入,并应用一个有限脉冲响应滤波器。 通过指定 filter 系数,该函数可用于计算移动平均值、进行修匀处理和检测更改等。 该函数的输入列包含由滤波器系数组成的动态数组和静/动态数组,并且该函数会对此列应用滤波器。 它会输出新的动态数组列,其中包括滤波后的输出。

语法

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

详细了解语法约定

参数

客户 类型​​ 必需 说明
series dynamic 一组数值。
filter dynamic 包含筛选器系数的数值数组。
规范化 bool 指示筛选器是否应规范化。 即,将其除以系数之和。 如果滤波器包含负值,则必须将 normalize 指定为 false,否则结果将是 null。 如果未指定,则假定 true 采用默认值,具体取决于 filter 中是否存在负值。 如果 filter 包含至少一个负值,则假定 normalize 为 false
center bool 指示是对某个时段(当前时间点之前和之后)对称地应用筛选器,还是对当前时间点之前的时段应用筛选器。 默认情况下,center 为 false,这适合于流式传输数据的情况,因此,我们只能对当前的点和较旧的点应用筛选器。 但是,对于即席处理,可以将其设置为 true,使其与时序保持同步。 请参阅以下示例。 此参数用于控制滤波器的群延迟

提示

归一化是确保系数之和为 1 的一种简便方法。 当 normalized 为 true 时,筛选器不会放大或减弱序列。 例如,可以通过 filter=[1,1,1,1] 和 normalized=true 指定四箱的移动平均值,这比键入 [0.25,0.25.0.25,0.25] 更简单。

返回

一个新的动态数组列,其中包括筛选后的输出。

示例

  • 通过设置 filter=[1,1,1,1,1] 和 normalize=true(默认值)计算五个点的移动平均值。 请注意 center=false(默认值)与 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

此查询将返回:
5h_MovingAvg:5 点移动平均值滤波器。 峰值经过了修匀处理,并且偏移了 (5-1)/2 = 2 小时。
5h_MovingAvg_centered:相同,但通过设置 center=true,峰值会停留在其原始位置。

Series fir.

  • 若要计算某个点与其前面的点之间的差异,请设置 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

Series fir 2.