series_iir()
对序列应用无限脉冲响应滤波器。
此函数接受一个包含动态数值数组的表达式作为输入,并应用一个无限脉冲响应滤波器。 通过指定滤波系数,可以使用该函数来执行以下操作:
- 计算序列的累计和
- 应用平滑操作
- 应用各种高通、带通和低通滤波器
此函数的输入列包含由筛选器的 denominators 系数和 numerators 系数组成的动态数组和两个静/动态数组,并且此函数会对该列应用筛选器。 它会输出新的动态数组列,其中包括滤波后的输出。
语法
series_iir(
series,
numerators ,
denominators)
详细了解语法约定。
参数
客户 | 类型 | 必需 | 说明 |
---|---|---|---|
series | dynamic |
✔️ | 数值的数组,通常是 make-series 或 make_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 |