• AudioFanzine : Home Studio, Computer Based Music, Guitars, Basses, Live Sound & DJ
  • Software Reverbs

Catégorie parente : 'Plug-ins d'Effets'   Dossiers Réverbs logicielles

Par Wolfen le 18/11/2005
Viva la Convolution !
Théorie mathématique
Pour commencer ce dossier, nous allons nous pencher un petit peu sur la théorie mathématique qui se cache derrière ce terme barbare de convolution... Et si ça ne vous intéresse pas, ou que vous êtes allergiques aux maths, je vous conseille de passer directement au chapitre suivant qui sera beaucoup plus concret !

 

L'opération de convolution directe


La convolution est une opération qui consiste à faire une sorte de multiplication de deux signaux x(t) et h(t) au moyen d'une intégrale dans le domaine analogique :

Cette opération s'écrit de façon plus explicite et plus facile à calculer dans le domaine numérique, qui est celui qui nous intéresse, où un signal n'est plus défini à n'importe quel instant t mais sur une division de la seconde en échantillons k, dont le nombre est égal à la fréquence d'échantillonnage (par exemple, en 44.1 KHz, il y a 44 100 échantillons par seconde, et donc 44 100 valeurs d'amplitude) :


Le signal x(t) représente le signal d'entrée ou signal à traiter, y(t) le signal de sortie traité, et h(t) est la réponse impulsionnelle du système. On l'obtient en envoyant comme signal d'entrée x(t) une impulsion de Dirac, c'est à dire un signal d'amplitude infinie et de durée nulle. Une propriété importante de ce signal est que sa réponse fréquentielle, obtenue avec une Transformation de Fourier, est composée de toutes les fréquences à une amplitude identique...

Il va de soit qu'un tel signal n'existe pas dans la réalité, on peut juste s'en rapprocher en utilisant un son très bref et très violent comme un coup de feu, ou un signal numérique avec une valeur non nulle sur le premier échantillon et zéro partout ailleurs...

Toutefois, l'application directe de cette formule nécessite un grand nombre de calculs puisque pour chaque échantillon, il faut calculer autant de produits que d'échantillons dans le plus court des deux signaux... Donc si on convolue un signal de 20 secondes et un autre de 5 secondes, le tout en 44.1 KHz, on doit calculer au maximum 5 x 44 100 soit 220 050 produits, avant de les sommer... Ce qui équivaut à 5 x 44 100 x 44 100 soit 9 724 050 000 produits par seconde en plus des sommes ! Et encore, on ne considère qu'un seul canal... Heureusement, le produit de convolution possède une propriété intéressante qui va beaucoup accélérer les calculs !

 

Utilisation de la FFT (Fast Fourier Transform)

En effet, le produit de convolution peut se traduire par une simple multiplication entre les Transformées de Fourier dites Discrètes (dans le domaine numérique) de nos signaux, pour le calcul d'un échantillon donné...


 

Et la Transformée de Fourier Discrète, ou plutôt sa déclinaison Transformée de Fourier Rapide FFT (Fast Fourier Transform), qui est une opération pas mal utilisée en numérique, est beaucoup moins gourmande en temps de calcul que le calcul brutal des coefficients de la convolution... On remplace donc le calcul direct de la convolution par celui d'une FFT, d'un produit, et d'une FFT inverse.

Pour rappel, la Transformée de Fourier est une opération qui convertit un signal représenté de façon classique (amplitude par rapport au temps) en un signal représenté en amplitude par rapport à la fréquence. Elle est basée sur le théorème de Fourier indiquant que tout signal périodique peut être modélisé par une somme de sinusoïdes de fréquences différentes, et permet de calculer les fameuses représentations spectrales de n'importe quel signal.

 

Performances et latence avec la FFT

La FFT est quand même une opération complexe à effectuer d'un point de vue algorithmique, et peut être menée de différentes façons, chacune apportant ses propres optimisations sur la précision ou sur le temps de calcul. Ces détails ne seront bien sûr pas détaillés ici, et si vous êtes intéressés par le sujet, je vous invite à jeter un œil à la page des liens à la fin du dossier...

Il y a une chose à retenir sur la formulation des FFT, qu'on ne trouve pas avec celle du produit de convolution basique, c'est que le calcul du signal de sortie à un instant donné nécessite la connaissance du signal d'entrée à cet instant et à des instants supérieurs, du fait du passage d'une représentation amplitude/temps à une représentation amplitude/fréquence...

Par conséquent, en plus de la charge CPU provoquée par l'exécution des calculs, qui se voit énormément réduite par l'usage de la FFT, une latence ajoutée à la sortie devient inévitable, ce qui nécessite des optimisations supplémentaires (quitte à sacrifier de la précision et à augmenter la charge CPU) pour faire fonctionner les algorithmes en quasi temps réel, avec une latence acceptable ajoutée à celle de la carte son... Cette latence est déterminée explicitement par le développeur de l'algorithme, qui divise l'opération de FFT sur tout le signal en opérations sur des blocs d'échantillons de nombre te donc de durée constants, égale à la latence ajoutée par l'algorithme...

Néanmoins, certains développeurs ventent sur leurs réverbérations à convolution des modes de fonctionnement dits "zéro latence"... Impossible à moins de faire des mesures de savoir si la latence obtenue est vraiment nulle ou si c'est un raccourci pour désigner une latence très basse. Pourtant, il semble qu'il est possible de concevoir des FFT sans latence ajoutée, en tenant compte du fait que la latence de la carte son avec les meilleurs drivers ASIO qui soient n'est jamais nulle, ce qui laisse un peu de marge pour réaliser les calculs sans ajouter de latence, en prenant des dispositions particulières...