next up previous
Next: Implémentation sous Scilab Up: Lifting en ondelettes Previous: Implémentation sous Scilab


Autre exemple l'ondelette Daubechies(4) version lifting

Daubechies(4) signifie que les filtres de cette ondelette possèdent 4 coefficients et $n=2$ moments nuls.

On a aussi :

\begin{displaymath}
\tilde{h}(z)=-z^{-1}g(-z^{-1})
\end{displaymath}

et

\begin{displaymath}
\tilde{g}(z)=z^{-1}h(-z^{-1})
\end{displaymath}

On trouve son expression dans les tables ou dans [Daubechies] :


\begin{displaymath}
\begin{array}{ccc}
h_0 = h[0] &=& \frac{1+\sqrt{3}}{4\sqrt{...
...}}\\
h_3 = h[3] &=& \frac{1-\sqrt{3}}{4\sqrt{2}}
\end{array}\end{displaymath}

On a les propriétés intéressantes suivantes :

\begin{displaymath}
\begin{array}{l}
h_0^2+h_1^2+h_2^2+h_3^2=1 \\
h_3h_1+h_2h_0=0\\
h_1^2=-\frac{h_2h_1h_0}{h_3}
\end{array}\end{displaymath}

soient

\begin{displaymath}
\begin{array}{ccc}
h[0]&=&.482962913145\\
h[1]&=&.836516303738\\
h[2]&=&.224143868042\\
h[3]&=&-.129409522551
\end{array}\end{displaymath}


\begin{displaymath}
h(z)=h_0 + h_1 z^{-1} + h_2 z^{-2} + h_3z^{-3}
\end{displaymath}

et


\begin{displaymath}
g(z)=-h_3 z^2 + h_2 z^{1} - h_1 + h_0z^{-1}
\end{displaymath}


\begin{displaymath}
P(z)=\left( \begin{array}{cc}
h_e(z) & g_e(z)\\
h_o(z) & g_o(z)
\end{array}\right)
\end{displaymath}


\begin{displaymath}
{h}(z)={h}_e(z^2) + z^{-1} {h}_o(z^2)
\end{displaymath}


\begin{displaymath}
{h}(z)={h}_0+h_2z^{-2} + z^{-1} (h_1+h_3z^{-2})
\end{displaymath}

d'où


\begin{displaymath}
{h}_e(z)=h_0+h_2z^{-1}
\end{displaymath}

et


\begin{displaymath}
{h}_o(z)=h_1+h_3 z^{-1}
\end{displaymath}

de la même façon pour ${g}$


\begin{displaymath}
g(z)=-h_3z^2-h_1 + z^{-1} ( h_2z^2+h_0)
\end{displaymath}


\begin{displaymath}
{g}_e(z)=-h_3z-h_1
\end{displaymath}

et


\begin{displaymath}
{g}_o(z)=h_2z+h_0
\end{displaymath}

d'où


\begin{displaymath}
{P}(z)=\left(
\begin{array}{cc}
h_0+h_2z^{-1} & -h_3z-h_1\\
h_1+h_3 z^{-1}& h_2z+h_0
\end{array}\right)
\end{displaymath}

On va écrire une étape de lifting primaire :

\begin{displaymath}
P(z)=\left(
\begin{array}{cc}
1 & s(z)\\
0 & 1
\end{array}\...
...g_e^{new}(z)\\
h_o^{new}(z) & g_o^{new}(z)
\end{array}\right)
\end{displaymath}

Alors,


\begin{displaymath}
\left\lbrace
\begin{array}{l}
h_o^{new}(z)=h_1+h_3z^{-1}\\
...
...\\
-h_3z-h_1=s(z) (h_2z+h_0) +g_e^{new}(z)
\end{array}\right.
\end{displaymath}

On utilise alors la division euclidienne : (on note que plusieurs factorisations sont possibles suivant l'ordre dans lequel on choisit de prendre en compte diviseur et dividende 9.)

Par exemple :


\begin{displaymath}
\begin{array}{rl\vert c}
h_2z^{-1} &+h_0 & h_3z^{-1}+h_1\\
...
... \\
\cline{1-2}
0 &+ \frac{h_3h_0-h_2h_1}{h_3} &
\end{array}\end{displaymath}

ou alors


\begin{displaymath}
\begin{array}{rl\vert c}
h_0 &+h_2z^{-1} &h_1+h_3z^{-1}\\
\...
...cline{1-2}
0 &+ \frac{h_2h_1-h_3h_0}{h_1}z^{-1} &
\end{array}\end{displaymath}

etc. ...

On se limite à l'exploration de la première solution (les autres aboutiront aussi à des formulations différentes mais équivalentes).

On a alors :

\begin{displaymath}
s(z)=\frac{h_2}{h_3}
\end{displaymath}

et

\begin{displaymath}
h_e^{new}(z)=\frac{h_3h_0-h_2h_1}{h_3}
\end{displaymath}

on explicite alors $g_e^{new}(z)$ :


\begin{displaymath}
\begin{array}{lll}
g_e^{new}(z) & = & -h_3z-h1-\frac{h_2}{h_...
...3+h_2h_0}{h_3}\\
& = &-(\frac{h_3^2+h_2^2}{h_3})z
\end{array}\end{displaymath}

d'où


\begin{displaymath}
P(z)=\left(
\begin{array}{cc}
1 & \frac{h2}{h3}\\
0 & 1
\en...
...^2+h_2^2}{h_3}z\\
h_1+h_3z^{-1} & h_2z+h_0
\end{array}\right)
\end{displaymath}

Maintenant, le lifiting dual :


\begin{displaymath}
P(z)=\left(\begin{array}{cc}
1 & \frac{h2}{h3}\\
0 & 1
\end...
...^2+h_2^2}{h_3}z\\
h_1+h_3z^{-1} & h_2z+h_0
\end{array}\right)
\end{displaymath}

alors,


\begin{displaymath}
\left\lbrace
\begin{array}{l}
h_e^{new}(z)=\frac{h_3h_0-h_2h...
... (-\frac{h_3^2+h_2^2}{h_3}z) + g_o^{new}(z)
\end{array}\right.
\end{displaymath}


\begin{displaymath}
\begin{array}{rc\vert c}
h_1 &+h_3z^{-1} &\frac{h_3h_0-h_2h_...
...1} & \\
& -( h_3z^{-1}) & \\
\cline{1-2}
& 0 &
\end{array}\end{displaymath}

donc

\begin{displaymath}
t(z)=\frac{h_3h_1}{h_3h_0-h_2h_1} + \frac{h_3^2}{h_3h_0-h_2h_1}z^{-1}
\end{displaymath}

et

\begin{displaymath}
h_o^{new}(z)=0
\end{displaymath}

alors,


\begin{displaymath}
\begin{array}{ll}
g_o^{new}(z)&=h_2z+h_0-\left(\frac{h_3h_1+...
...ght) z + \frac{h_3(h_3^2+h_2^2)}{h_3h_0-h_2h_1}+h_0
\end{array}\end{displaymath}

Or


\begin{displaymath}
h_2 +\frac{h_1(h_3^2+h_2^2)}{h_3h_0-h_2h_1}=0
\end{displaymath}

d'où


\begin{displaymath}
g_o^{new}(z)=\frac{h_3(h_3^2+h_2^2)}{h_3h_0-h_2h_1}+h_0
\end{displaymath}

Voilà :


\begin{displaymath}
P(z)=\left(\begin{array}{cc}
1 & \frac{h_2}{h_3}\\
0 & 1
\e...
... \frac{h_3(h_3^2+h_2^2)}{h_3h_0-h_2h_1}+h_0
\end{array}\right)
\end{displaymath}

On peut maintenant mettre en évidence la mise à l'échelle d'abord en réécrivant un peu les derniers coefficients obtenus à l'aide des formules sur les coefficients $h_i$ ($ 0\le i\le 3$) :


\begin{displaymath}
\frac{h_3(h_3^2+h_2^2)}{h_3h_0-h_2h_1}+h_0=h_3 \frac{h_3^2 +h_2^2 + h_0^2-\frac{h_2h_1h_0}{h_3}}{h_3h_0-h_2h_1}
\end{displaymath}

d'où


\begin{displaymath}
\frac{h_3(h_3^2+h_2^2)}{h_3h_0-h_2h_1}+h_0=\frac{h_3}{h_3h_0-h_2h_1}
\end{displaymath}

et


\begin{displaymath}
P(z)=
\left(\begin{array}{cc}
1 & \frac{h2}{h3}\\
0 & 1
\en...
...2}{h_3} z \\
0 & \frac{h_3}{h_3h_0-h_2h_1}
\end{array}\right)
\end{displaymath}

On a aussi

\begin{displaymath}
-\frac{h_3^2+h_2^2}{h_3}= \frac{h_3}{h_3h_0-h_2h_1}
\end{displaymath}


\begin{displaymath}
P(z)=
\left(\begin{array}{cc}
1 & \frac{h2}{h3}\\
0 & 1
\en...
...h_2h_1} z \\
0 & \frac{h_3}{h_3h_0-h_2h_1}
\end{array}\right)
\end{displaymath}

