IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Signal Discussion :

Déconvolution via FFT, IFFT [2]


Sujet :

Signal

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Déconvolution via FFT, IFFT [2]
    Bonjour,
    j'étudie actuellement un réacteur chimique, sa distribution de temps de séjour.
    J'injecte à l'entrée un signal de traceur (in(t)) et j'enregistre à la sortie le signal déformé (out(t)). Mon but est de déterminer la réponse impulsionnelle e(t) de mon système.
    On montre que pour ce genre de réacteur, dans l'espace de LAPLACE :

    OUT(p)=IN(p)E(p)

    in(t) et out(t) sont des vecteurs normalisés de dimension 23, on a vérifié que leur intégrale est égale à 1 (par la méthode des trapèzes).

    J'ai procédé comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    E=fft(out)./fft(in)
    e=ifft(E)
    Mais e n'a pas du tout les valeurs attendues, elle oscille autour de 0 alors qu'elle devrait être positive.

    Suite à une erreur, j'avais également essayé ceci (sans le point devant /):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    E=fft(out)/fft(in)
    e=ifft(E)
    le résultat est alors une matrice 23x23, dont seule la première colonne est non nulle, j'ai alors appliqué ifft à cette colonne:
    Le résultat a la bonne allure: valeur maximale au bon endroit, mais son intégrale est égale à 0,14 alors qu'elle devrait être égale à 1.

    Je trouve mon problème assez proche de cette discussion: http://www.developpez.net/forums/d10...-via-fft-ifft/

    Constatez vous des absurdités dans ma démarche? je ne suis pas un fan de math et je découvre la déconvolution.

    Merci d'avance

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    j'ai un peu avancé, je pense qu'il faut bien utiliser la fonction ./ et non /

    J'ai cependant fait un nouveau test :
    j'ai déterminé la fonction e avec les signaux d'entrée in et out qui sont des gaussiennes, j'ai ensuite fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    out=ifft(fft(e).*fft(in))
    je ne retrouve pas le signal out original, mais une gaussienne qui a la même espérance mais un écart type plus grand. C'est la bonne courbe, à un facteur 1,97 près .

    J'en conclut que mon code matlab n'est pas bon, pourtant je ne vois pas ce qui peut ne pas aller.

    J'ai aussi lu dans des publis que la transformée de Fourier est très sensible au bruit, qu'il peut être intéressant de mettre en place des filtres, savez vous si l'on peut implémenter ce genre de chose sur matlab? Car pour l'instant je n'ai pas de mesures, je travaille avec des signaux non bruités, mais cela ne sera pas le cas lorsque je manipulerai des mesures réelles.

    Merci d'avance

    EDIT : j'avais confondu la fonction normée et la non normée, je retrouve bien le signal de sortie, merci à tous!

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Toujours pas résolu!
    Bonjour,

    Je n'ai toujours pas résolu mon problème... le résultat attendu après déconvolution est une courbe continue d'intégrale 1, mais je n'obtiens qu'un signal inexploitable, même si ce signal après reconvolution avec l'entrée revoie bien le signal de sortie.

    Voici les signaux in(t) et out(t) après normalisation et le résultat de la déconvolution :
    http://imageshack.us/photo/my-images/24/unledag.jpg

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 36
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    En fait cette methode de déconvolution revient a appliquer un filtre inverse. Elle se révèle très sensible au bruit des mesures (l'erreur est proportionnelle au niveau de bruit). Il vaut mieux dans ce cas choisir des méthodes dites régularisées qui vont prendre en compte ce bruit.

    Il y a par exemple la déconvolution "de norme L2".

    Si on a le modèle z = Ax+b

    z => données
    x => inconnu
    A => Matrice de convolution
    b => bruit

    le but est de minimiser le critère :

    J(x) = ||z-Ax||_2^2 + u ||x||_2

    ou u est le paramètre de régularisation. ||x||_2 est la norme L2 de x.

    Il y a quelques codes disponibles sur le site de Matlab (ici par exemple) et j'ai trouve ceci rapidement sur le web

    Sinon il est aussi possible d'utiliser l'intercorrelation puis une détection de min/max. Cette methode marche bien si les formes convoluees ne se mélangent pas.

    Sur l'image, quels signaux correspondent a quelle couleur ?

    Bon courage !

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut enfin une réponse!
    Bonjour, merci de ta réponse!

    Je prendrai le temps de me pencher sur les liens que tu m'as donné dans un moment, en attendant pour répondre à ta question :
    -sur le graphe de gauche ce sont : mon signal d'entrée en bleu et mon signal de sortie en vert
    -sur le graphe de droite : le résultat de la déconvolution.

    Je pense que dans mon système physique, et selon tes notations, b=0.

    Je vais me pencher sur le paramètre de régularisation, je ne sais pas ce que c'est.

    En tout cas merci et à bientôt!

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 36
    Points : 42
    Points
    42
    Par défaut
    Re-bonjour,

    En fait le bruit (b) est inconnu et je pense qu'il est forcement non nul dans un système physique.

    Au niveau de tes signaux, si l’entrée c'est in (signal bleu fonce) et la sortie out (vert), le signal de droite x doit bien vérifier : out = in*x (* produit de convolution) ?

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Dans les publications que j'ai lu, le problème est toujours représenté sous la forme : OUT=IN*X, avec IN et OUT connus.

    En effet, je retrouve bien out en faisant la convolution de in et de X, mais j'attendais une courbe continue, proche d'une gaussienne en théorie...

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 36
    Points : 42
    Points
    42
    Par défaut
    C'est vrai que le résultat ressemble a du bruit....

    Es-tu sur que c'est un modèle convolutif ?

    Pourrais tu essayer l'intercorrelation entre in et out et nous envoyer le résultat ? Je pourrai peut-être d'orienter en fonction du résultat.

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Voilà le résultat, je suis vraiment emballé, ça a la bonne tête, par contre ce vecteur n'a pas la même longueur que mon vecteur temps, du coup je ne peux pas voir si le pic est au moment attendu, une solution?

    http://imageshack.us/photo/my-images/20/xcorr.jpg

    Merci

  10. #10
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 36
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    Voilà le résultat, je suis vraiment emballé, ça a la bonne tête, par contre ce vecteur n'a pas la même longueur que mon vecteur temps, du coup je ne peux pas voir si le pic est au moment attendu, une solution?
    C'est tout a fait normal que la taille ne soit pas la même. Voici l'aide de Matlab :

    c = xcorr(x,y) returns the cross-correlation sequence in a length 2*N-1 vector, where x and y are length N vectors (N>1). If x and y are not the same length, the shorter vector is zero-padded to the length of the longer vector.
    Quelles sont les tailles des vecteurs ? En supprimant le début et la fin du vecteur d'intercorrelation, on devrait retomber sur nos pieds...

    Par contre l'intercorrelation et la déconvolution sont deux choses complètement différentes. Ça dépend de ça que tu veux faire exactement... Le deconvolution est liée a un modèle et c'est une inversion de système. L'intercorrelation est un outil de traitement du signal qui permet d'observer la "ressemblance" entre 2 signaux.

    A+

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    En supprimant le début et la fin du vecteur d'intercorrelation, on devrait retomber sur nos pieds...
    Dans mon cas l'aspect est important, mais le moment où le signal est maximal est très important, cette solution ne garderait pas cette information, à la limite je préférerais enlever une valeur sur deux, afin de garder la "proportion" du signal.

    Par contre l'intercorrelation et la déconvolution sont deux choses complètement différentes. Ça dépend de ça que tu veux faire exactement...
    Ce que je veux faire est une déconvolution (obtenir la réponse indicielle de mon système), mais le résultat doit avoir exactement la tête de ce qu'on a obtenu avec l'intercorrelation, et je n'ai jamais eu de résultat si proche avec mes déconvolutions... après je me suis peut être un peu emballé .

    En fait j'injecte mon traceur avec une seringue, j'essaye autant que possible de faire une impulsion type Dirac, mais c'est difficile. Je ne peux donc pas considérer ma sortie comme la réponse indicielle de mon système. La déconvolution permet (dans les publis que j'ai lu) d'obtenir cette réponse indicielle quelque soit le signal d'entrée.
    un petit lien pour expliquer ce que je fais (voir section 4.3, et surtout 4.3.3, page 28).

    Merci

  12. #12
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 36
    Points : 42
    Points
    42
    Par défaut
    Dans mon cas l'aspect est important, mais le moment où le signal est maximal est très important, cette solution ne garderait pas cette information, à la limite je préférerais enlever une valeur sur deux, afin de garder la "proportion" du signal.
    C'est pourtant ce qu'il faudra faire. Il y a une succession de zéro au début et a la fin du signal et suivant les tailles des vecteurs d’entrée, il faut supprimer un certain nombre de zéros au début et a la fin.

    Prendre un échantillon sur 2 reviendrait a sous-échantillonner et donc a réduire la base de temps. Je pense pas que c'est ce que tu veux faire...

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Mon résultat final doit être la première image que j'ai posté (avec les deux signaux) avec, superposée, la réponse impulsionnelle. Le pic doit être en théorie au temps 1 (il s'agit d'une échelle de temps normée), mais il se peut, à cause de défauts physiques dans le réacteur, que ce pic soit déplacé (les particules vont plus vite ou plus lentement que prévu), et c'est justement ce qui m’intéresse. Si on enlève des zéros arbitrairement avant et après le résultat de l'intercorrelation, je ne pourrai pas détecter ces défauts.

    Ma courbe finale doit avoir l'allure du résultat de l'intercorrélation, un pic aux alentours de 1, et une aire égale à 1.

    Les vecteurs sont de longueur 5700.

    Merci
    A+

Discussions similaires

  1. Déconvolution via FFT, IFFT
    Par jigsa dans le forum Signal
    Réponses: 6
    Dernier message: 14/06/2011, 19h02
  2. fft-ifft- supression de fréquence
    Par tesca dans le forum Signal
    Réponses: 7
    Dernier message: 23/06/2010, 16h22
  3. FFT/IFFT and conjugate OF FFT design
    Par ingm83 dans le forum Simulink
    Réponses: 0
    Dernier message: 27/05/2010, 00h11
  4. Filtrage par fft-ifft
    Par zugeur dans le forum Signal
    Réponses: 15
    Dernier message: 03/04/2009, 17h17
  5. Calcul de fréquence via FFT
    Par jericho dans le forum MATLAB
    Réponses: 2
    Dernier message: 21/02/2008, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo