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 :

calcul rapide d'une somme


Sujet :

MATLAB

  1. #1
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 142
    Points : 94
    Points
    94
    Par défaut calcul rapide d'une somme
    Bonjour,

    J'aimerai utiliser la fft pour calculer une somme qui depend d'un paramettre. Le code ci-dessous illustre ce que je veux faire.
    Le probleme c'est que les deux calculs F1 et F2 doivent être egaux pour tout valeur de alpha0. malheuereusement, dans mon code ceci n'est vrai que dans le cas ou alpha0 = 1/2 !!

    Merci d'avance pour toute idée visant à résoudre ce problème

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    clear all; close all;clc
     
    % utilisation de la FFT pour calculer la somme : 
    % F(x) = sum u(n)*exp(-j*2*pi*alpha*n*x)
    % pour toutes le valeurs de x = -1,...,+1
     
    alpha0 = .5;
    Nfft = 2048;
    u = [1.0000;0.4762 + 0.8793i;-0.5465 + 0.8375i;-0.9967 - 0.0818i;-0.4027 - 0.9153i;0.6132 - 0.7900i];
     
    % calcul direct
    x = -1:2/(Nfft-1):1;
    F1=[];
    for indicex=1:length(x)
        somme=0;
        for n=1:length(u)
            somme=somme+u(n)*exp(-1j*2*pi*alpha0*x(indicex)*n);
        end
        F1(indicex)=somme;
    end
     
    % FFT
    F2 = fft(u,Nfft);
    F2 = [F2(Nfft/2+1:end);F2(1:Nfft/2)].'; % equivalent a fftshift(F2)
     
     
    % plot
    figure;
    semilogy(x,abs(F1));hold on
    semilogy(x,abs(F2),'r');
    xlabel('x');ylabel('F')
    legend('F1','F2')
    grid

  2. #2
    Membre du Club Avatar de legreg2
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 61
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    Le probleme c'est que les deux calculs F1 et F2 doivent être egaux pour tout valeur de alpha0
    Non, cela dépend de ce que tu fais !

    Tu as essayer de refaire la fft sous forme de somme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    F(x) = sum u(n)*exp(-j*2*pi*alpha*n*x)
    Mais dans le cas de la fft (matlab):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    F(x) = sum u(n)*exp(-j*2*pi*alpha*(n-1)*x)
    alpha=1
    Et x=0 à 1;
    De plus, le fftshift n'intervient pas

    Donc voila le code corrigé pour égaliser avec la fft :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    clear all; close all;clc
     
    % utilisation de la FFT pour calculer la somme : 
    % F(x) = sum u(n)*exp(-j*2*pi*alpha*n*x)
    % pour toutes le valeurs de x = -1,...,+1
     
    alpha0 = 1;
    Nfft = 2048;
    u = [1.0000;0.4762 + 0.8793i;-0.5465 + 0.8375i;-0.9967 - 0.0818i;-0.4027 - 0.9153i;0.6132 - 0.7900i];
     
    % calcul direct
    x = 0:1/(Nfft-1):1;
     
    F1=[];
    for indicex=1:length(x)
        somme=0;
        for n=0:length(u)-1
            somme=somme+u(n+1)*exp(-j*2*pi*alpha0*x(indicex)*n);
        end
        F1(indicex)=somme;
    end
     
    % FFT
    F2 = fft(u,Nfft);
     
    % plot
    figure;
    semilogy(x,abs(F1));hold on
    semilogy(x,abs(F2),'r');
    xlabel('x');ylabel('F')
    legend('F1','F2')
    grid
    La fft n'inclue pas le paramètre alpha. Mettre alpha signifie changer la position de x, où modifier les fréquences.

  3. #3
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 142
    Points : 94
    Points
    94
    Par défaut
    merci legreg2 pour ta réponse. J'ai enfin trouvé la solution a mon problème.
    Il suffit simplement tenir compte de l'influence de alpha0 sur la periodicité des termes a sommer qd alpha0 > 0.5 et prevoir une troncature qd ce dernier est <0.5. De cette façon F1 et F2 sont identiques pour tout alpha0.

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

Discussions similaires

  1. Calcul rapide d'une gaussienne.
    Par ToTo13 dans le forum Algorithmes et structures de données
    Réponses: 28
    Dernier message: 10/10/2010, 17h20
  2. [TCP/IP][CRC] Calcul d'une somme XOR
    Par cyrdec dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 29/05/2006, 17h42
  3. Calcul rapide d'une exponentielle ?
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 13/04/2006, 21h12
  4. access : calcul d'une somme de 0 sans valeur par défaut
    Par ericbelgium dans le forum Access
    Réponses: 6
    Dernier message: 06/10/2005, 09h05
  5. [CR 8.5] Calculer la somme d'une somme
    Par Frederic Vincent dans le forum Formules
    Réponses: 4
    Dernier message: 12/02/2004, 17h53

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