def apply_tf_spec(data, fftLen, step, tf_config, src_index, noise_amp=0): win = hamming(fftLen) # ハミング窓 ### STFT spectrogram = simmch.stft(data, win, step) spec = spectrogram[:, :fftLen / 2 + 1] #spec = [4,3,2,1,2*,3*] ### Apply TF tf = tf_config["tf"][src_index] #print "# position:",tf["position"] pos = tf["position"] th = math.atan2(pos[1], pos[0]) # -pi ~ pi #print "# theta(deg):",th/math.pi*180 out_data = [] for mic_index in xrange(tf["mat"].shape[0]): tf_mono = tf["mat"][mic_index] #print "# src spectrogram:",spec.shape #print "# tf spectrogram:",tf_mono.shape tf_spec = spec * tf_mono spec_c = np.conjugate(tf_spec[:, :0:-1]) out_spec = np.c_[tf_spec, spec_c[:, 1:]] noise_spec = np.zeros_like(out_spec) v_make_noise = np.vectorize(make_noise) noise_spec = v_make_noise(noise_spec) out_spec = out_spec + noise_amp * noise_spec out_data.append(out_spec) mch_data = np.array(out_data) return mch_data
def apply_tf_spec(data,fftLen, step,tf_config,src_index,noise_amp=0): win = hamming(fftLen) # ハミング窓 ### STFT spectrogram = simmch.stft(data, win, step) spec=spectrogram[:, : fftLen / 2 + 1] #spec = [4,3,2,1,2*,3*] ### Apply TF tf=tf_config["tf"][src_index] #print "# position:",tf["position"] pos=tf["position"] th=math.atan2(pos[1],pos[0])# -pi ~ pi #print "# theta(deg):",th/math.pi*180 out_data=[] for mic_index in xrange(tf["mat"].shape[0]): tf_mono=tf["mat"][mic_index] #print "# src spectrogram:",spec.shape #print "# tf spectrogram:",tf_mono.shape tf_spec=spec*tf_mono spec_c=np.conjugate(tf_spec[:,:0:-1]) out_spec=np.c_[tf_spec,spec_c[:,1:]] noise_spec=np.zeros_like(out_spec) v_make_noise = np.vectorize(make_noise) noise_spec=v_make_noise(noise_spec) out_spec=out_spec+noise_amp*noise_spec out_data.append(out_spec) mch_data=np.array(out_data) return mch_data
# reading data data = wr.readframes(wr.getnframes()) nch=wr.getnchannels() wavdata = np.frombuffer(data, dtype= "int16") fs=wr.getframerate() mono_wavdata = wavdata[target_ch::nch] wr.close() data = mono_wavdata.astype(float64)/2.0**15 fftLen = 512 step = fftLen / 4 win = hamming(fftLen) #win =[1.0]*fftLen ### STFT spectrogram = simmch.stft(data, win, step) w_data = apply_window(data, win, step) w_sum=np.sum(w_data**2,axis=1) spec=spectrogram[:, : fftLen / 2 + 1] full_spec=simmch.make_full_spectrogram(spec) s_sum=np.mean((np.abs(spectrogram)**2),axis=1) print "wav power:",w_sum print "wav #frames:",w_sum.shape print "spec power:",s_sum print "spec #frames:",s_sum.shape rate=s_sum/w_sum print "rate:",rate diff=(s_sum-w_sum) print "square error:",np.mean(diff**2)