On peut donc introduire l'étape de mise à l'échelle (normalisation), en remarquant que


\begin{displaymath}
\left(\begin{array}{cc}
K & \frac{1}{K} z \\
0 & \frac{1}{K...
...\begin{array}{cc}
K & 0 \\
0 & \frac{1}{K}
\end{array}\right)
\end{displaymath}

d'où finalement


\begin{displaymath}
P(z)=
\left(\begin{array}{cc}
1 & \frac{h2}{h3}\\
0 & 1
\en...
...{h_3} & 0 \\
0 & \frac{h_3}{h_3h_0-h_2h_1}
\end{array}\right)
\end{displaymath}

c'est-à-dire


\begin{displaymath}
P(z)=
\left(\begin{array}{cc}
1 & -\sqrt{3}\\
0 & 1
\end{ar...
...2}} & 0 \\
0 & \frac{\sqrt{3}-1}{\sqrt{2}}
\end{array}\right)
\end{displaymath}

et alors :


\begin{displaymath}
\tilde{P}(z)=
\left(\begin{array}{cc}
\frac{\sqrt{3}-1}{\sqr...
...eft(\begin{array}{cc}
1 & \sqrt{3}\\
0 & 1
\end{array}\right)
\end{displaymath}

On peut de façon plus condensée (que l'écriture matricielle) écrire le pseudo code pour l'algorithme de calcul in place, $x_e$ et $x_o$ représente les coefficients pairs et impairs du signal (respectivement), $d$ représente les détails (i.e. les coefficients issu du filtrage passe haut, donc les coefficients d'ondelettes), $s$ représente le signal grossier (smooth) issu du fitlrage passe-bas et donc les coefficients d'échelle.


\begin{displaymath}
\begin{array}{l}
s=x_o+\sqrt{3}x_e;\\
d=x_e-\sqrt{3}/4*s-(\...
...qrt{3}+1)/\sqrt{2}*d;\\
s=(\sqrt{3}-1)/\sqrt{2}*s;
\end{array}\end{displaymath}

Pour le passage à une résolution supérieure on prend le code précédent que l'on réinitialise en commençant par :

\begin{displaymath}
\begin{array}{l}
x_o=s(1:2:length(s));\\
x_e=s(2:2:length(s));\\
\end{array}\end{displaymath}

L'implémentation peut se faire facilement suivant l'exemple de la Figure 8.

Figure 8: Schéma d'une implémentation du lifting
\begin{figure}\centerline{%
\input{liftfinal.pstex_t}}\end{figure}



Subsections
next up previous
Next: Implémentation sous Scilab Up: Lifting en ondelettes Previous: Implémentation sous Scilab
lepage 2004-08-27