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

Calcul scientifique Python Discussion :

Filtre FFT basse fréquences


Sujet :

Calcul scientifique Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Points : 35
    Points
    35
    Par défaut Filtre FFT basse fréquences
    Bonjour ,

    Je dispose de courbes assez bruitées qui tracent l'evolution de la distance entre atomes au cours du temps. Je cherche a supprimer un bruit de haute frequence correspondant a la vibration des atomes. J'aimerais ainsi utiliser les transformées de fourier pour supprimer ce bruit.

    J'ai cherché sur le net pour des programmes faisant cela , mais je tombe souvent sur des programmes WINDOWS et forcément payants, ou des programmes utilisant cette technique mais pour des images.

    Je me suis donc mis a Scipy qui permet de faire les operations necessaires , mais je n'ai toujours réussi a éffectuer le filtre. En gros je filtre n'importe quoi

    Voici ce que j'ai réussi a faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    signal = fft(data) # Mes données
    signal = signal[:-10] # Suppression des plus hautres frequences
    signal = signal[10:] # suppression des plus hautes frequences négatives:w
     
    # Je formatte le tableau pour n'avoir que les reels
    plot (nouvelle_courbe)
    show()
    Est ce que quelqu'un pourrait m'expliquer ce que ce script fait , car au niveau des courbes ca ne supprime pas dutout le bruit , et si c'est possible , pourriez vous m'indiquer la démarche a suivre ?

    Merci !



    [/CODE]

  2. #2
    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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Déjà, tu ne peux pas faire ça sur le spectre directement, tu vas au devant de gros problèmes de repliements si tu comptes utiliser cette solution en temps réel. Sinon, on ne peut pas savoir du tout pourquoi ça ne marche pas puisque tu ne donnes pas le code !

    Je te conseille plutôt de passer par un filtre FIR, un butterworth ou autre, pour commencer.

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Points : 35
    Points
    35
    Par défaut
    Merci pour ta réponse,

    Les distances que je mesure ne sont pâs en temps réel , je dispose de séries temporelles pré calculées.
    Concernant le code , voici tout ce que j'ai scripté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    f = open("tmp.dat","r")
    line = file.readline()
    data = []
    while (len(line)> 0 ):
        line = line.split()
        data.append(line[1])
     
    signal = fft(data)
    signal = signal[:20]
    signal = signal[20:]
    smoothed = ifft(signal)
     
    result = []
    for i in smoothed :
        result.append(abs(real(i)))
    plot(result)
    Le but de mon script est la suppression des tres hautres fréquences pour mieux interpréter les variations de distances significatives. Je viens de regarder les filtres que tu m'as indiqué, penses tu qu'ils soient plus performants que les FFT pour mon étude ?

    Merci

  4. #4
    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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    C'est quoi smoothed ? Et pourquoi il y a un abs() et un real() ? Si ton filtrage fonctionne (c'est possible, la seule chose, c'est que tu convolue ton signal avec un sinus cardinal, donc tu auras des signaux réels mais potentiellement négatifs), tu ne dois utiliser ni l'un ni l'autre.

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Points : 35
    Points
    35
    Par défaut
    Petiute erreur dans le copié collé , je corrige ...
    Pour le real() , il sert a supprimer la composante imaginaire , en effet le résultat de ifft() donne un tableau contenant des chiffres complexes ou l'imaginaire est quasi nul : "0.81727678 +1.30890182e-15j"
    Pour le abs() , c'est en m'inspirant des scripts google que j'ai pu trouver ... en effet ca sert a rien :p

    Je suis en train de faire des tests , je vous tiens au courant , merci !!

  6. #6
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Points : 35
    Points
    35
    Par défaut
    D'accord .... Probleme suivant : comment passer d'un système complexe a un système réel sans perdre d'infos ? Et si je désire supprimer les hautes fréquences , comment dois-je réaliser mon filtre ? En effet je pensais que fft(signal) donnerai les signaux classés mais ce n'est pas le cas ....

  7. #7
    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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Les signaux classés ??? C'est quoi ça ?

    Comme indiqué dans mon premier message, effectue un filtrage passe-bas classique, et selon les résultats, essaie plusieurs techniques.

  8. #8
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Points : 35
    Points
    35
    Par défaut
    Signaux classés, j'entendais par la que les premieres données du tableau étaient les fréquences les plus basses , et les dernieres les plus hautes , mais ce n'est pas le cas ...

    Pour le filtre passe bas , je suis en train de faire quelques recherches, ca n'as pas l'air évident ...
    Sinon, je ne comprend pas les données de fft() obtenues , je ne sais pas quoi filtrer ... a quoi correspondent les données réelles et imaginaires ? Je suis en biologie, les transformées de fourrier et les équiations m'échappent un peu ..
    Merci

  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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par johnkhm Voir le message
    Signaux classés, j'entendais par la que les premieres données du tableau étaient les fréquences les plus basses , et les dernieres les plus hautes , mais ce n'est pas le cas ...
    C'est classé. Toujours. En revanche, le signal fourni est symétrique, c'est sans doute ça qui te cause des soucis, et à ce moment, je te conseille de te plonger dans un cours de traitement du signal
    Citation Envoyé par johnkhm Voir le message
    Pour le filtre passe bas , je suis en train de faire quelques recherches, ca n'as pas l'air évident ...
    Sinon, je ne comprend pas les données de fft() obtenues , je ne sais pas quoi filtrer ... a quoi correspondent les données réelles et imaginaires ? Je suis en biologie, les transformées de fourrier et les équiations m'échappent un peu ..
    Merci
    Ce sont des données complexes qui correspondent à l'amplitude de chaque composante e^iwt. Tout ce genre de choses est expliqué dans un cours de TS.

  10. #10
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Points : 35
    Points
    35
    Par défaut
    Bon ca y est je suis sur la bonne voir mé un phénomène mystique est survenu , j'ai crée un nouveau post car c juste par rapport au FFT

    j'essaierai de faire un petit tuto ... si ca peut aider ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. fréquence plus basse
    Par looping dans le forum Composants
    Réponses: 2
    Dernier message: 16/03/2008, 21h10
  2. Calcul de fréquence via FFT
    Par jericho dans le forum MATLAB
    Réponses: 2
    Dernier message: 21/02/2008, 10h14
  3. Fréquence de rafraichissement trop basse ?
    Par hsazerty dans le forum Mandriva / Mageia
    Réponses: 3
    Dernier message: 15/12/2007, 09h25
  4. [Signal] FFT : calcul de la fréquence et du déphasage *exacts*
    Par ol9245 dans le forum Traitement du signal
    Réponses: 21
    Dernier message: 18/04/2007, 16h15
  5. Réaliser un fft avec la fréquence
    Par esipage dans le forum Signal
    Réponses: 1
    Dernier message: 11/09/2006, 08h55

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