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. #21
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    Bon, pour commencer, on va essayer de te permettre de comprendre comment fonctionne un compilateur. Je crois que cela s'avère nécessaire.

    Quand on parle de "compiler" une application, on fait généralement un abus de langage, car nous devrions dire que nous faisons passer du code par "une succession d'outils" bien spécifiques, à savoir:
    1. le préprocesseur, qui va -- je vais simplifier -- s'occuper de toutes les commandes commençant par le symbole # (dont l'instruction #include <nom_de_fichier>, dont le but est de remplacer cette instruction par... le contenu du fichier nom_de_fichier)
    2. le compilateur en lui-même dont le but est de "convertir" le code d'un fichier d'implémentation (les fichiers portant l'extension .cpp, par exemple) en une succession d'instructions qui seront compréhensibles par le processeur et
    3. l'éditeur de liens d'aller chercher dans les "bibliothèques externes" le code binaire (celui qui est compréhensible par le processeur) des fonctions que l'on a pas codées, mais que l'on utilise dans notre code, afin de générer l'exécutable final.

    (je donne une version très simplifiée ici, car c'est parfois un peu plus complexe que cela )

    L'idée générale, c'est que le préprocesseur et l'éditeur de liens ne vont pas commencer à parcourir l'ensemble du disque dur pour trouver les fichiers qui les intéressent : ils vont se "limiter" à ... un "petit" nombre de dossiers bien spécifiques.

    Certains de ces dossiers sont "utilisés par défaut", c'est à dire que tu n'as pas à les indiquer de manière systématique pour que l'éditeur de lien ou le préprocesseur aille voir dedans s'il n'y trouverait pas -- à tout hasard -- le fichier dont il a besoin.

    Mais, évidemment, si le fichier dont le préprocesseur ou l'éditeur de liens n'est pas dans un de ces "dossiers utilisés par défaut", il faut lui indiquer qu'il doit "aller voir ailleurs", en lui indiquant, bien sur, où se trouve ce "ailleurs".

    Autrement, il n'ira pas voir ailleurs de "sa propre initiative", et, comme il ne trouvera pas le fichier qui l'intéresse, il ne pourra faire qu'une seule chose : se plaindre de ne pas trouver le fichier et... arrêter le processus de compilation.

    L'éditeur de liens est, d'ailleurs, encore plus stricte que le préprocesseur, car, outre le fait qu'il va aller chercher dans des dossiers bien spécifiques, il n'ira jamais voir dans "toutes les bibliothèques qu'il trouve" si, par le plus grand des hasard, il n'y trouverait pas le code binaire dont il a besoin.

    Le préprocesseur est beaucoup plus souple à ce point de vue, car, si il trouve le fichier dont il a besoin dans un des dossiers dans lesquels il regarde, il sera content, et il copiera gentiment le contenu du fichier trouvé.

    Quand tu utilise les options de compilation -L /cd/home/libc/Desktop/fftw-3.3.6-pl2/api -lfftw3 -lm, tu t'adresse à l'éditeur de liens (et uniquement à lui) en lui disant:
    1. -L /cd/home/libc/Desktop/fftw-3.3.6-pl2/api tu trouveras peut être une bibliothèque qui pourrait t'intéresser dans le dossier /cd/home/libc/Desktop/fftw-3.3.6-pl2/api
    2. -lfftw3 tu trouveras le code binaire de certaines fonctions qui t'intéressent dans la bibliothèque nommée libfftw3.a
    3. -lm tu trouveras le code binaire de certaines fonctions qui t'intéressent dans la bibliothèque nommée libm.a

    Le tout, en espérant qu'il sera effectivement en mesure de trouver les bibliothèques nommées libfftw3.a et libm.a dans ... un des dossiers dans lesquels il ira chercher.

    Pour le préprocesseur, on change simplement les options de compilation, mais le principe est le même.

    Ainsi, si on veut lui dire qu'il doit aller voir du coté du dossier /truc/bidule/machinchose s'il ne trouverait pas par hasard un des fichiers d'en-tête qui l'intéresse, il faut le lui indiquer en utilisant l'option -I (c'est un i majuscule )

    Mais ca ne sert à rien de lui donner le dossier dans lequel se trouve libfftw3.a. Le préprocesseur s'en fout pas mal des bibliothèques: Ce que lui veut, c'est pouvoir trouver les fichiers d'en-tête (typiquement, des fichiers dont l'extension sera .h, .hpp, .hxx ou quelques autres)

    Ainsi, quand tu obtiens le message d'erreur sampling.cpp:9:19: fatal error: fftw3.h: No such file or directory, c'est... parce que le préprocesseur n'a pas été en mesure de trouver le fichier d'en-tête nommé fftw3.h. Pourquoi généralement parce qu'il n'a pas été chercher dans le dossier dans lequel se trouve ce fichier (plus rarement parce que le fichier n'existe purement et simplement pas).

    Alors, comment résoudre ce problème en commençant par déterminer où se trouve ce foutu fichier. Il est surement "quelque part" dans les dossiers que tu trouves du coté de /cd/home/libc/Desktop/fftw-3.3.6-pl2, mais il y a vraiment très peu de chances pour qu'il soit dans le dossier api.

    Personnellement, je ne serait pas surpris s'il se trouvait dans un dossier nommé ... include

    Une fois que tu auras trouvé le fichier que le préprocesseur se plaint de ne pas trouver, tu pourras indiquer le chemin qui mène au dossier qui y mène sous une forme qui ressemblera sans doute à -I/cd/home/libc/Desktop/fftw-3.3.6-pl2/include, et "tout le monde sera content:
    • le préprocesseur parce qu'il pourra trouver le fichier fftw3.h
    • l'éditeur de liens parce qu'il pourra trouver la bibliothèque libfftw3.a
    • et, le plus important : toi, parce que tu pourras obtenir ton exécutable
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  2. #22
    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
    Il y a libfftw3.la dans le dossier fftw-3.3.6-pl2, libfftw3.a n'existe pas est rien de similaire à libm.a non plus, /usr/include de contient pas fftw3.h à moins qu'il soit dans un dossier mais aucun nom évocateur m'a lancé dans cette voie, ce .h n'est pas nom plus dans /fftw-3.3.6-pl2/include ce dernier dossier n'existant simplement pas, je n'ai pu le trouver que dans /fftw-3.3.6-pl2/api.

  3. #23
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    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 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Juste pour info, la bibliothèque FFTW est dispo dans les paquets officiels de Debian (donc de Ubuntu, Mint etc...) c'est a dire que si tu passes par le gestionnaire de paquets "Synaptic" (version graphique) ou "apt" (version console) alors tout va s'installer bien comme il faut et surtout là où il faut.

    Tu t’épargnerais bien des problèmes !


    C'est la FIFFTW Fast Install Fast Fourrier Transform in the West. L'installation la plus rapide de la transformée de fourrier la plus rapide de l'Ouest.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  4. #24
    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
    Citation Envoyé par Vincent PETIT Voir le message
    c'est a dire que si tu passes par le gestionnaire de paquets "Synaptic" (version graphique) ou "apt" (version console) alors tout va s'installer bien comme il faut et surtout là où il faut.
    Quel paquet dois-je installer dans ce cas là ?

  5. #25
    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
    A priori, puisque c'est une bibliothèque, et pour écrire un programme qui s'en serve, il te faut libfftw-dev
    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

  6. #26
    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
    Unable to locate package libfftw-dev

  7. #27
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    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 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Tu ne fais pas d'effort là.... ou alors tu es tout frais sous Linux ?

    Sous Ubuntu lance le logiciel de gestion des paquets (Synaptic) et fait une recherche avec le mot FFTW.
    Synaptic va faire un tri et te proposer tous les paquets en relation avec FFTW. Souvent il n'y a pas de questions tordues a te poser, tu cliques sur les paquets les plus "parlant" et comme Synaptic connait les dépendances, il te proposera ou sélectionnera d'office les paquets associés.

    Exemple de paquets (pour la version 3 ici mais sur ta distrib tu as peut être une autre version)
    libfftw3-3: Library for computing Fast Fourier Transforms
    libfftw3-bin: Library for computing Fast Fourier Transforms - Tools
    libfftw3-bin-dbgsym: debug symbols for package libfftw3-bin
    libfftw3-dbg: Library for computing Fast Fourier Transforms - debug symbols
    libfftw3-dev: Library for computing Fast Fourier Transforms - development
    libfftw3-doc: Documentation for fftw version 3
    libfftw3-double3: Library for computing Fast Fourier Transforms - Double precision
    libfftw3-double3-dbgsym: debug symbols for package libfftw3-double3
    libfftw3-long3: Library for computing Fast Fourier Transforms - Long precision
    libfftw3-long3-dbgsym: debug symbols for package libfftw3-long3
    libfftw3-mpi-dev: MPI Library for computing Fast Fourier Transforms - development
    libfftw3-mpi3: MPI Library for computing Fast Fourier Transforms
    libfftw3-mpi3-dbgsym: debug symbols for package libfftw3-mpi3
    libfftw3-quad3: Library for computing Fast Fourier Transforms - Quad precision
    libfftw3-quad3-dbgsym: debug symbols for package libfftw3-quad3
    libfftw3-single3: Library for computing Fast Fourier Transforms - Single precision
    libfftw3-single3-dbgsym: No summary available for libfftw3-single3-dbgsym in ubuntu artful.


    Exemple chez moi (j'ai la version 2.1.5)
    Nom : Capture du 2017-05-18 22-17-41.png
Affichages : 166
Taille : 131,0 Ko
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  8. #28
    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
    J'ai bien installé cette bibliothèque et su compiler avec, maintenant c'est une autre bibliothèque qui ne répond plus: SFML qui fonctionnait parfaitement bien avant, message d'erreur: /usr/bin/ld: cannot find -lsfml-audi.

  9. #29
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    c'est peut-etre parce que le nom de cette bibliothèque est sfml-audio, et que, si tu te trompes dans le nom de la bibliothèque, l'éditeur de liens n'ira pas voir dans les bibliothèques dont "le nom est proche"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  10. #30
    Candidat au Club
    Homme Profil pro
    Développeur de logiciels scientifiques C++
    Inscrit en
    Novembre 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Brésil

    Informations professionnelles :
    Activité : Développeur de logiciels scientifiques C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 1
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Attention :


    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.
    Salut,

    Voilà des définitions pratiques:

    • Transformée de Fourier (FT): c'est la opération mathematique sur des fonctions continuées.
    • Transformée de Fourier Discrète (DFT): c'est la FT, mais sous un domaine discrèt (par example: données digitales sont informations discrèts).
    • Transformée de Fourier Rapide (FFT): c'est un algorithme de DFT.

    Alors, c'est vrai: la FT et la DFT sont différentes, mais on ne peut pas utiliser la FT dans un ordinateur (c'est un domaine discrèt).

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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