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

Traitement du signal Discussion :

Convolution FFT algorithme


Sujet :

Traitement du signal

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut Convolution FFT algorithme
    Bonjour à tous,

    Je travail actuellement sur du traitement du signal. Je cherche à réaliser une opération de convolution sur un signal "infini". Pour cette opération de convolution je transforme mon signal d'entrée ( f ) (selon une fenetre de taille fixe) dans le domaine fréquentiel via une FFT. Et je transforme mon impulse ( h ) dans le domaine fréquentiel. Puis une multiplication entre les deux et enfin une FFT inverse sur le résultat avant de resortir le son.

    Le principe utilisé est celui du fenetrage. Imaginons une fenetre de taille 2048.
    Je me pose des questions sur la mise en place de l'algorithme. Si mon impulse est plus petite que 2048 qu'est ce que je fais ? Si elle est plus grande ?

    Je suis ouvert à toute l'aide que vous pourrez me founir, tous les documents.
    Merci beaucoup.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    On note souvent h(t) la réponse impulsionnelle et H(f) la réponse fréquentielle.

    Est-ce ce que vous voulez dire en parlant de h l'impulse ?

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Quelques pistes : http://miles.developpez.com/tutoriels/algo/fft/
    Donc si tu regardes bien, si tu as un signal fenêtré de taille 1024, ton impulsion ne devrait pas être plus grande que 1025 échantillons.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    On note souvent h(t) la réponse impulsionnelle et H(f) la réponse fréquentielle.
    H(f) = FFT ( h(t) ) ?

    Je ne suis pas sur du vocabulaire employé en fait ?

    Après reflexion je pense que la meilleure solution est de mettre une fenetre relativement grande de telle facon que les impulses soient toujours plus courtes et compléter par des 0 jusqu'a atteindre la taille de la fenetre.

    Merci pour le tuto. Je vais le décortiquer.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    Citation Envoyé par samtheh
    H(f) = FFT ( h(t) ) ?

    Je ne suis pas sur du vocabulaire employé en fait ?
    Oui c'est tout à fait ça. A une multiplication dans le domaine des fréquences correspond une convolution dans le domaine des temps.

    Mais il vaut mieux pratiquer une convolution, la réalisation de la FFT rajoute du temps de calcul car il faut ensuite revenir dans le domaine des temps.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    Seulement,

    f O g (t) = IFFT( FFT (f (t)) * FFT(g(t)) )

    Et le calcul coté fréquentiel est moins complexe que coté temporel. D'un point de vue algorithmie en tout cas.

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    Il y a complexité algorithmique et temps de calcul.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    Tu veux dire que le temps de calcul serait inférieur dans le domaine temporel ??

    Est ce bien sur ? dans tous les cas ?

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Si le filtre est petit devant la taille de l'image, une FFT n'est pas rentable.
    Millie en parle dans son tutoriel sur la FFT appliqué au traitement d'image, si je me souviens bien.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    Je ne travaille pas sur des images mais sur du son, musique.

    Mon filtre (impulse) est plutot petit devant le fichier appliqué puisque considéré comme infini....

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    Je ne sais pas. Si vous connaissez la FFT, vous avez celle du système en mémoire, ça fait une FFT pour le signal, une multiplication terme à terme des deux vecteurs, avec stockage, et une FFT inverse, qui vaut pour une FFT.

    Je ne connais pas d'algorithme de convolution, mais il faut faire la comparaison.

    il y a 1024x1024 produits + 1024 sommes pour un algorithme de convolution discrète "brut"

    La FFT optimise aussi beaucoup les calculs, mais avec une TF classique, ça fait 2x1024x1024 +1024 produits plus 2048 sommes, ce qui est plus important qu'une convolution "brut"

    Je ne sais pas vraiment dans quelle mesure la FFT optimise le temps de calcul.

  12. #12
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Convolution = algorithme en N²
    FFT = algorithme en Nlog(N)

    Pas besoin de faire le calcul maintenant, tu as les chiffress.

  13. #13
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    ...
    Avant de raconter ça, programme une FFT...

  14. #14
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    fftw ? Je peux le mettre dans le pic directement ? C'est surtout ça que j'aimerai savoir. En fait, je ne connais pas le fonctionnement d'une récursion en terme d'exécution sur la machine, et ça m'avait paru un peu "magique" en cours. Donc je me posais des questions.

    PS : j'ai déjà réalisé un algorithme de fft avec matlab. Juste que je me pose des questions sur les dsPIC, comment ils fonctionnent... Désolé

  15. #15
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Tu es donc au courant que même si la FFT peut être écrite récursivement, son implémentation n'est jamais récursive mais itérative ?

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    Donc c'est bien ce qu'il me semblait il est plus rapide et moins complexe de passer dans le domaine frequentiel que de réaliser l'opération dans le domaine temporel. C'est bien ca ?

  17. #17
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    euhh ... non je n'étais pas au courant.

    Alors l'algorithme récursif du calcul de la factorielle est itératif en fait, il fait simplement appel à une valeur stockée en mémoire déjà calculé ? C'est juste une manière plus commode de l'écrire ? Désolé de mon ignorance

  18. #18
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    samthet > c'est plus rentable si la taille du filtre est au moins du même ordre que celle du signal analysé, cf message précédent. Le point exact de changement doit être testé.
    kromartien > La démonstration est récursive, mais l'implémentation est itérative, c'est facile à modifier.

  19. #19
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Par défaut
    Désolé de rouvrir ce sujet après tant d'année
    Mais samtheh, est-ce que tu as réussi à mettre une convolution de signal dans ton dsPic ?
    Car c'est un sujet qui me trotte en tête depuis quelques temps, et si qq1 l'a déjà fait, autant ne pas réinventer la roue

Discussions similaires

  1. probleme implémentation algorithme FFT
    Par philo69 dans le forum C
    Réponses: 15
    Dernier message: 08/05/2007, 17h33
  2. [Traitement du signal] Convolution en passant par la FFT
    Par parp1 dans le forum Traitement du signal
    Réponses: 8
    Dernier message: 25/04/2006, 13h26
  3. [Numarray]Convolution par FFT
    Par parp1 dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 22/04/2006, 09h45
  4. FFT inverse, algorithme adapté ?
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 09/04/2006, 17h08
  5. Algos pour Convolution et FFT
    Par mensouille dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 17/08/2005, 18h18

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