def reconst_music(self):
     print("NOW!! RECONSTRUCTION!!")
     print("wsize, step =", stft_wsize, ", ", stft_step)
     print(self.clist)
     global Ymean
     print("Ym:", Ymean, "  , Xmean:", np.mean(self.H.dot(self.U)))
     if len(self.fai) > 0:
         F = np.zeros((self.H.shape[0], self.U.shape[1]))
         for ks in range(self.K):
             if not self.clist[ks]:
                 continue
             Hk = np.array([self.H[:, ks] for i in range(self.U.shape[1])]).T
             Uk = np.array([self.U[ks, :] for i in range(self.H.shape[0])])
             F += Hk * Uk * self.fai[ks, :, :]
         # self.reconst = istft(F * np.exp(0 + 1j), stft_wsize, stft_step)
         self.reconst = istft(F * np.exp(0 + 1j) * self.phase, stft_wsize, stft_step)
     else:
         scale = 1
         Vphase = self.phase
         Ht = np.zeros(self.H.shape)
         Ut = np.zeros(self.U.shape)
         for ks in range(self.K):
             if self.clist[ks]:
                 Ht[:, ks] = self.H[:, ks]
                 Ut[ks, :] = self.U[ks, :]
         self.reconst = istft(scale * Ht.dot(Ut) * np.exp((0 + 1j) * Vphase), stft_wsize, stft_step)
 def lsee_mstftm(self, X):
     V = X * self.phase
     eps = np.finfo(float).eps
     for i in range(10):
         v_aud = istft(V * np.exp((0 + 1j)), stft_wsize, stft_step)
         V = stft(v_aud, stft_wsize, stft_step)
         while V.shape[1] < X.shape[1]:
             V = np.c_[V, [eps for i in range(V.shape[0])]]
         while X.shape[1] < V.shape[1]:
             X = np.c_[V, [eps for i in range(X.shape[0])]]
         V = X * V / np.abs(V)
     return V
示例#3
0
    def reconst(self):
        print("NOW!! RECONSTRUCTION!!")
        print("wsize, step =", self.stft_wsize, ", ", self.stft_step)
        print(self.clist)
        print("Ym:",self.Ymean,"  , Xmean:",np.mean(self.H.dot(self.U)))
        scale = 1
        V = self.lsee_mstftm(self.H.dot(self.U))
        self.phase = np.angle(V)
        Vphase = self.phase

        if FACTORIZE == "SimpleNMF" :
        # SimpleNMF
            Ht = np.zeros(self.H.shape)
            Ut = np.zeros(self.U.shape)
            for ks in range(self.K):
                if self.clist[ks]:
                    Ht[:, ks] = self.H[:, ks]
                    Ut[ks, :] = self.U[ks, :]
            self.recon_spectrogram = Ht.dot(Ut)
            self.recon_data = istft(scale * Ht.dot(Ut) * np.exp((0 + 1j) * Vphase), self.stft_wsize, self.stft_step)
wsize = 2048
step = 1024
input_fname = sys.argv[1]
# input_fname = QtGui.QFileDialog.getOpenFileName(self, 'Open file')
wf = wave.open(input_fname, "rb")
printWaveInfo(wf)
paras = wf.getparams()
buffer = wf.readframes(wf.getnframes())
mdata = np.frombuffer(buffer, dtype="int16")

Org_spectr = stft(mdata, wsize, step)
phase = np.angle(Org_spectr)

print("median1")
Ht = medianfilter(abs(Org_spectr),0,l)
recon1 = istft( Ht * np.exp(0 + 1j) * phase, wsize, step)

save_as_wave(filepath+"/"+fname+"median1.wav",paras,recon1)

print("median2")
Hf = medianfilter(abs(Org_spectr),1,l)
recon2 = istft( Hf * np.exp(0 + 1j) * phase, wsize, step)

save_as_wave(filepath+"/"+fname+"median2.wav",paras,recon2)

print("wener")

MH = (Ht*Ht)/((Ht*Ht)+(Hf*Hf))
MP = (Hf*Hf)/((Ht*Ht)+(Hf*Hf))

recon3 = istft( Org_spectr * MH, wsize, step)