series_iir()

Použije filtr Infinite Impuls Response na řadu.

Funkce přebírá jako vstup výraz obsahující dynamické číselné pole a použije filtr Infinite Impuls Response . Zadáním koeficientů filtru můžete pomocí funkce:

Funkce přebírá jako vstup sloupec obsahující dynamickou matici a dvě statická dynamická pole jmenovatelů a koeficientů čitatelů filtru a použije filtr na sloupec. Výstupem je nový sloupec dynamického pole obsahující filtrovaný výstup.

Syntax

series_iir(Série,čitatele,Jmenovatele)

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Typ Vyžadováno Popis
Série dynamic ✔️ Matice číselných hodnot, obvykle výsledný výstup vytyčiných řad nebo make_list operátorů.
čitatele dynamic ✔️ Pole číselných hodnot obsahující koeficienty čitatele filtru.
Jmenovatele dynamic ✔️ Pole číselných hodnot obsahující koeficienty jmenovatele filtru.

Důležité

První prvek souboru a (tj a[0]. ) nesmí být nulový, aby nedošlo k dělení hodnotou 0. Podívejte se na následující vzorec.

Rekurzivní vzorec filtru

  • Zvažte vstupní pole X a koeficienty matice a b délky n_a a n_b. Funkce přenosu filtru, který vygeneruje výstupní pole Y, je definována takto:
Yi =a0-1(b0Xi + b1Xi-1 + ... + bnb-1 Xi-nb-1 -a 1Yi-1-a2Yi-2 - ... -a na-1 Yi-na-1)

Příklad

Vypočítá kumulativní součet. Použijte filtr iir s jmenovateli koeficientů=[1,-1] a numerátory=[1]:

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

Výstup

x y
1.0 1.0
2.0 3,0
3,0 6.0
4,0 10.0

Tady je postup, jak ho zabalit do funkce:

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)

Výstup

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