예제 #1
0
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
예제 #2
0
파일: sim_tf.py 프로젝트: naegawa/SimMch
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
예제 #3
0
	
	# 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)