En supposant que vous effectuez des opérations vectorielles M éléments à la fois, vous pouvez dérouler l'équation de la différence par un facteur de Massez facilement pour le simple filtre unipolaire. Supposons que vous avez déjà calculé toutes les sorties jusqu'ày[ n ]. Ensuite, vous pouvez calculer les suivants comme suit:
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 ]⋮
En général, vous pouvez écrire y[ n + k ] comme:
y[ n + k ] = ( 1 - a)ky[ n ] +∑i = 1kune ( 1 - a)k - ix [ n + i ]
Pour chaque indice d'échantillon n + k, cela ressemble à un filtre FIR avec k + 1 taps: un tap multiplie la dernière sortie du filtre y[ n ], et l'autre k les robinets multiplient les entrées du filtre x [ n + 1 ] , … , x [ n + k ]. La bonne chose est que les coefficients utilisés pour tous ces taps peuvent être précalculés, vous permettant de dérouler le filtre récursif enM M+ 1-appuyez sur des filtres non récursifs parallèles (ces filtres calculent les échantillons de sortie y[ n + 1 ] , … , y[ n + M]), en mettant à jour le terme de rétroaction tous les Méchantillons de sortie. Donc, étant donné une condition initialey[ n ] (qui est supposé être la dernière sortie calculée sur la précédente itération vectorisée), vous pouvez calculer la prochaine M sorties en parallèle.
Il y a quelques mises en garde à cette approche:
Si Mdevient grand, vous finissez par multiplier un ensemble de nombres afin d'obtenir les coefficients FIR effectifs pour les filtres déroulés. Selon le format de votre numéro et la valeur deune, cela pourrait avoir des implications de précision numérique.
De plus, vous ne recevez pas de Mmultipliez par deux cette approche: vous finissez par calculer y[ n + k ] avec ce qui équivaut à un k-filtre le filtre FIR. Bien que vous calculiezM sorties en parallèle, le fait que vous devez faire kles opérations de multiplication-accumulation (MAC) au lieu de la simple mise en œuvre récursive de premier ordre diminuent certains des avantages de la vectorisation. L'approche non vectorisée utilise 2 MAC par sortie, vous avez donc besoin2M opérations pour calculer Mles sorties. Le schéma vectorisé calcule laM sorties à la fois, nécessitant M+1MAC en cours. Ainsi, la réduction des opérations peut être exprimée en fonction deM comme:
R=M+12M=12(1+1M)
Donc, même avec Mtrès grand, vous pouvez obtenir une réduction maximale de 50% du nombre de calculs en utilisant cette méthode. Pour les valeurs communes deM=4 et M=8, la réduction est respectivement de 37,5% et 43,75%. Cependant, en plus de la réduction pure du nombre d'opérations, vous pouvez bénéficier d'avantages de performances supplémentaires en raison du modèle d'accès à la mémoire différent utilisé par l'approche non déroulée; pour une implémentation plus simple, vous pouvez rencontrer des retards en raison de la dépendance de chaque échantillon de sortiey[n] sur l'échantillon précédent y[n−1]. Cet effet est évidemment très dépendant de la plateforme.