But
Le but de ce TP est de réaliser en C/C++ les fonctions effectuant la décomposition d'un signal à l'aide d'un banc de filtres d'analyse et sa reconstruction par banc de filtres de synthèse, c'est à dire par filtrage passe-haut/passe-bas, décimation et interpolation.
On ne considerera que les filtres de Haar et les filtres biorthogonaux 9/7.
On demande d'implanter les fonctions suivantes :
- void analyse_haar(double* x,int p);
- Effectue la décomposition de Haar "sur place" du signal x.
- En entrée, x est un signal temporel de longueur p où p est une puissance de 2.
- En sortie, x contient les résultats de la décomposition de Haar 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.
- void synthese_haar(double* x,int p);
- Effectue la reconstruction "sur place" d'un signal, à partir de ses coefficients x, obtenus par décomposition de Haar. Cette fonction est la réciproque de analyse_haar() (à 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 de Haar.
- En sortie, x est le signal temporel reconstruit.
- void analyse_97(double* x,int p);
- Effectue la décomposition "sur place" du signal x avec les filtres biorthogonaux 9/7.
- Les paramètres sont les mêmes que analyse_haar().
- void synthese_97(double* x,int p);
- Effectue la reconstruction "sur place" d'un signal, à partir de ses coefficients x , obtenus par décomposition avec les filtres biorthogonaux 9/7.
- Les paramètres sont les mêmes que synthese_haar().
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.