示例#1
0
文件: music.py 项目: naegawa/SimMch
def compute_music_power(wav_filename,tf_config,
		normalize_factor,
		fftLen,stft_step,
		min_freq,max_freq,src_num,
		music_win_size,music_step):
	setting={}
	# read wav
	print "... reading", wav_filename
	wav_data=simmch.read_mch_wave(wav_filename)
	wav=wav_data["wav"]/normalize_factor
	fs=wav_data["framerate"]
	# print info
	print "# #channels : ", wav_data["nchannels"]
	setting["nchannels"]=wav_data["nchannels"]
	print "# sample size : ", wav.shape[1]
	setting["nsamples"]=wav.shape[1]
	print "# sampling rate : ", fs,"Hz"
	setting["framerate"]=fs
	print "# duration : ", wav_data["duration"],"sec"
	setting["duration"]=wav_data["duration"]

	# reading data
	df=fs*1.0/fftLen
	# cutoff bin
	min_freq_bin=int(np.ceil(min_freq/df))
	max_freq_bin=int(np.floor(max_freq/df))
	print "# min freq. :",min_freq_bin*df , "Hz"
	setting["min_freq"]=min_freq_bin*df
	print "# max freq. :",max_freq_bin*df , "Hz"
	setting["max_freq"]=max_freq_bin*df
	print "# freq. step:",df, "Hz"
	setting["freq_step"]=df
	print "# min freq. bin index:",min_freq_bin
	print "# max freq. bin index:",max_freq_bin

	# apply STFT
	win = hamming(fftLen) # ハミング窓
	spec=simmch.stft_mch(wav,win,stft_step)
	spec_m=spec[:,:,min_freq_bin:max_freq_bin]
	# apply MUSIC method
	## power[frame, freq, direction_id]
	print "# src_num:",src_num
	setting["src_num"]=src_num
	setting["step_ms"]=1000.0/fs*stft_step
	setting["music_step_ms"]=1000.0/fs*stft_step*music_step
	power=compute_music_spec(spec_m,src_num,tf_config,df,min_freq_bin,
			win_size=music_win_size,
			step=music_step)
	p=np.sum(np.real(power),axis=1)
	m_power=10*np.log10(p+1.0)
	m_full_power=10*np.log10(np.real(power)+1.0)
	return spec,m_power,m_full_power,setting
示例#2
0
	step = 160 #fftLen / 4
	df=fs1*1.0/fftLen
	# cutoff bin
	min_freq=0
	max_freq=10000
	min_freq_bin=int(np.ceil(min_freq/df))
	max_freq_bin=int(np.floor(max_freq/df))
	sidelobe_freq_bin=int(np.floor(2000/df))
	print "# min freq:",min_freq
	print "# max freq:",max_freq
	print "# min fft bin:",min_freq_bin
	print "# max fft bin:",max_freq_bin

	# STFT
	win = hamming(fftLen) # ハミング窓
	spec1=simmch.stft_mch(wav1,win,step)
	spec2=simmch.stft_mch(wav2,win,step)
	##
	##
	nframe1=spec1.shape[1]
	nframe2=spec2.shape[1]
	nframe=min(nframe1,nframe2)
	spec1_temp=spec1[:,0:nframe,min_freq_bin:max_freq_bin]
	spec2_temp=spec2[:,0:nframe,min_freq_bin:max_freq_bin]

	if options.noise is not None:
		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)
示例#3
0
    step = 160  #fftLen / 4
    df = fs1 * 1.0 / fftLen
    # cutoff bin
    min_freq = 0
    max_freq = 10000
    min_freq_bin = int(np.ceil(min_freq / df))
    max_freq_bin = int(np.floor(max_freq / df))
    sidelobe_freq_bin = int(np.floor(2000 / df))
    print "# min freq:", min_freq
    print "# max freq:", max_freq
    print "# min fft bin:", min_freq_bin
    print "# max fft bin:", max_freq_bin

    # STFT
    win = hamming(fftLen)  # ハミング窓
    spec1 = simmch.stft_mch(wav1, win, step)
    spec2 = simmch.stft_mch(wav2, win, step)
    ##
    ##
    nframe1 = spec1.shape[1]
    nframe2 = spec2.shape[1]
    nframe = min(nframe1, nframe2)
    spec1_temp = spec1[:, 0:nframe, min_freq_bin:max_freq_bin]
    spec2_temp = spec2[:, 0:nframe, min_freq_bin:max_freq_bin]

    if options.noise is not None:
        w = wiener_filter_eigen(spec1_temp,
                                spec2_temp,
                                win_size=nframe,
                                r_step=1)
        print "# filter:", w.shape