lundi 2 septembre 2013

Convolution et transformation de Fourier

Une propriété très importante de la Transformation de Fourier est qu'elle transforme la convolution en un simple produit ! Plus précisément on a les formules suivantes :

Théorème Soient $f,g\in{\mathbb L}^1({\mathbb R})$ alors
$$ \widehat{f*g}=\widehat{f}\times \widehat{g}$$
si en plus $\widehat{f}, \widehat{g}\in{\mathbb L}^1({\mathbb R})$ alors
$$ \widehat{f}* \widehat{g}=2\pi\widehat{{f}\times {g}}$$
avec ${\mathcal F}f(\xi)= \hat{f}(\xi)=\int_{\mathbb R} e^{-i\xi x} f(x) dx$


La démonstration consiste juste à intervertir dans $\widehat{f*g}$ les intégrales définissant la transformation de Fourier et la convolution (grâce au théorème de Fubini puisque f et g sont intégrables) puis à faire ensuite le bon changement de variables pour faire apparaître des variables séparées :$$\begin{eqnarray*}
\widehat{f*g}(\xi)&=&\int_{\mathbb R}e^{-ix\xi}f*g(x) dx\\
&=& \int_{\mathbb R} e^{-ix\xi} \int_{\mathbb R} f(x-t) g(t) dt\, dx\\
&=& \int_{\mathbb R}\int_{\mathbb R} e^{-is\xi} e^{-it\xi}f(s) g(t) dt\, ds \, \text{changement variable } s=x-t\\
&=& \int_{\mathbb R} e^{-is\xi} f(s) ds \times \int_{\mathbb R} e^{-it\xi} g(t) dt\\
&=& \widehat{f}(\xi)\times \widehat{g}(\xi)
\end{eqnarray*}$$
Pour obtenir la deuxième formule il suffit d'appliquer la première formule à $f=\hat{F}$ et $g=\hat{G}$ et d'utiliser en plus la formule d'inversion de Fourier $F=2\pi\check{\hat{f}}$ et $G=2\pi\check{\hat{g}}$ (où $\check{h}(x)=h(-x)$):
$$ \widehat{f\times g}=\widehat{\widehat{F}\times \widehat{G}}
=\widehat{\widehat{F*G}}={1\over 2\pi}\check{F*G}= {1\over 2\pi} \check{F}* \check{G}=2\pi \hat{f}*\hat{g}$$
car
$$\begin{eqnarray*}
\check{F*G}(\xi)&=&\int_{\mathbb R}F(-\xi-t)G(t) dt\\
&=& \int_{\mathbb R} F(-\xi+s)G(-s) ds \, \text{changement variable } s=-t\\
&=& \int_{\mathbb R} \check{F}(\xi-s) \check{G}(s) ds\\
&=& \check{F}* \check{G}(\xi)
\end{eqnarray*}$$

Ces formules ont de nombreuses applications théoriques et pratiques, la première est que pour faire une convolution il suffit de faire deux transformations de Fourier et un produit. Comme on dispose d'un algorithme de calcul très efficace appelé  transformation de Fourier rapide on préfère généralement calculer les convolutions en passant par la transformation de Fourier (c'est le cas dans la plupart des fonctions de filtrage utilisées en traitement d'image). Mathématiquement cette formule permet aussi de comprendre pourquoi la convolution n'a pas d'élément neutre. En effet :$$f*g=f\Longrightarrow\widehat{f*g}=\widehat{f}\Longrightarrow
\widehat{f}\times \widehat{g} =\widehat{f}\Longrightarrow \widehat{g}=1 \Longrightarrow g=\delta$$
L'élément neutre serait donc la distribution de Dirac! Ce résultat confirme ce qu'on obtient avec les approximations de l'unité , mais ce raisonnement est purement formel puisqu'il faudrait d'abord définir la convolution des distributions (ce qui n'est pas une chose facile!)
De même cette formule permet de comprendre comment "inverser" une convolution, au moins de manière approchée. Si connaissant deux fonctions $h,g$ on veut trouver $f$ telle que $ f*h=g$ , en passant par la transformée de Fourier on obtiendra que :
$$\widehat{f*h}= \widehat{f}\times \widehat{h} =\widehat{g}\Longrightarrow \widehat{f}= {\widehat{g}\over\widehat{h}}\Longrightarrow f= {\mathcal F }^{-1}\left(\widehat{g}\times {1 \over\widehat{h}}\right)$$
 Hélas cette formule n'a en général pas de sens car $\widehat{h}$ s'annule en certains points. Il existe cependant des moyens de contourner cette obstruction, la plus simple est de modifier légèrement le dénominateur pour qu'il ne s'annule pas :$$ {1\over\widehat{h}}= {\overline{\widehat{h}} \over\vert\widehat{h}\vert^2}\longrightarrow \widehat{w}= {\overline{\widehat{h}} \over\varepsilon^2 +\vert\widehat{h}\vert^2} $$
 En prenant un $\varepsilon>0$ assez petit, on peut espérer retrouver $f$ sans risquer une division par 0.  $w$ est ce qu'on appelle le filtre de Wiener :


Définition On appelle filtre de Wiener associé à $h$ la fonction $w$ telle que
$$ \widehat{w}= {\overline{\widehat{h}} \over\varepsilon^2 +\vert\widehat{h}\vert^2} ~~~\text{pour}~~~ \varepsilon>0 $$
de telle sorte que si $f*h=g$ alors $g*w\approx f$.
Voici un petit exemple numérique pour illustrer l'efficacité de cette méthode en prenant :
$$f(x)=(x-\sin(0.2x^2+1))\times \exp(-x^2/9),\,\,
h(x)= x\times {\exp(-x^2/2)\over \sqrt{2\pi}},\,\, g=f*h$$
vous pouvez vérifier sur les graphes ci-dessous que numériquement $g*w\approx f$ et que $\widehat{h}\times \widehat{w}\approx 1$ au moins là où $\widehat{h}>>0$ ce qui est suffisant pour donner une bonne approximation de $1/\widehat{h}$.


L'autre intérêt de cette méthode est de d'être applicable même si $g=f*h$ se trouve déformé par l'ajout d'un bruit (signal essentiellement aléatoire). Bien que le signal soit fortement affecté, sur le deuxième graphe de la deuxième ligne, la méthode arrive à retrouver le profil de $f$!. Le choix optimal pour $\varepsilon$ dépendant d'ailleurs de la transformé de Fourier de $f$ et du niveau de bruit dans le signal $g$ mais c'est un peut compliqué à montrer ...

Aucun commentaire:

Enregistrer un commentaire

Pour écrire des formules mathématiques vous pouvez utiliser la syntaxe latex en mettant vos formules entre des "dollars" $ \$....\$ $ par exemple :
- $\sum_{n=1}^\infty {1\over n^2}={\pi^2\over 6}$ s'obtient avec \sum_{n=1}^\infty {1\over n^2}={\pi^2\over 6}
- $\mathbb R$ s'obtient avec {\mathbb R} et $\mathcal D$ s'obtient avec {\mathcal D}
- pour les crochets $\langle .,. \rangle$ dans les commentaires utilisez \langle .,. \rangle
vous pouvez écrire du html dans les commentaires :
- italique <i> ... </i> gras <b> ... </b>
- lien <a href="http://adresse "> .... </a>