# series_fir()series_fir()

## 语法Syntax

`series_fir(`x`,` filter [`,` normalize [`,` center ]]`)``series_fir(`x`,` filter [`,` normalize [`,` center ]]`)`

## 参数Arguments

• x：数值的动态数组单元。x : Dynamic array cell of numeric values. 通常是 make-seriesmake_list 运算符生成的输出。Typically the resulting output of make-series or make_list operators.
• filter：一个常量表达式，其中包含滤波器的系数（存储为由数值组成的动态数组）。filter : A constant expression containing the coefficients of the filter (stored as a dynamic array of numeric values).
• normalize：一个可选布尔值，指示是否应将滤波器归一化。normalize : Optional Boolean value indicating whether the filter should be normalized. 即，将其除以系数之和。That is, divided by the sum of the coefficients. 如果滤波器包含负值，则必须将 normalize 指定为 `false`，否则结果将是 `null`If filter contains negative values, then normalize must be specified as `false`, otherwise result will be `null`. 如果未指定，则假定 normalize 采用默认值，具体取决于 filter 中是否存在负值。If not specified, then a default value of normalize is assumed, depending on the presence of negative values in the filter . 如果 filter 包含至少一个负值，则假定 normalize 为 `false`If filter contains at least one negative value, then normalize is assumed to be `false`.
归一化是确保系数之和为 1 的一种简便方法。Normalization is a convenient way to make sure that the sum of the coefficients is 1. 这样做以后，滤波器不会对序列进行放大或衰减。Then the filter doesn't amplify or attenuate the series. 例如，可以通过 filter =[1,1,1,1] 和 normalized =true 指定四箱的移动平均值，这比键入 [0.25,0.25.0.25,0.25] 更加容易。For example, the moving average of four bins could be specified by filter =[1,1,1,1] and normalized =true, which is easier than typing [0.25,0.25.0.25,0.25].
• center：一个可选布尔值，指示是对某个时段（当前时间点之前和之后）对称地应用滤波器，还是对当前时间点之前的时段应用滤波器。center : An optional Boolean value that indicates whether the filter is applied symmetrically on a time window before and after the current point, or on a time window from the current point backwards. 默认情况下，center 为 false，这适合于流式传输数据的情况，在这种情况下，我们只能对当前的点和较旧的点应用滤波器。By default, center is false, which fits the scenario of streaming data, where we can only apply the filter on the current and older points. 但是，对于即席处理，可以将其设置为 `true`，使其与时序保持同步。However, for ad-hoc processing you can set it to `true`, keeping it synchronized with the time series. 请参阅以下示例。See examples below. 此参数用于控制滤波器的群延迟。This parameter controls the filter’s group delay.

## 示例Examples

• 通过设置 filter =[1,1,1,1,1] 和 normalize=`true`（默认值）计算五个点的移动平均值。Calculate a moving average of five points by setting filter =[1,1,1,1,1] and normalize=`true` (default). 请注意 center=`false`（默认值）与 `true` 的效果：Note the effect of center=`false` (default) vs. `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 点移动平均值滤波器。5h_MovingAvg : Five points moving average filter. 峰值经过了修匀处理，并且偏移了 (5-1)/2 = 2 小时。The spike is smoothed and its peak shifted by (5-1)/2 = 2h.
5h_MovingAvg_centered：相同，但通过设置 `center=true`，峰值会停留在其原始位置。5h_MovingAvg_centered : Same, but by setting `center=true`, the peak stays in its original location.

• 若要计算某个点与其前面的点之间的差异，请设置 filter =[1,-1]。To calculate the difference between a point and its preceding one, set 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
``````