2017-03-25 32 views
1

我可以得到信號的幅度從.wav文件來了,但如何獲取信號的相位太,,, 這裏是哪裏我瀏覽.wav文件並提取信號如何獲得信號的相位fft& - 我可以在時域中獲得相位嗎?

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) 

回答

1

的複雜的頻譜包含幅度和相位。您可以通過計算絕對值來獲得幅度,並通過計算角度來獲得相位。你可以用numpy.angle()得到相位:

spectrum = fft(self.signal) 
magnitude = np.abs(spectrum) 
phase = np.angle(spectrum) 
相關問題