But

 

Le but de ce TP est de :

  • réaliser en C/C++ les fonctions effectuant la décomposition d'un signal et sa reconstruction par une structure en lifting.
  • comparer les structures en banc de filtres et les structures en lifting

On ne considèrera que le jeu de filtres biorthogonaux 9/7. On demande aussi de commenter les résultats obtenus et d'afficher les signaux générés à l'aide d'un outil de tracé de courbe comme gnuplot, scilab ou matlab. Enfin, on veillera à conserver les fonctions définies ci-dessus, car elle seront réutilisées dans la suite des TPs.

Notes

Les fonctions effectuent les transformations sur place, signifiant qu'elles effectuent la transformation directement sur le signal d'entrée. Certaines opérations, comme le produit de convolution, ne sont pas possibles à réaliser directement sur place, et on pourra avoir recours à des tableaux temporaires.
Tous les signaux seront representés en C/C++ par des tableaux de double.
Un mémento des fonctions C ANSI utiles est disponible ici.

TP

 

1 - Décomposition 9/7 par lifting

Définition
La décomposition d'un signal par banc de filtres biorthogonaux 9/7 peut aussi se faire par une méthode dite "en lifting". Supposant un signal x, le lifting consiste à faire les opérations suivantes, séquentiellement :
TP
La décomposition d'un signal par banc de filtres biorthogonaux 9/7 peut aussi se faire par une méthode dite "en lifting". Supposant un signal x, le lifting consiste à faire les opérations suivantes, séquentiellement :
  1. "Prédiction" 1 : Pour tout n,
    x[2n+1] <- a*x[2n]+x[2n+1]+a*x[2n+2]
    avec a=-1.586134342
  2. "Mise à jour" 1 : Pour tout n,
    x[2n] <- a*x[2n-1]+x[2n]+a*x[2n+1]
    avec a=-0.05298011854
  3. "Prédiction" 2 : Pour tout n,
    x[2n+1] <- a*x[2n]+x[2n+1]+a*x[2n+2]
    avec a=0.8829110762
  4. "Mise à jour" 2 : Pour tout n,
    x[2n] <- a*x[2n-1]+x[2n]+a*x[2n+1]
    avec a=0.4435068522
  5. "Mise à l'échelle" : Pour tout n,
    x[2n] <- x[2n]/a et
    x[2n+1] <- a*x[2n+1]
    avec a=1/1.149604398
  6. "Mise en forme" : Mettez les valeurs d'index pairs dans la première moitié de x et les valeurs d'index impairs dans la seconde moitié.
    (exemple : 01234567 devient 02461357)
Notes
On gèrera les effets de bords par symétrie miroir.
TP
Implantez la fonction analyse_97_lifting() suivante réalisant la décomposition du signal par lifting biorthogonal 9/7 :
    void analyse_97_lifting(double* x,int p);
  • Effectue la décomposition biorthogonales 9/7 par lifting "sur place" du signal x.
  • En entrée, x est un signal temporel de longueur p p est une puissance de 2.
  • En sortie, x contient les résultats de la décomposition biorthogonales 9/7 du signal d'entrée. Dans sa première moitié, x contient les coefficients d'approximation et dans sa seconde moitié, x contient les coefficients de détail.

Tracez la courbe des coefficients obtenus par décomposition du signal leleccum.
Comparez et commentez les coefficients obtenus par rapport à ceux de la décomposition 9/7 par banc de filtres (vue au TP1).

2 - Reconstruction par lifting

Définition
La reconstruction par lifting biorthogonal 9/7 est la réciproque de la décomposition en lifiting. Très simple, elle se fait par l'exécution des étapes réciproques de la décomposition et dans l'ordre séquentiel inverse :
  1. "Mise en forme" : Réciproque de la "mise en forme" de la décomposition. (exemple : 02461357 devient 01234567)
  2. "Mise à l'échelle" : Pour tout n,
    x[2n] <- x[2n]/a et
    x[2n+1] <- a*x[2n+1]
    avec a=1.149604398
  3. "Mise à jour" 2 : Pour tout n,
    x[2n] <- a*x[2n-1]+x[2n]+a*x[2n+1]
    avec a=-0.4435068522
  4. "Prédiction" 2 : Pour tout n,
    x[2n+1] <- a*x[2n]+x[2n+1]+a*x[2n+2]
    avec a=-0.8829110762
  5. "Mise à jour" 1 : Pour tout n,
    x[2n] <- a*x[2n-1]+x[2n]+a*x[2n+1]
    avec a=0.05298011854
  6. "Prédiction" 1 : Pour tout n,
    x[2n+1] <- a*x[2n]+x[2n+1]+a*x[2n+2]
    avec a=1.586134342
TP
Implantez la fonction synthese_97_lifting() suivante réalisant la reconstruction du signal par lifiting biorthogonal 9/7 :
    void synthese_97_lifting(double* x,int p);
  • Effectue la reconstruction "sur place" d'un signal, à partir de ses coefficients x, obtenus par décomposition en lifting biorthogonal 9/7. Cette fonction est la réciproque de analyse_97_ lifting() (à la précision machine près).
  • En entrée, x de longueur p, où p est une puissance de 2, contient, dans sa première moitié, les coefficients d'approximation et dans sa seconde moitié, les coefficients de détail, obtenus par décomposition 9/7.
  • En sortie, x est le signal temporel reconstruit.

Reconstruisez le signal lellecum à partir de ses coefficients obtenus précedemment.
Tracez et commentez la courbe du signal reconstruit.

3 - Analyse/synthèse d'une ligne d'image

Définition
Le signal test à droite à été extrait de la ligne du milieu de l'image ci-dessous. Ce signal de 512 points est disponible ici.
lena lellecum
TP
Calculez les coefficients de décomposition du signal test en utilisant :
  • le banc de filtres de Haar
  • le banc de filtres biorthogonaux 9/7
  • le lifting biorthogonal 9/7
Tracez et commentez les courbes des coefficients.
Décrivez les interêts du "lifting".