1. #1
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : janvier 2017
    Messages : 69
    Points : 0
    Points
    0

    Par défaut Implémentation rapide transformation de Fourier

    Bonjour,

    pour un logiciel de reconnaissance acoustique écrit en c++ je dois à partir du spectre d'un échantillons sonore de quelques dizaines de microsecondes passer du domaine temporel à celui fréquenciel. J'ai déjà la bibliothèque pour l'obtention des tableaux d'échantillons il me reste à tranformer cela. J'aimerais ne pas réécrire tout un programme de tranformation de Fourier auriez-vous une solution à me proposer ?

  2. #2
    Membre expert
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : mai 2002
    Messages : 2 449
    Points : 3 850
    Points
    3 850

    Par défaut

    salut,

    il existe une multitude d'implementation de la transformation de fourrier en c++
    un exemple sur sourceforge
    a toi de voir ce qui te convient le mieux
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    7 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 7 200
    Points : 15 218
    Points
    15 218

    Par défaut

    Attention :
    FFTW is a C subroutine library for computing the discrete Fourier transform (DFT)
    C'est pas la transformée de Fourier,mais une dérivée, je pense. Donc résultats peut-être différents.

    Si un matheux peut confirmer ou infirmer.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : janvier 2017
    Messages : 69
    Points : 0
    Points
    0

    Par défaut

    Je pense que c'est bon, la documentation http://www.fftw.org/fftw3.pdf à partir de la page 7 explique notament la tranformation de fourier rapide (celle dont j'ai besoin ?).

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    5 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2004
    Messages : 5 366
    Points : 14 992
    Points
    14 992

    Par défaut

    http://www.fftw.org/ est je crois la référence dans le domaine...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Membre chevronné
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    avril 2016
    Messages
    451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : avril 2016
    Messages : 451
    Points : 1 960
    Points
    1 960

    Par défaut

    Citation Envoyé par chrtophe Voir le message
    C'est pas la transformée de Fourier,mais une dérivée, je pense. Donc r&sultats peut-être différents.

    Si un matheux peut confirmer ou infirmer.
    Ce n'est pas la dérivée.
    Et c'est bien la transformée de Fourier discrète qu'il doit utiliser.

    Grossièrement :
    La transformée de Fourier normale transforme une fonction en une autre fonction. La formule fait intervenir une intégrale qui va de moins l'infini à plus l'infini.
    Mais, en traitement du signal, on a un signal limité dans le temps. En plus, ce que l'on récupère du signal, ce n'est pas le signal continu, mais un signal échantillonné, c'est-à-dire une succession de valeurs.
    Du coup, à la place de l'intégrale, on fait une somme. On tombe alors sur la transformée de Fourier discrète.
    La transformée de Fourier rapide est un algorithme qui permet de calculer rapidement la transformée de Fourier discrète.

  7. #7
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Ancien développeur matériel électronique (Hard/Soft)
    Inscrit en
    avril 2002
    Messages
    1 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ancien développeur matériel électronique (Hard/Soft)
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 1 790
    Points : 5 666
    Points
    5 666

    Par défaut

    Citation Envoyé par JolyLoic Voir le message
    http://www.fftw.org/ est je crois la référence dans le domaine...
    C'est en effet ce qui se dit.
    Par contre, je trouve que la Transformé de Fourier la plus Rapide de l'Ouest à aussi la doc la plus pourrie de l'Ouest ! Mais le nom modeste qu'a trouvé l'auteur de cette bibliothèque est splendide, j'adore

    C'est cette fonction là dont tu as besoin fftw_plan fftw_plan_dft_r2c_1d, un exemple ici https://www.developpez.net/forums/d8...tw/#post572541 (c'est aussi cette exemple que j'avais essayé)
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  8. #8
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : janvier 2017
    Messages : 69
    Points : 0
    Points
    0

    Par défaut

    Re,

    mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <iostream>
    #include <fftw3.h>
    int main(){
    return 0;}
    la commande de compilation utilisée: g++ -std=c++14 sampling.cpp -o sampling -L /cd/home/libc/Desktop/fftw-3.3.6-pl2/api -lfftw3 -lm

    j'obtiens avec ça un message d'erreur: sampling.cpp:9:19: fatal error: fftw3.h: No such file or directory

    Quelqu'un aurait la solution ?

  9. #9
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    4 948
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 4 948
    Points : 16 429
    Points
    16 429

    Par défaut

    Le compilateur te dit qu'il n'y a pas de fichier "fftw3.h".
    Qu'en déduis-tu?

    Comment fonctionne #include?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  10. #10
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : janvier 2017
    Messages : 69
    Points : 0
    Points
    0

    Par défaut

    La bibliothèque se trouve bien au chemin indiqué, comment fonctionne #include ?

  11. #11
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    4 948
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 4 948
    Points : 16 429
    Points
    16 429

    Par défaut

    La bibliothèque y est, c'est bien: l'éditeur de liens devrait pouvoir s'en sortir.
    Mais là, ce n'est pas le problème.

    Je t'ai demandé en premier ce que fait #include. Regarde par exemple sur cppreference.com.
    De même, que fait l'option -L de g++? Regarde man g++ (sur internet, c'est un très grand man)

    Lorsque le préprocesseur rencontre #include "bidule" (sur un début de ligne, aux blancs près), il remplace cette directive (qui lui est destinée) par le contenu du fichier désigné par bidule, et la prochaine ligne qu'il regarde est la première qu'il vient d'insérer.

    La différence entre "" et <> est dans la liste des endroits qu'il fouille pour trouver le fichier.
    Liste qu'il est parfaitement possible de compléter avec l'option -I de g++.

    -L ajoute des chemins à la liste explorée par l'éditeur de liens, pour trouver les bibliothèques indiquées par -l.

    Morale de l'histoire:
    On n'utilise pas un outil sans savoir ce qu'il fait, c'est-à-dire sans avoir lu la documentation.
    C'est valable pour #include, comme pour g++.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  12. #12
    Rédacteur/Modérateur

    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    4 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 4 564
    Points : 18 255
    Points
    18 255

    Par défaut

    Citation Envoyé par Ubuntuhuit Voir le message
    La bibliothèque se trouve bien au chemin indiqué, comment fonctionne #include ?
    Quel chemin ? /cd/home/libc/Desktop/fftw-3.3.6-pl2/api ? Tu ajoutes ce dossier uniquement à l'éditeur de lien, pour trouver les .so/.a, il n'est pas ajouté à l'include_path, ça c'est l'option -I
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  13. #13
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : janvier 2017
    Messages : 69
    Points : 0
    Points
    0

    Par défaut

    Si c'est ça alors la compilation devrait normalement aboutir, quel pourrait-être l'erreur ?

    Ceci: g++ -std=c++14 sampling.cpp -o sampling -L /cd/home/libc/Desktop/fftw-3.3.6-pl2/api -lfftw3 -lm devrait fonctionnner avec -lfftw3 -lm comme linkers.

  14. #14
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    4 948
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 4 948
    Points : 16 429
    Points
    16 429

    Par défaut

    Autre questions pour t'aider à trouver ta réponse:

    Qu'est-ce qu'un fichier .so?
    Qu'est-ce qu'un fichier .h?
    Qu'est une bibliothèque?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  15. #15
    Rédacteur/Modérateur

    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    4 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 4 564
    Points : 18 255
    Points
    18 255

    Par défaut

    Citation Envoyé par Ubuntuhuit Voir le message
    Si c'est ça alors la compilation devrait normalement aboutir, quel pourrait-être l'erreur ?

    Ceci: g++ -std=c++14 sampling.cpp -o sampling -L /cd/home/libc/Desktop/fftw-3.3.6-pl2/api -lfftw3 -lm devrait fonctionnner avec -lfftw3 -lm comme linkers.
    Le fait qu'on te parle de l'option -I et que tu l'ajoutes toujours pas, c'est voulu ou bien ?
    En refaisant un truc qui marche pas, forcément ça marche toujours pas.
    Tu sais ce que c'est le linker ? Comment marche la chaîne de compilation en C et C++ ? Pourquoi ne pas utiliser un IDE ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  16. #16
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : janvier 2017
    Messages : 69
    Points : 0
    Points
    0

    Par défaut

    De cette façon: g++ -std=c++14 sampling.cpp -o sampling -L /cd/home/libc/Desktop/fftw-3.3.6-pl2/api -lfftw3.h -lfftw3 -lm -lsfml-audi ? J'obtiens le même résultat. Également je ne trouve aucun fichier .so dans le dossier contenant la bibliothèque.

  17. #17
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    4 948
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 4 948
    Points : 16 429
    Points
    16 429

    Par défaut

    Tu copieras dix fois "l'option de g++ qui gère les chemins d'inclusions est -I (le i majuscule), comme Include path".

    Puis, tu l'utiliseras -Ile/chemin/qui/va/bien.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  18. #18
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : janvier 2017
    Messages : 69
    Points : 0
    Points
    0

    Par défaut

    Ceci: g++ -std=c++14 sampling.cpp -o sampling -I/home/libc/Desktop/fftw-3.3.6-pl2/api -lfftw3 -lm semble marcher et me donne les messages d'erreur suivants /usr/bin/ld: cannot find -lfftw3 //// /usr/bin/ld: cannot find -lsfml-audi //// collect2: error: ld returned 1 exit status.

  19. #19
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    4 948
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 4 948
    Points : 16 429
    Points
    16 429

    Par défaut

    -I ne sert que pendant la compilation proprement dite, et -L pour l'édition des liens. Les deux mécanismes sont indépendants, et généralement nécessaires.

    Je te suggère le fonctionnement de la compilation en C++.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  20. #20
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : janvier 2017
    Messages : 69
    Points : 0
    Points
    0

    Par défaut

    Ceci: g++ -std=c++14 sampling.cpp -o sampling -I/home/libc/Desktop/fftw-3.3.6-pl2/api -lfftw3 -lm est correct mais je dois d'abord régler -L ? Voilà une commande essayée: g++ -L/home/libc/Desktop/fftw-3.3.6-pl2/api et son message d'erreur: gcc: fatal error: no input files.

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/11/2014, 05h25
  2. Utilisation de la Transformée de Fourier Rapide
    Par TigZox dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 24/04/2012, 12h32
  3. La Transformée de Fourier Rapide
    Par babakaber dans le forum Signal
    Réponses: 3
    Dernier message: 01/02/2012, 17h42
  4. La transformée de Fourier rapide (FFT)
    Par driss80 dans le forum Fortran
    Réponses: 5
    Dernier message: 25/02/2008, 13h43
  5. Transformée de fourier rapide
    Par Aida dans le forum Général Algorithmique
    Réponses: 23
    Dernier message: 03/01/2006, 15h14

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