series_iir()

对序列应用无限脉冲响应滤波器。

此函数接受一个包含动态数值数组的表达式作为输入,并应用一个无限脉冲响应滤波器。 通过指定滤波系数,可以使用该函数来执行以下操作:

  • 计算序列的累计和
  • 应用平滑操作
  • 应用各种高通带通低通滤波器

此函数的输入列包含由筛选器的 denominators 系数和 numerators 系数组成的动态数组和两个静/动态数组,并且此函数会对该列应用筛选器。 它会输出新的动态数组列,其中包括滤波后的输出。

语法

series_iir(series,numerators,denominators)

详细了解语法约定

参数

客户 类型​​ 必需 说明
series dynamic 数值的数组,通常是 make-seriesmake_list 运算符生成的输出。
numerators dynamic 数值的数组,其中包含筛选器的分子系数。
denominators dynamic 数值的数组,其中包含筛选器的分母系数。

重要

a 的第一个元素(即 a[0])不得为零,以避免除以 0 的现象发生。 参阅下面的公式

滤波器的递归公式

  • 假设输入数组为 X,系数数组 a 和 b 的长度分别为 n_a 和 n_b。 滤波器的传递函数(会生成输出数组 Y)的定义如下:
Yi = a0-1(b0Xi + b1Xi-1 + ... + bnb-1Xi-nb-1 - a1Yi-1-a2Yi-2 - ... - ana-1Yi-na-1)

示例

计算累计和。 使用系数 denominators=[1,-1] 且 numerators=[1] 的 iir 筛选器:

let x = range(1.0, 10, 1);
print x=x, y = series_iir(x, dynamic([1]), dynamic([1,-1]))
| mv-expand x, y

输出

x y
1.0 1.0
2.0 3.0
3.0 6.0
4.0 10.0

将其包装在函数中的方法如下:

let vector_sum=(x: dynamic) {
    let y=array_length(x) - 1;
    todouble(series_iir(x, dynamic([1]), dynamic([1, -1]))[y])
};
print d=dynamic([0, 1, 2, 3, 4])
| extend dd=vector_sum(d)

输出

d dd
[0,1,2,3,4] 10