Supondo que você execute operações vetoriais elementos de cada vez, é possível desenrolar a equação da diferença por um fator bastante facilidade para o filtro simples de um pólo. Suponha que você já calculou todas as saídas até . Em seguida, você pode calcular os seguintes:
M y [ n ] y [ n + 1 ]MMy[n]
y[n+1]y[n+2]=(1−a)y[n]+ax[n+1]=(1−a)y[n+1]+ax[n+2]=(1−a)((1−a)y[n]+ax[n+1])+ax[n+2]=(1−a)2y[n]+a(1−a)x[n+1]+ax[n+2]⋮
Em geral, você pode escrever como:y[n+k]
y[n+k]=(1−a)ky[n]+∑i=1ka(1−a)k−ix[n+i]
Para cada índice de amostra , isso se parece com um filtro FIR com toques: um toque multiplica a última saída de filtro e os outros toques multiplicam as entradas de filtro . O bom é que os coeficientes utilizados para todas estas torneiras pode ser pré-calculada, o que lhe permite desenrolar o filtro recursivo em -Toque paralelo filtros não recursivos (estes filtros calcular as amostras de saída ), atualizando o termo de feedback a cada amostras de saída. Então, dada uma condição inicialn+kk+1y[n]kx[n+1],…,x[n+k]M M+1y[n+1],…,y[n+M]My[n](que é considerado a última saída calculada na iteração vetorial anterior), é possível calcular as próximas saídas em paralelo.M
Existem algumas ressalvas nessa abordagem:
Se se tornar grande, você acaba multiplicando vários números para obter os coeficientes FIR efetivos para os filtros desenrolados. Dependendo do seu formato numérico e do valor de , isso pode ter implicações numéricas de precisão.Ma
Além disso, você não obtém uma aceleração fold com essa abordagem: acaba calculando com o que equivale a um filtro FIR tap. Embora você esteja calculando saídas em paralelo, o fato de você ter que executar operações multiply-acumulate (MAC) em vez da implementação recursiva simples de primeira ordem diminui alguns dos benefícios da vetorização. A abordagem não vetorizada usa 2 MACs por saída, portanto, você precisa de operações de para calcular saídas. O esquema vetorizado calcula as saídas uma só vez, exigindo MACs no processo. Portanto, a redução nas operações pode ser expressa em função daMy[n+k]kMk2MMMM+1M
R=M+12M=12(1+1M)
MM=4M=8y[n]y[n−1]. Esse efeito é obviamente muito dependente da plataforma.