2017-03-25 2 views
1

i peut obtenir amplitude du signal provenant du fichier .wav, mais comment obtenir la phase de ce signal trop ,,, Voici où je l'explorer pour le fichier .wav et extraire le signalcomment obtenir la phase fft d'un signal & - puis-je obtenir le domaine de la phase dans le temps?

def browse_wav(self): 

    filepath = QtGui.QFileDialog.getOpenFileName(self, 'Single File', "C:\Users\Hanna Nabil\Documents",'*.wav') 
    f= str(filepath) 
    if f != "": 
     spf = wave.open(f, 'r') 
    import contextlib 

    with contextlib.closing(wave.open(f, 'r')) as f: 
     frames = f.getnframes() 
     rate = f.getframerate() 
     duration = frames/float(rate) 
     print "Duration is " , duration 

    # Extract Raw Audio from Wav File 
    self.signal = spf.readframes(-1) 
    self.signal = np.fromstring(self.signal, 'Int16') 
    self.fs = spf.getframerate() 
    print "Sampling Rate is " ,self.fs 

    # If Stereo 
    if spf.getnchannels() == 2: 
     print 'Just mono files' 
     sys.exit(0) 

    #self.time = np.linspace(0, len(self.signal)/fs, num=len(self.signal)) 
    self.time = np.linspace(0, duration, self.fs * duration) 

    self.xfourier = fftfreq(self.signal.size, d=self.time[1] - self.time[0]) 
    self.yfourier = np.abs(fft(self.signal)) # signal magnitude 

    self.zico = self.yfourier 
    self.cut_signal = ifft(self.zico) 

Répondre

1

Le spectre complexe contient à la fois la magnitude et la phase. Vous obtenez la magnitude en calculant la valeur absolue et vous obtenez la phase en calculant l'angle. Vous pouvez utiliser numpy.angle() pour obtenir la phase:

spectrum = fft(self.signal) 
magnitude = np.abs(spectrum) 
phase = np.angle(spectrum)