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

Signal Discussion :

[ifft] Comment appliquer la transformée de Fourier inverse


Sujet :

Signal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 16
    Par défaut [ifft] Comment appliquer la transformée de Fourier inverse
    Bonjour tt le monde,
    j'espère que mon problème attire votre attention
    je suis bloquée dans un problème
    je suis en train de faire un filtrage dans le domaine fréquentiel.
    j'ai appliqué la FFT sur ma matrice puis j'ai multiplié le module de la matrice obtenue après la FFT par le module de mon filtre.
    Après j'ai essayé d'appliquer la IFFT mais j'ai pas obtenu le bon signal

    voilà mon code:
    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
    %filtrage dans le domaine fréquentiel
    load 'Bx'; % mon signal (une matrice 10000 lignes et 1 colonne)
    fe=83333; %fréquence d'échantillonnage
    Te=1/fe; %temps d'échantillonnage
    N=length(Bx); %longueur du vecteur champ
    N=10000;
    t=0:Te:(N-1)*Te; %vecteur temps
    t=t'; %transposé du vecteur temps
    fc=1500; %fréquence de coupure de filtre 
    wc=2*pi*fc; 
    wc1=3*wc;
    Blh=100;
    k=1/sqrt(2)/Blh;%le gain du filtre
    F=tf(k*[1/wc 0],conv([1/wc 1],[1/wc1^2 2*0.707/wc1 1]));%création du filtre 
    yf1=lsim(F,Bx*1e3,t);%filtrer la matrice
     
    %la fft%
    NFFT = 2^(nextpow2(N));
    Y = fft(Bx,NFFT)/N; 
    f = fe/2*linspace(0,1,NFFT/2);
    figure(5)
    plot(f,2*abs(Y(1:NFFT/2)))
     
    %IFFT%
    [Mf,Pf]=bode(F,2*pi*f); %calcul du module et la phase du filtre
    for ii=1:NFFT/2
      W(ii) =abs(Y(ii))* Mf(ii);%multiplication du filtre par la fft de la matrice
    end
    W1=ifft(W); % IFFT
    figure(4)
    plot(abs(W1))

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    Bonjour,
    Quelques modifications. Un doute sur W.

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    clear
    %filtrage dans le domaine fréquentiel
    %load 'Bx'; % mon signal (une matrice 10000 lignes et 1 colonne)
    fe=83333; %fréquence d'échantillonnage
    Te=1/fe; %temps d'échantillonnage
    %N=length(Bx); %longueur du vecteur champ
    %N=10000;
    %t=0:Te:(N-1)*Te; %vecteur temps
    t=(0:fe)/fe;
    N=length(t);
    N=2*floor(N/2)
    NFFT=N;
    t=t(1:N);
    Bx=sin(2*pi*1000*t)+0.1*randn(size(t));
    figure(1)
    plot(t,Bx)
    grid
    axis([0 0.01 -1 1])
    t=t'; %transposé du vecteur temps
    fc=1500; %fréquence de coupure de filtre 
    wc=2*pi*fc; 
    wc1=3*wc;
    Blh=100;
    k=1/sqrt(2)/Blh;%le gain du filtre
    F=tf(k*[1/wc 0],conv([1/wc 1],[1/wc1^2 2*0.707/wc1 1]));%création du filtre 
    yf1=lsim(F,Bx*1e3,t);%filtrer la matrice
    figure(2)
    plot(t,yf1)
    grid
    axis([0 0.01 -5 5])
    %la fft%
    %NFFT = 2^(nextpow2(N));
    %NFFT=2*floor(N/2);
    Y = fft(Bx,NFFT); 
    f = fe/2*linspace(0,1,floor(NFFT/2));
    w=(0:NFFT-1)/NFFT*fe;
    figure(3)
    step(F)
    grid
    figure(4)
    plot(f,2*abs(Y(1:NFFT/2)))
    grid
    axis([0 2e3 0 5e4])
    figure(5)
    bode(F,2*pi*f);
    grid
    %IFFT%
    [Mf,Pf]=bode(F,2*pi*f); %calcul du module et la phase du filtre
    for ii=1:NFFT/2
      W(ii) =abs(Y(ii))* Mf(ii);%multiplication du filtre par la fft de la matrice
    end
    W1=ifft(Y,NFFT); % IFFT
    figure(6)
    plot(t,real(W1))
    axis([0 0.01 -1 1])

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 16
    Par défaut
    merci beaucoup prythe pour votre réponse
    mais ce code me permet de récupérer le signal Bx, or ce que je cherche est de récupérer le signal W tel que :

    W=produit de Y et Mf

    avec:
    Y=FFT(Bx)
    Mf=module de filtre

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    Bonjour,

    Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    W1=ifft(W,NFFT); % IFFT
    figure(6)
    plot(t(100:400),real(W1(100:400))/max(Mf))
    grid

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 16
    Par défaut
    bonjour
    je m'excuse mais j'ai pas compris cette structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot(t(100:400),real(W1(100:400))/max(Mf))

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    Le plot pour limiter la durée du signal et en divisant par le max pour le normaliser.

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