Partage
  • Partager sur Facebook
  • Partager sur Twitter

Explication sur un programme

    17 mai 2015 à 8:57:12

    Bonjour, 

    J'étudie les transformée de Fourier discrète, j'ai vu un programme que quelqu'un a posté sur un forum et je ne le comprends pas très bien:

    # définition du vecteur temps
    dt = 1./rate
    FFT_size = 2**18
    NbEch = signal.shape[0]
     
    t = linspace(0,(NbEch-1)*dt,NbEch)
    t = t[0:FFT_size]
     
    signal = signal[0:FFT_size]# soustraction de la valeur moyenne du signal
    signal = signal - mean(signal)# la fréquence nulle ne nous intéresse pas
    signal_FFT = abs(fft(signal))  # on ne récupère que les composantes réelles
     
     
     
    signal_freq = fftfreq(signal.size, dt)
    signal_FFT = signal_FFT[0:len(signal_FFT)//2]
    signal_freq = signal_freq[0:len(signal_freq)//2]
     

    Juste avant il récupère simplement la valeur d'échantillonage dans la variable "rate" puis les valeurs des données dans le vecteur signal.

    Je comprends un peu près mais certaine parties restent flous.. Pourriez-vous m'éclaircir s'il vous plaît ? 

    • Partager sur Facebook
    • Partager sur Twitter
      17 mai 2015 à 9:21:22

      Salut

      quelles parties ?

      • Partager sur Facebook
      • Partager sur Twitter
        17 mai 2015 à 10:06:40

        Alors, je comprend ce qu'est dt, il représente la durée entre deux mesures par contre je ne vois deja pas très bien ce qu'est FFT_size et NbEch.

        Ensuite je ne comprends pas bien la ligne t=t[0:FFT_size] puis ensuite tout le reste me parait flous egalement...

        • Partager sur Facebook
        • Partager sur Twitter
          17 mai 2015 à 16:42:51

          Je n'ai pas vérifié mais je suppose que :
          NbEch = nombre d'éléments dans l'échantillon (shape = taille des tableaux par dimension)
          FFT_size = taille de la FFT, sur combien d'éléments est appliquée la FFT.
          t = t[0:FFT_size] = début du tableau t, regarde linspace dans la doc de numpy comment il a été créé.
          Tu devrais mettre le code complet.
          • Partager sur Facebook
          • Partager sur Twitter
            17 mai 2015 à 17:32:29

            Désolé je dois etre stupide mais comment ça début du tableau t ? En fait je ne comprend pas le "0:"

            Et ce n'est pas signal.size le nombre d'échantillon ? 

            Oui voilà le programme entier:

            from numpy import linspace, mean
            from scipy.fftpack import fft, fftfreq
            import matplotlib.pyplot as plt
            from scipy.io.wavfile import read
             
            # nom du fichier à étudier
            nomfile = open('7991.wav','r')
             
            # lecture du fichier son 8 Khz mono
            rate,signal = read(nomfile)
             
            # définition du vecteur temps
            dt = 1./rate
            FFT_size = 2**18
            NbEch = signal.shape[0]
             
            t = linspace(0,(NbEch-1)*dt,NbEch)
            t = t[0:FFT_size]
             
            signal = signal[0:FFT_size]# soustraction de la valeur moyenne du signal
            signal = signal - mean(signal)# la fréquence nulle ne nous intéresse pas
            signal_FFT = abs(fft(signal))  # on ne récupère que les composantes réelles
             
             
             
            signal_freq = fftfreq(signal.size, dt)
            signal_FFT = signal_FFT[0:len(signal_FFT)//2]
            signal_freq = signal_freq[0:len(signal_freq)//2]
             
             
            #affichage du signal
            plt.subplot(211)
            plt.title('Signal reel et son spectre')
            plt.plot(t,signal)
            plt.xlabel('Temps (s)'); plt.ylabel('Amplitude')
             
            #affichage FFT
            plt.subplot(212)
            plt.plot(signal_freq,signal_FFT)
            plt.xlabel('Frequence (Hz)'); plt.ylabel('Amplitude')
            plt.show()



            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              17 mai 2015 à 18:17:31

              C'est du slicing, ça fait partie des bases du langage Python. Je te laisse faire une recherche sur ce terme, tu trouvera toutes les explications dont tu as besoin.

              • Partager sur Facebook
              • Partager sur Twitter
                17 mai 2015 à 20:49:28

                -Tortue-ojzeoi a écrit:

                Et ce n'est pas signal.size le nombre d'échantillon ? 

                Regarde la doc de fftfreq() pour savoir à quoi correspond signal.size

                http://docs.scipy.org/doc/numpy/reference/generated/numpy.fft.fftfreq.html

                • Partager sur Facebook
                • Partager sur Twitter
                  17 mai 2015 à 21:23:45

                  Donc en gros si j'ai bien compris pour la ligne t = t[0:FFT_size] le vecteur temps t est integré dans t entre 0 et FFT_size c'est bien ça ? 

                  Et signal.size correspond à la taille de la fenetre ? 

                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 mai 2015 à 6:34:16

                    oui.

                    oui, la fenêtre de la FFT.

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Explication sur un programme

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown