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

MATLAB Discussion :

Intégration d'un jeu de données


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 26
    Points
    26
    Par défaut Intégration d'un jeu de données
    Bonjour,

    J'ai un vecteur v contenant des données, de période N+1. Le vecteur v contient lui les N éléments d'une période. Je souhaite pouvoir intégrer ce vecteur. Étant donné la périodicité, je me tourne vers la fft (ou plutôt la dft), mais je dois dire que débutant en Matlab, je ne suis pas tout à fait habitué à l'utiliser "numériquement".

    Je compte utiliser la formule u~ = (1/ik)v~, où les ~ indiquent qu'on se place dans l'espace des coefficients.

    Ma première idée fut d'écrire un code du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    u = fft(v);
     
    for k=1:length(u)
        if(k==1)
            u(k) = 0
        else 
            u(k) = u(k)./(1i*(k-1));
        end
    end
     
    u = ifft(u);
    Évidemment, ça ne marche pas. D'après ce que j'ai compris, il y a quelques subtilités quant à la façon dont matlab "range" les éléments issus de la fft (il me semble que les k, si je ne m'abuse, doivent varier de -N/2 à N/2: où sont "rangés" les élements correspondant à des k négatifs ?), mais mes recherches sur internet n'ont fait qu'embrouiller mon esprit : fftshift, ifftshift, fft, fft2, fliplr, flipup j'en passe et des meilleurs...

    Merci de votre aide!

    PS: je n'ai pas mis ce message en catégorie signal car il ne s'agit en fait pas du tout de traitement de signal. Cela dit, comme ça y ressemble, mon message y aurait peut être plus sa place...

  2. #2
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Bon, j'ai un peu avancé, j'arrive à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    N = length(v);
    U = fft([v(N/2+1:N)' v(1:N/2)']);          
    %U = ifftshift(U);
    for k=1:N
        if(k==N/2+1)
            U(k) = 0;
        else
            U(k) = (1/(1i*(-N/2-1+k))) *U(k);
        end
    end
    %U=ifft(fftshift(U));
    U = (N)*ifft(U);
    Cela dit, le résultat obtenu n'est pas tout à fait le résultat escompté... (mais je ne suis pas sur à 100% des données dans le vecteur v).

    L'erreur se cache t'elle dans ma façon de calculer U ? Quid du coefficient devant le ifft ? (j'ai mis N, mais ce n'est certainement pas ça).

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    La syntaxe exacte avec fft, fftshift et ifftshift est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    U = fft(v);
    U_shift = fftshift(U);
    % ...
    U = ifftshift(U_shift);
    v = real(ifft(U));
    Je te conseille de revoir ta formule d'intégration: il manque un 2*pi, et cela s'applique sur les fréquences et non les coefficients.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    Bonjour,

    La syntaxe exacte avec fft, fftshift et ifftshift est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    U = fft(v);
    U_shift = fftshift(U);
    % ...
    U = ifftshift(U_shift);
    v = real(ifft(U));
    Je te conseille de revoir ta formule d'intégration: il manque un 2*pi, et cela s'applique sur les fréquences et non les coefficients.
    Merci de ta réponse. Cependant, je ne vois pas ce que tu veux dire par " cela s'applique sur les fréquences et non les coefficients": pourrais-tu me dire où dois se situer le 2*pi dans le code ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Cf formule que tu devais revoir

  6. #6
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Je crois que la mésentente vient du fait que je suis habitué à travailler en pulsation, là où tu utilises la fréquence, d'où le facteur 2*pi

    Dans mon cas précis, nul besoin du facteur 2*pi, et le code précédent marche. Merci de ton aide!

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

Discussions similaires

  1. [MySQL] Remettre un pointeur au début d'un jeu de données
    Par Philippe PONS dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/12/2007, 11h46
  2. Réponses: 6
    Dernier message: 13/11/2007, 10h59
  3. [Débutant] Filtre pour un jeu de données
    Par Charles D. dans le forum MATLAB
    Réponses: 1
    Dernier message: 23/10/2007, 16h23
  4. Décaler un jeu de données dans une BDD
    Par calagan99 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/05/2007, 14h58
  5. Export jeu de données uniquement
    Par jeff37 dans le forum Oracle
    Réponses: 1
    Dernier message: 01/07/2005, 18h16

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