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

Bibliothèques C++ Discussion :

Implémentation rapide transformation de Fourier


Sujet :

Bibliothèques C++

  1. #1
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    Janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    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
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    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 : 3 419
    Points : 5 818
    Points
    5 818
    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
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 437
    Points : 43 078
    Points
    43 078
    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 le P2V, mon article sur le cloud
    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 : 36
    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 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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 463
    Points : 16 213
    Points
    16 213
    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
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 470
    Points : 6 107
    Points
    6 107
    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
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 189
    Points : 11 571
    Points
    11 571
    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 : 36
    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
    5 189
    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 : 5 189
    Points : 17 141
    Points
    17 141
    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 : 36
    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
    5 189
    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 : 5 189
    Points : 17 141
    Points
    17 141
    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
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    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 : 36
    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
    5 189
    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 : 5 189
    Points : 17 141
    Points
    17 141
    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
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    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 : 36
    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
    5 189
    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 : 5 189
    Points : 17 141
    Points
    17 141
    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 : 36
    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
    5 189
    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 : 5 189
    Points : 17 141
    Points
    17 141
    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 : 36
    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.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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 Traitement du signal
    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