series_iir()

系列に無限インパルス応答フィルターを適用します。

この関数は、入力としての動的な数値配列を含む式を受け取り、無限インパルス応答フィルターを適用します。 フィルター係数を指定することで、 関数を使用して次のことができます。

関数は、フィルターの 分母 係数と 分子 係数の動的配列と 2 つの静的動的配列を含む列を入力として受け取り、列にフィルターを適用します。 フィルター処理された出力を含む、動的配列の新しい列が出力されます。

構文

series_iir(シリーズ,numerators,分母)

構文規則について詳しく知る。

パラメーター

名前 必須 説明
シリーズ dynamic ✔️ 数値の配列。通常は、 make-series 演算子または make_list 演算子の結果の出力です。
numerators dynamic ✔️ フィルターの分子係数を含む数値の配列。
分母 dynamic ✔️ フィルターの分母係数を含む数値の配列。

重要

0 による除算を避けるため、a の最初の要素 (つまり、a[0]) は 0 にしないでください。 次の 数式を参照してください。

フィルターの再帰式

  • 入力配列 X、および長さがそれぞれ n_a と n_b である係数配列 a と b を考えます。 出力配列 Y を生成するフィルターの転送関数は、次のように定義されます。
Yi = a0-1(b0Xi + b1Xi-1 + ... + bnb-1Xi-nb-1 - a1Yi-1-a2Yi-2 - ... - ana-1Yi-na-1)

累積合計を計算します。 係数 分母=[1,-1] および分子=[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