suite des sessions pour les nuls : parlons
ImpulseD'abord, pourquoi s'intéresser aux Réponses Impulsionnelles (IR)?
pour la convolution pardi !
Si on a une réponse impulsionnelle et qu'on fait la convolution avec une autre IR ou un signal, on obtient le mix des deux.
Concrètement, si on a la réponse impulsolanelle de la Chapelle Sixtine et qu'on a l'enregistrement de son piano dans une salle neutre, faire la convolution donnera le même résultat que si on avait enregistré le piano dans la chapelle ! chouette, non ?
On peut faire la convolution sur son pc ou, si on a un "moteur de convolution" comme un DSP, on peut l'appliquer en direct sur un flux de données.
Cette possibilité est exploitée par toutes sortes d'appareils pour appliquer des traitements audio, reverb par exemple, bien mieux que les triturations habituelles des DSP. Nous l'exploitons avec l'impulse de filtres audio que le moteur de convolution dans l'ADAU1452 va appliquer au flux audio entrant dans le DSPiy.
La convolution demande une grosse capacité de traitement.
Les IR (réponses impulsionnelles) sont aussi bien pratiques pour faire quelques opérations comme le gating par exemple (fenêtrage temporel).
Au fait, une Impulse c'est quoi ?Comme son nom l'indique, c'est la réponse d'un système à une "Impulsion".
Impulsion aussi nommée Dirac du nom du mathématicien qui a planché sur ces questions.
Cette "Impulsion" est un signal instanné qui contient toutes les fréquences. C'est théorique bien sûr.
Ce qui s'en rapproche le plus c'est le Bang! d'un coup de fusil ou d'un ballon qui explose.
Évidement on ne tire pas sur son appareil ou son HP pour le mesurer ! les logiciels comme REW savent calculer la réponse impulsionnelle a partir d'une mesure en réponse à des sinus en sweep ou en steps.
IR = domaine temporel.
Une IR c'est la réponse du système dans le temps.
En entrée on imagine le Big Bang! qui correspond a un pic vertical instantané de hauteur 100%.
Le système mesuré répond plus ou moins vite et plus ou moins fort.
- Un système idéal ultra rapide et linéaire sur toutes fréquences répondrait par un pic instantané de 100%.
- Un système réel répond lentement et déforme. Ca donne les courbes qu'on voit : une courbe dont l'axe des abscisse est le temps.
L'échelle est souvent en milisecondes.
Une IR caractérise entièrement la réponse d'un système.
Dit autrement, IR et FR (réponse en fréquence & phase) sont deux vues de la même chose.
On peut passer d'une vue à l'autre et réciproquement.
On entend parfois dire que ces vues sont complémentaires : non, elles sont équivalentes. Il n'y a pas d'information dans l'une qui ne soit dans l'autre. C'est juste que c'est plus facile de lire certaines informations sur l'une plutôt que l'autre
Temporel vers Fréquentiel : IR vers FREn audio, on préfère souvent voir la réponse en fréquence et en phase d'un système (FR), bien qu'un oeil exercé puisse voir pas mal de choses directement sur l'IR.
Vous avez reconnu le Low Pass LR24 sur l'IR ?
Comment passe t on d'une IR (domaine temporel) à une réponse en fréquence (domaine fréquentiel) ?
La fameuse Transformée de Fourrier !
La transformée de Fourrier est un outil mathématique qui sert à plein de choses.
J'en parle dans le contexte audio et numérique, cad échantillonné.
Dans ce domaine on parle par abus de "FFT" (Fast Fourrier Transform) qui désigne l'algorithme rapide discret pour faire une TF.
Pour faire simple, la FFT permet de passer du temporel au fréquentiel.
La transformée inverse, notée IFFT , fait l'inverse.
On note habituellement x(t) ou h(t) dans le domaine temporel et X (f) ou H (f) leur correspondant dans le domaine fréquentiel.
X (f) = FFT [x(t)]
Il existe plusieurs versions de ces algorithmes. Je parle ici du plus classique qui travaille en entrée et en sortie sur des tables contenant des valeurs
complexes.
La FFT a besoin d'une table de taille d'une puissance de 2.
On entre une table de N éléments complexes (IR) et il en ressort une table de N éléments complexes (FR).
L'IFFT c'est l'inverse
Appliqué à l'audio : Passer du temporel au fréquentielUn enregistrement audio ce sont des nombres réels, donc la table de l'IR en entrée de FFT sera remplie de réels. Les réels c'est des complexes dont la partie imaginaire est 0.
La table de sortie contient les valeurs complexes pour les fréquences de 0 à Fs moins un sample.
La particularité de la FFT lorsqu'en entrée il y a des réels, est que la deuxième moitié du tableau en jaune (de N/2 + 1 à N-1) contient en miroir les valeurs complexes conjuguées de la première moitié de tableau.
La première moitié du tableau de sortie (de 0 à Fs/2) contient des informations utiles de la réponse complexe en fréquence dont on pourra tirer Amplitude et Phase.
La deuxième moitié du tableau de sortie de la FFT (de fs/2 à Fs-1) en jaune est inexploitée.
On sait qu'un système samplé à Fs ne peut être exploité que jusqu'à Fs/2 : en voici une nouvelle illustration.
Les tables contiennent :
- pour l'indice i, la table d'
entrée x(i) contient la valeur (réelle) de l'IR pour t = i/Fs
- pour l'indice i, la table de
sortie X(i)contient la valeur (complexe) de la réponse en fréquence pour f = i*Fs/N
valable pour i=0 à N/2 dans la table de sortie. N/2 correspond a Fs/2.
De la valeur complexe on sait tirer Amplitude et Phase comme d'habitude :
Amplitude(dB) = 20log(module(X (i))
Phase(degrés) = 180/Pi * Argument(X (i))
On note que la table X (f) contient les valeurs sur une
échelle linéaire de fréquences, exploitables de 0 à Fs/2, par step de Fs/N.
Passage inverse, du fréquentiel au temporelou Comment recomposer l'IR a partir d'une FR ?
l'IFFT fait le passage inverse de la FFT et transforme N échantillons (complexes) de la FR en N échantillons (réels) de l'IR.
Techniquement l'IFFT produit aussi des complexes en sortie, dont la partie imaginaire sera 0.
x(t) = IFFT [X (f)]
La première partie de la table complexe X (f) se calcule avec la réponse en fréquence et en phase
for i = 0 to N/2
X (i).reel = A*cos(Phi)
X (i).imag = A*sin(Phi)
next i
avec A = 10^(G(i*Fs/N)) et Phi=Pi/180*Phase(i*Fs/N)
où G est l'amplitude en dB et Phase la phase en degrés.
Il faut penser que l'échelle en fréquence de la table X (f) est linéaire. Elles ne correspondent pas directement aux valeurs de FR en énième d'octave dont on dispose le plus souvent. Une possibilité est de faire de l'extrapolation linéaire pour trouver les valeurs manquantes.
L'autre contrainte est de reconstituer
entièrement et correctement la table X (f) de la FR complexe.
Cad remplir la deuxième moitié du tableau en "miroir conjuqué". Sinon l'IFFT ne fonctionnera pas comme prévu.
Pour mémoire : le conjugué d'un complexe est un complexe de même partie réelle, partie imaginaire opposée.
Le miroir se fait p/r a la valeur en N/2.
Algorithme "miroir conjuqué" pour remplir la deuxième moitié de la table RF avant d'appliquer l'IFFT :
For i = N/2+1 to N-1
X (i).reel = X (N-i).reel
X (i).imag = - X (N-i).imag
next i
Note : le nb de valeurs de part et d'autre de N/2 n'est pas le même. X (0) n'a pas de miroir.
Que faire si on n'a pas la FR jusqu'à Fs/2 ?C'est fréquent d'avoir la réponse en fréquence jusqu'à 20kHz ou moins alors que le sampling est a 48k ou 96k.
Il arrvie aussi qu'on n'ait pas les premières valeurs de table, notamment X (0).
Remplacer les valeurs manquantes par 0 et remplir jusqu'à Fs/2 avant d'appliquer l'algorithme "miroir conjuqué".
Vérifier son travailLa première vérification est que la table résultat de l'IFFT doit comporter des réels, toutes les parties imaginaires a 0.
Si ce n'est pas le cas c'est qu'il y a sans doute un raté dans la table miroir conjuqué.
Une deuxième vérification plus complète est de faire un aller-retour : FR -> IR -> FR
FFT [IFFT [X(f)] ]
On vérifie qu'on retrouve parfaitement la réponse en fréquence et en phase initiale. (A la précision des calculs près.)
Comment faire si on n'a pas de fonction IFFT et seulement une FFT a sa disposition ?c'est possible de faire simplement une Inverse FFT avec l'algorithme de FFT mais je n'ai jamais fait.
http://www.embedded.com/design/configur ... orward-FFT