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 :

Calculer la dérivée avec la transformée de Fourier


Sujet :

Traitement du signal

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Points : 14
    Points
    14
    Par défaut Calculer la dérivée avec la transformée de Fourier
    Salut,

    Auriez-vous une formule, un lien, un bout de programme, qui indique comment calculer la dérivée (ou simplement le nombre dérivé en un point) d'un signal d'après sa transformée de Fourier ?

    Merci pour l'aide à un non matheux.

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    bonjour,

    Si F = TFourier{ f(x) }, alors TFourier{ df(x)/dx } = i.2PI.k.F(k)

    Est-ce cela que tu cherchais ?

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Peut-être, mais la transcription en code de ta formule n'est pas tout à fait dans mes cordes

    Je vois que le message a été déplacé dans le forum mathématiques, ce qui n'est pas fait pour me rassurer

    En attendant, j'ai bricolé ceci à partir d'une autre formule.
    Comme je ne maîtrise pas non plus le pseudocode, je le laisse en java plutôt que de faire un méli-mélo bâtard ; ne pas tenir compte des petites idiosyncrasies :
    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
    18
    19
    20
    21
    22
    double[] dérivée(double[] réel, double[] imag) {
    	int N = réel.length;
    	double dpiN = 2d*Math.PI/(double)N;
    	double[] signal = new double[N];
    	double facteur, angle;
     
    	for(int t=0; t<N; t++){
    		for(int n=1; n<(N/2); n++) {
    			facteur = -2d*dpiN*(double)n;
    			angle = dpiN*(double)n*(double)t;
    			signal[t]  +=  facteur * ( (réel[n]*Math.sin(angle)) + (imag[n]*Math.cos(angle)) ) ;
    		}
    		/* cas n = N/2 */
    		facteur = -Math.PI;
    		angle = Math.PI*(double)t;
    		signal[t] += facteur * ( (réel[N/2]*Math.sin(angle)) + (imag[N/2]*Math.cos(angle)) ) ;
     
    		/* Applique le facteur d'échelle */
    		signal[t] /= (double)N;
    	}
    	return signal;
    }
    Ceci s'applique lorsque le signal est une série de réels purs.
    Apparemment, il faut calculer séparément le cas où n = N/2.

    En fait j'ai rien compris, mais ça a l'air de marcher d'après un affichage graphique.
    Reste à voir si ta formule conduit à un code plus simple ou plus rapide.

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par janef Voir le message
    Ceci s'applique lorsque le signal est une série de réels purs.
    Apparemment, il faut calculer séparément le cas où n = N/2.

    En fait j'ai rien compris, mais ça a l'air de marcher d'après un affichage graphique.
    Edit : après relecture du code, je pense que les parametres de la fonction doivent être le résultat d'une FFT.

    En fait, pour un recréer le signal à partir des coefs de la FFT on peut écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                  N-1
    f(t) = 1/N . Somme{ reel[n]*cos(2pi.t.n/N) - imag[n]*sin(2pi.t.n/N) }
                  n=0
    et donc, il suffit de dériver (rappel: cos'(u)=-u'.sin(u) et sin'(u)=u'.cos(u))

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                   N-1
    f'(t) = 1/N . Somme{ reel[n]*-(2pi.n/N)*sin(2pi.t.n/N) - imag[n]*(2pi.n/N)*cos(2pi.t.n/N) }
                   n=0
     
                   N-1
    f'(t) = 1/N . Somme{  -(2pi.n/N).(reel[n]*sin(2pi.t.n/N) + imag[n]*cos(2pi.t.n/N)) }
                   n=0
    Dans le cas d'un signal réel, on a coef[k]=coef[N-k]. On peut donc se contenter de calculer la somme entre 0 et N/2 puis la multiplier par 2. La seule exception etant pour k=N/2 si N est pair.

    Reste à voir si ta formule conduit à un code plus simple ou plus rapide.
    Non, c'est la meme formule. Elle est juste ecrite sous forme complexe.

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Ah, ben oui, alors, tout s'éclaire.

    Merci d'avoir expliqué et... confirmé que la méthode est correcte

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/04/2011, 21h10
  2. inverse de transformée de Fourier avec fenetrage et recouvrement de 50%
    Par divide dans le forum Traitement du signal
    Réponses: 1
    Dernier message: 12/10/2009, 12h18
  3. Problème avec transformée de Fourier
    Par scarabeous dans le forum C++
    Réponses: 4
    Dernier message: 07/06/2009, 14h37
  4. Transformées de Fourier avec fftw3
    Par BackInBlack dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 15/11/2008, 22h31
  5. Transformée de fourier avec un signal audio
    Par Emilie83 dans le forum Signal
    Réponses: 1
    Dernier message: 20/11/2007, 10h37

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