# ISTFT recons = simmch.istft_mch(out_spec, win, step) simmch.save_mch_wave(recons * 32767.0, "recons_eigen.wav") quit() #print spec1_temp.shape #print spec2_temp.shape #win_size=50 # spec[ch, frame, freq_bin] # w[ch2,ch1] w, _, _ = wiener_filter_freq(spec1_temp, spec2_temp, win_size=nframe, r_step=1) print "# filter:", w.shape if options.tf is not None: tf_config = read_hark_tf(options.tf) if (len(w.shape) == 3): for i in xrange(len(w.shape)): save_sidelobe("sidelobe_wiener%i.png" % (i + 1), tf_config, w[:, :, i], sidelobe_freq_bin) else: save_sidelobe("sidelobe_wiener.png", tf_config, w, sidelobe_freq_bin) # filter out_spec = apply_filter_freq(spec1_temp, w) # ISTFT recons = simmch.istft_mch(out_spec, win, step) #recons.reshape((recons.shape[0],1)) simmch.save_mch_wave(recons * 32767.0, "recons_wiener.wav")
w=wiener_filter_eigen(spec1_temp,spec2_temp,win_size=nframe,r_step=1) print "# filter:",w.shape out_spec=apply_filter_eigen(spec1_temp,w) # ISTFT recons=simmch.istft_mch(out_spec, win, step) simmch.save_mch_wave(recons*32767.0,"recons_eigen.wav") quit() #print spec1_temp.shape #print spec2_temp.shape #win_size=50 # spec[ch, frame, freq_bin] # w[ch2,ch1] w,_,_=wiener_filter_freq(spec1_temp,spec2_temp,win_size=nframe,r_step=1) print "# filter:",w.shape if options.tf is not None: tf_config=read_hark_tf(options.tf) if(len(w.shape)==3): for i in xrange(len(w.shape)): save_sidelobe("sidelobe_wiener%i.png"%(i+1),tf_config,w[:,:,i],sidelobe_freq_bin) else: save_sidelobe("sidelobe_wiener.png",tf_config,w,sidelobe_freq_bin) # filter out_spec=apply_filter_freq(spec1_temp,w) # ISTFT recons=simmch.istft_mch(out_spec, win, step) #recons.reshape((recons.shape[0],1)) simmch.save_mch_wave(recons*32767.0,"recons_wiener.wav")
nch=spec1.shape[0] nframe=spec1.shape[1] nfreq_bin=spec1.shape[2] sidelobe_freq_bin=int(np.floor(2000/df)) ### DS beamformer & blocked signals ds_freq=np.zeros((nframe,nfreq_bin),dtype=complex) blocked_freq=np.zeros((spec1.shape[0]-1,spec1.shape[1],spec1.shape[2]),dtype=complex) for t in xrange(spec1.shape[1]): for freq_bin in xrange(spec1.shape[2]): blocked_freq[:,t,freq_bin]=B.dot(A[freq_bin,:,:].dot(spec1[:,t,freq_bin])) ds_freq[t,freq_bin]=np.dot(a_vec[freq_bin,:],spec1[:,t,freq_bin])/nch ds_freq=np.array([ds_freq]) ### GSC for DS beamformer w_a,_,_=wiener_filter.wiener_filter_freq(blocked_freq,ds_freq) y_ds=wiener_filter.apply_filter_freq(blocked_freq,w_a) save_sidelobe("sidelobe_ds.png",tf_config,a_vec,sidelobe_freq_bin) w_gsc_ds=np.zeros((nfreq_bin,nch),dtype=complex) for freq_bin in xrange(nfreq_bin): w_gsc_ds[freq_bin,:]=a_vec[freq_bin,:]-w_a[freq_bin,:].dot(B.dot(A[freq_bin,:,:])) save_sidelobe("sidelobe_gsc_ds.png",tf_config,w_gsc_ds,sidelobe_freq_bin,clear_flag=False) ### MV beamformer #rz=estimate_correlation(spec1,spec1,nframe,1) rz=estimate_self_correlation(spec1) #rz=np.array([rz]) w_mv=np.zeros((nfreq_bin,nch),dtype=complex) for freq_bin in xrange(nfreq_bin): rz_inv=np.linalg.inv(rz[0,freq_bin,:,:]) av=a_vec[freq_bin,:].reshape((nch,1)) temp=rz_inv.dot(av) po=av.T.conj().dot(temp) #w[freq_bin,:]=temp.dot(np.linalg.inv(po))