Supponendo che si eseguano operazioni vettoriali M elementi alla volta, puoi srotolare l'equazione della differenza di un fattore di Mabbastanza facilmente per il semplice filtro unipolare. Supponiamo di aver già calcolato tutti gli output fino ay[ n ]. Quindi, è possibile calcolare quelli successivi come segue:
y[ n + 1 ]y[ n + 2 ]= ( 1 - a ) y[ n ] + a x [ n + 1 ]= ( 1 - a ) y[ n + 1 ] + a x [ n + 2 ]= ( 1 - a ) ( ( 1 - a ) y[ n ] + a x [ n + 1 ] ) + a x [ n + 2 ]= ( 1 - a)2y[ n ] + a ( 1 - a ) x [ n + 1 ] + a x [ n + 2 ]⋮
In generale, puoi scrivere y[n+ k ] come:
y[ n + k ] = ( 1 - a)Ky[ n ] +Σio = 1Kun ( 1 - a)k - ix [ n + i ]
Per ogni indice di esempio n + k, questo sembra un filtro FIR con k + 1 tocchi: un tocco moltiplica l'ultimo output del filtro y[ n ], e l'altro K i tocchi moltiplicano gli ingressi del filtro x [ n + 1 ] , … , x [ n + k ]. La cosa bella è che i coefficienti utilizzati per tutti questi tocchi possono essere precalcolati, permettendoti di srotolare il filtro ricorsivo inM M+ 1-tap filtri paralleli non ricorsivi (questi filtri calcolano i campioni di output y[ n + 1 ] , ... , y[ n + M]), aggiornando il termine di feedback ogni Mcampioni di output. Quindi, data una condizione inizialey[ n ] (che si presume sia l'ultimo output calcolato sulla precedente iterazione vettoriale), è possibile calcolare il successivo M uscite in parallelo.
Ci sono alcuni avvertimenti su questo approccio:
Se Mdiventa grande, quindi si moltiplica un gruppo di numeri per ottenere i coefficienti FIR effettivi per i filtri non srotolati. A seconda del formato del numero e del valore diun', questo potrebbe avere implicazioni di precisione numerica.
Inoltre, non ottieni M-upold speedup con questo approccio: finisci per calcolare y[ n + k ] con ciò che equivale a K-tap filtro FIR. Anche se stai calcolandoM uscite in parallelo, il fatto che devi fare Kle operazioni di moltiplicazione (MAC) anziché la semplice implementazione ricorsiva del primo ordine diminuiscono alcuni dei vantaggi della vettorializzazione. L'approccio non vettoriale utilizza 2 MAC per output, quindi è necessario2 M operazioni da calcolare Muscite. Lo schema vettorializzato calcola il fileM output in una sola volta, richiedendo M+ 1MAC nel processo. Pertanto, la riduzione delle operazioni può essere espressa in funzione diM come:
R =M+ 12 M=12( 1 +1M)
Quindi, anche con Mmolto grande, puoi ottenere una riduzione massima del 50% nella quantità di calcoli usando questo metodo. Per i valori comuni diM= 4 e M= 8, la riduzione è rispettivamente del 37,5% e del 43,75%. Tuttavia, oltre alla pura riduzione del numero di operazioni, è possibile ottenere ulteriori vantaggi in termini di prestazioni a causa del diverso modello di accesso alla memoria impiegato dall'approccio non srotolato; per un'implementazione più semplice, è possibile che si verifichino ritardi dovuti alla dipendenza di ciascun campione di outputy[ n ] sul campione precedente y[ n - 1 ]. Questo effetto è ovviamente molto dipendente dalla piattaforma.