def run(mic_observation_path, OUT_wav_path): data, rate = read_mic_wav_from_folder(mic_observation_path, max_len_sec=45) stft_arr = mic_stft.stft_arr(x_arr=data, fftsize=512) sensor_positions = mic_geometry.get_sensor_positions(hor_mic_count, vert_mic_count, dHor=dHor, dVert=dVert) source_position = mic_geometry.get_source_position(0, 0) steering_vector = mic_steering.propagation_vector_free_field( sensor_positions, source_position, N_fft=512, F_s=rate).transpose(1, 0) S_spec = gsc_griffiths_filter(stft_arr=stft_arr, d_arr=steering_vector, mic_pos='closed') # ISFFT signal sig_out = istft(S_spec.transpose(1, 0), overlap=2) # ISFFT signal sf.write(OUT_wav_path, sig_out, rate)
vert_mic_count, hor_mic_count, max_len_sec=max_len_sec) x_all_arr = x_all_arr[:, (np.int32)(_mix_start * sr):(np.int32)(_mix_end * sr)] (n_channels, n_samples) = x_all_arr.shape print("Array data read done!") print(" n_channels = ", n_channels) print(" n_samples = ", n_samples) print(" freq = ", sr) ################################################################# # 2 - Do STFT stft_arr = stft_arr(x_all_arr, fftsize=n_fft) (n_bins, n_sensors, n_frames) = stft_arr.shape print("STFT calc done!") print(" n_bins = ", n_bins) print(" n_sensors = ", n_sensors) print(" n_frames = ", n_frames) ################################################################# # 3 - Calc steering vector sensor_positions = get_sensor_positions(hor_mic_count, vert_mic_count, dHor=dHor, dVert=dVert) source_position = get_source_position(angle_h, angle_v) d_arr = propagation_vector_free_field(sensor_positions,
vert_mic_count, hor_mic_count, max_len_sec=max_len_sec) x_mix = x_all_arr[:, (np.int32)(_noise_start * sr):(np.int32)(_mix_end * sr)] (n_channels, n_samples) = x_all_arr.shape print("Array data read done!") print(" n_channels = ", n_channels) print(" n_samples = ", n_samples) print(" freq = ", sr) ################################################################# # 2 - Do STFT stft_all = stft_arr(x_all_arr, fftsize=n_fft) (n_bins, n_sensors, n_frames) = stft_all.shape stft_mix = stft_arr(x_mix, fftsize=n_fft) print("STFT calc done!") print(" n_bins = ", n_bins) print(" n_sensors = ", n_sensors) print(" n_frames = ", n_frames) ################################################################# # 3 - Calc steering vector print('Calc steering vector!') print(' (angle_h, angle_v) = ', angle_h, angle_v) sensor_positions = get_sensor_positions(hor_mic_count, vert_mic_count,
print(" freq = ", sr) x_noise_arr = x_all_arr[:, (np.int32)(_noise_start * sr):(np.int32)(_noise_end * sr)] x_mix_arr = x_all_arr[:, (np.int32)(_mix_start * sr):(np.int32)(_mix_end * sr)] x_sp_arr = x_all_arr[:, (np.int32)(_sp_start * sr):(np.int32)(_sp_end * sr)] print("Array data read done!") print(" x_noise_arr.shape = ", x_noise_arr.shape) print(" x_mix_arr.shape = ", x_mix_arr.shape) print(" x_sp_arr.shape = ", x_sp_arr.shape) ################################################################# stft_noise_arr = stft_arr(x_noise_arr, fftsize=n_fft, overlap=4) stft_mix = stft_arr(x_mix_arr, fftsize=n_fft, overlap=4) stft_sp_arr = stft_arr(x_sp_arr, fftsize=n_fft, overlap=4) (n_bins, n_sensors, n_frames) = stft_noise_arr.shape print("STFT calc done!") print(" n_bins = ", n_bins) print(" n_sensors = ", n_sensors) print(" stft_noise_arr.shape = ", stft_noise_arr.shape) print(" stft_mix.shape = ", stft_mix.shape) print(" stft_sp_arr.shape = ", stft_sp_arr.shape) ################################################################# print('Calc steering vector!') print(' (angle_h, angle_v) = ', angle_h, angle_v)
def main(): # ################################################################# # # 1.0 - LANDA PROFILE # vert_mic_count = 1 # hor_mic_count = 8 # dHor = 0.05 # dVert = 0.05 # max_len_sec = 60 # n_fft = 512 # n_overlap = 2 # # (angle_hor_log, angle_vert_log) = (16.0, 0.0) # angle_h = -angle_hor_log # angle_v = -angle_vert_log # # _mix_start = 17 # _mix_end = 40 # # in_wav_path = r'./data/_landa/' # out_wav_path = r'./data/out/' # ################################################################# ################################################################# # 1.0 - _du_hast PROFILE #vert_mic_count = 6 #hor_mic_count = 11 vert_mic_count = 1 hor_mic_count = 11 dHor = 0.035 dVert = 0.05 max_len_sec = 45 n_fft = 512 n_overlap = 2 (angle_hor_log, angle_vert_log) = (12.051, 5.88161) angle_h = -angle_hor_log angle_v = -angle_vert_log _mix_start = 17 _mix_end = 40 in_wav_path = r'./data/_du_hast/' out_wav_path = r'./data/out/' ################################################################# ################################################################# # 1.0 - Read signal x_all_arr, sr = read_mic_wav_from_folder(in_wav_path, vert_mic_count, hor_mic_count, max_len_sec=max_len_sec) x_all_arr = x_all_arr[:, (np.int32)(_mix_start * sr):(np.int32)(_mix_end * sr)] (n_channels, n_samples) = x_all_arr.shape print("Array data read done!") print(" n_channels = ", n_channels) print(" n_samples = ", n_samples) print(" freq = ", sr) ################################################################# # 2 - Do STFT stft_all = stft_arr(x_all_arr, fftsize=n_fft, overlap=n_overlap) (n_bins, n_sensors, n_frames) = stft_all.shape print("STFT calc done!") print(" n_bins = ", n_bins) print(" n_sensors = ", n_sensors) print(" n_frames = ", n_frames) ################################################################# # 3 - Calc steering vector print('Calc steering vector!') print(' (angle_h, angle_v) = ', angle_h, angle_v) sensor_positions = get_sensor_positions(hor_mic_count, vert_mic_count, dHor=dHor, dVert=dVert) source_position = get_source_position(angle_h, angle_v, radius=6.0) d_arr = propagation_vector_free_field(sensor_positions, source_position, N_fft=n_fft, F_s=sr) ################################################################# # Reshape to (nframes, nfrequencies, nchannels) M_spec = stft_all.transpose((2, 0, 1)) def callback_fn(X): print(' invoke callback_fn') # #(nfrequencies, nchannels, nchannels) # W = np.array([np.eye(n_sensors, n_sensors) for f in range(n_bins)], dtype=M_spec.dtype) # for i in range(n_bins): # W[i, : , 0 ] = d_arr[:, i]/8.0 # Y = np.zeros((n_frames, n_bins, n_sensors), dtype=M_spec.dtype) # def demix(Y, X, W): # for f in range(n_bins): # Y[:,f,:] = np.dot(X[:,f,:], np.conj(W[f,:,:])) # demix(Y, M_spec, W) # # IVA Demix Y = pyroomacoustics.bss.auxiva(M_spec, n_iter=20, proj_back=True, callback=callback_fn) # Save result for i in range(Y.shape[2]): sig_out = istft(Y[:, :, i], overlap=n_overlap) sf.write(r'out/iva_res_{}.wav'.format(i), sig_out, sr)
x_all_arr, sr = read_mic_wav_from_folder(in_wav_path, vert_mic_count, hor_mic_count, max_len_sec=max_len_sec) (n_channels, n_samples) = x_all_arr.shape print("Array data read done!") print(" n_channels = ", n_channels) print(" n_samples = ", n_samples) print(" freq = ", sr) x_speech = x_all_arr[:, sr * _sp_start:sr * _sp_end] ################################################################# # 2 - Do STFT stft_arr_ = stft_arr(x_all_arr, fftsize=n_fft) (n_bins, n_sensors, n_frames) = stft_arr_.shape print("STFT calc done!") print(" n_bins = ", n_bins) print(" n_sensors = ", n_sensors) print(" n_frames = ", n_frames) stft_speech = stft_arr(x_speech, fftsize=n_fft) ################################################################# # 3 - Calc steering vector print('Calc steering vector!') print(' (angle_h, angle_v) = ', angle_h, angle_v) result_spec_rtf = rtf_filter(stft_arr_, stft_speech, 'simple')
def run_once(): # ################################################################# # # 1.0 - _wav_wbn45_dict0 PROFILE # # vert_mic_count = 6 # hor_mic_count = 11 # dHor = 0.035 # dVert = 0.05 # max_len_sec = 45 # n_fft = 512 # # (angle_hor_log, angle_vert_log) = (0.0, 0.0) # (angle_inf_hor_log, angle_inf_vert_log) = (45, 0) # # angle_h = -angle_hor_log # angle_v = -angle_vert_log # # angle_inf_h = -angle_inf_hor_log # angle_inf_v = -angle_inf_vert_log # # angle_h = -angle_hor_log # angle_v = -angle_vert_log # # _mix_start = 0.0 # _mix_end = 20.0 # # in_wav_path = r'./data/_wav_wbn45_dict0/' # out_wav_path = r'./data/out/' # ################################################################# # ################################################################# # 1.0 - _sol PROFILE MVDR vert_mic_count = 6 hor_mic_count = 11 dHor = 0.035 dVert = 0.05 max_len_sec = 3 * 60 n_fft = 512 (angle_hor_log, angle_vert_log) = (13.8845, 6.60824) (angle_inf_hor_log, angle_inf_vert_log) = (-15.06, -0.31) angle_h = -angle_hor_log angle_v = -angle_vert_log angle_inf_h = -angle_inf_hor_log angle_inf_v = -angle_inf_vert_log in_wav_path = r'./data/_sol/' out_wav_path = r'./data/out/' _mix_start = 28 _mix_end = 48 ################################################################# ################################################################# # 1.0 - Read signal x_all_arr, sr = read_mic_wav_from_folder(in_wav_path, vert_mic_count, hor_mic_count, max_len_sec=max_len_sec) x_all_arr = x_all_arr[:, (np.int32)(_mix_start * sr):(np.int32)(_mix_end * sr)] (n_channels, n_samples) = x_all_arr.shape print("Array data read done!") print(" n_channels = ", n_channels) print(" n_samples = ", n_samples) print(" freq = ", sr) ################################################################# # 2 - Do STFT stft_all = stft_arr(x_all_arr, fftsize=n_fft) (n_bins, n_sensors, n_frames) = stft_all.shape print("STFT calc done!") print(" n_bins = ", n_bins) print(" n_sensors = ", n_sensors) print(" n_frames = ", n_frames) ################################################################# # 3 - Calc steering vector print('Calc steering vector!') print(' (angle_h, angle_v) = ', angle_h, angle_v) print(' (angle_inf_h, angle_inf_v) = ', angle_inf_h, angle_inf_v) sensor_positions = get_sensor_positions(hor_mic_count, vert_mic_count, dHor=dHor, dVert=dVert) source_position = get_source_position(angle_h, angle_v, radius=6.0) source_position_inf = get_source_position(angle_inf_h, angle_inf_v, radius=6.0) d_arr = propagation_vector_free_field(sensor_positions, source_position, N_fft=n_fft, F_s=sr) d_arr_inf = propagation_vector_free_field(sensor_positions, source_position_inf, N_fft=n_fft, F_s=sr) ################################################################# # 4 - Calc DS beamforming in desired and noise direction result_spec = ds_beamforming(stft_all, d_arr.T) result_spec_inf = ds_beamforming(stft_all, d_arr_inf.T) ################################################################# # 5 - ISTFT sig_sp = istft(result_spec.transpose((1, 0)), overlap=2) sig_inf = istft(result_spec_inf.transpose((1, 0)), overlap=2) sf.write(r"out/out_ds_sp.wav", sig_sp, sr) sf.write(r"out/out_ds_inf.wav", sig_inf, sr) ################################################################# # 4 - NULL filter output result_spec, _ = null_filter(stft_all, d_arr_sp=d_arr.T, d_arr_inf=d_arr_inf.T) sig_out = istft(result_spec.transpose((1, 0)), overlap=2) sf.write(r"out/out_null.wav", sig_out, sr) #result_spec, _ = null_filter_ex(stft_mix_arr, d_arr_sp=d_arr.T, lst_d_arr_inf=[d_arr_inf.T, d_arr_inf_d1.T, d_arr_inf_d2.T]) # ################################################################# # # 6 - AP filter # M = 200 # step = 0.05 # L = 5 # sig_result = affine_projection_filter(main=sig_sp, ref=sig_inf, M=M,step=step,L=5) ################################################################# # 6.1 - AP filter + cyclic parameters # M = 200 # step = 0.05 # L = 5 # leak = 0.0 # delay = -5 #params = [(200, 0.005, 5), (200, 0.05, 5), (200, 0.1, 5), (200, 0.5, 5)] #params = [(200, 0.005, 5),(200, 0.005, 11), (200, 0.005, 25) , (200, 0.005, 35)] params = [(100, 0.01, 5, 0.01, -5)] for (M, step, L, leak, delay) in params: print("process M = {}, step = {}, L = {}, leak = {}, dealy = {}". format(M, step, L, leak, delay)) sig_inf = np.roll(sig_inf, delay) sig_result = affine_projection_filter(main=sig_sp, ref=sig_inf, M=M, step=step, L=L, leak=leak) sf.write( r"out/out_ap_null_M_{}_step_{}_L_{}_leak_{}_delay_{}.wav".format( M, step, L, leak, delay), sig_result, sr) sdr_impr, sir_impr, sar_impr, sdr_base, sir_base, sar_base = calc_sdr_impr_metric( ref_sp, ref_mus, mix, sig_result) print(base_name) print( "sdr_impr, sir_impr, sar_impr = {}, {}, {}, sdr_base, sir_base, sar_base = {}, {}, {}\n" .format(sdr_impr, sir_impr, sar_impr, sdr_base, sir_base, sar_base))
print ("Array data read done!") print (" n_channels = ", n_channels) print (" n_samples = ", n_samples) print (" freq = ", sr) x_mix_arr = x_all_arr[:,(np.int32)(_mix_start*sr):(np.int32)(_mix_end*sr)] print ("Array data read done!") print (" x_mix_arr.shape = ", x_mix_arr.shape) ################################################################# # 2 - Do STFT stft_mix_arr = stft_arr(x_mix_arr, fftsize = n_fft) (n_bins, n_sensors, n_frames) = stft_mix_arr.shape print ("STFT calc done!") print (" n_bins = ", n_bins) print (" n_sensors = ", n_sensors) print (" stft_mix_arr.shape = ", stft_mix_arr.shape) ################################################################# # 3 - Calc steering vector print ('Calc steering vector!') print (' (angle_h, angle_v) = ', angle_h, angle_v) sensor_positions = get_sensor_positions(hor_mic_count, vert_mic_count, dHor = dHor, dVert = dVert) source_position = get_source_position(angle_h, angle_v) d_arr = propagation_vector_free_field(sensor_positions, source_position, N_fft = n_fft, F_s = sr)
def params_iterate(): base_name = 'out_mus1_spk1_snr_-10' #base_name = 'out_wgn_spk_snr_-10' config = cfg.ConfigParser() config.read(os.path.join(r'./data/_sdr_test', base_name, 'config.cfg')) in_Main = r'./data/_sdr_test/' + base_name + r'/ds_mix.wav' in_Main_Sp = r'./data/_sdr_test/' + base_name + r'/ds_spk.wav' in_Main_Mus = r'./data/_sdr_test/' + base_name + r'/ds_mus.wav' # ################################################################# # 1.0 - read PROFILE vert_mic_count = int(config['MIC_CFG']['vert_mic_count']) hor_mic_count = int(config['MIC_CFG']['hor_mic_count']) dHor = float(config['MIC_CFG']['dhor']) dVert = float(config['MIC_CFG']['dvert']) max_len_sec = int(config['MIC_CFG']['max_len_sec']) n_fft = int(config['MIC_CFG']['fft_size']) angle_h = -float(config['FILTER_CFG']['angle_h']) angle_v = -float(config['FILTER_CFG']['angle_v']) angle_inf_h = -float(config['FILTER_CFG']['angle_inf_h']) angle_inf_v = -float(config['FILTER_CFG']['angle_inf_v']) in_wav_path = r'./data/_sdr_test/' + base_name + r'/mix' out_wav_path = r'./data/out/' _mix_start = float(config['FILTER_CFG']['start_mix_time']) _mix_end = 30 ################################################################# ################################################################# # 1.0 - Read signal x_all_arr, sr = read_mic_wav_from_folder(in_wav_path, vert_mic_count, hor_mic_count, max_len_sec=max_len_sec) ref_sp, _ = sf.read(in_Main_Sp) ref_mus, _ = sf.read(in_Main_Mus) mix, _ = sf.read(in_Main) x_all_arr = x_all_arr[:, (np.int32)(_mix_start * sr):(np.int32)(_mix_end * sr)] ref_sp = ref_sp[:(np.int32)((_mix_end - _mix_start) * sr)] ref_mus = ref_mus[:(np.int32)((_mix_end - _mix_start) * sr)] mix = mix[(np.int32)(_mix_start * sr):(np.int32)(_mix_end * sr)] (n_channels, n_samples) = x_all_arr.shape print("Array data read done!") print(" n_channels = ", n_channels) print(" n_samples = ", n_samples) print(" freq = ", sr) ################################################################# # 2 - Do STFT stft_all = stft_arr(x_all_arr, fftsize=n_fft) (n_bins, n_sensors, n_frames) = stft_all.shape print("STFT calc done!") print(" n_bins = ", n_bins) print(" n_sensors = ", n_sensors) print(" n_frames = ", n_frames) ################################################################# # 3 - Calc steering vector print('Calc steering vector!') print(' (angle_h, angle_v) = ', angle_h, angle_v) print(' (angle_inf_h, angle_inf_v) = ', angle_inf_h, angle_inf_v) sensor_positions = get_sensor_positions(hor_mic_count, vert_mic_count, dHor=dHor, dVert=dVert) source_position = get_source_position(angle_h, angle_v, radius=6.0) source_position_inf = get_source_position(angle_inf_h, angle_inf_v, radius=6.0) d_arr = propagation_vector_free_field(sensor_positions, source_position, N_fft=n_fft, F_s=sr) d_arr_inf = propagation_vector_free_field(sensor_positions, source_position_inf, N_fft=n_fft, F_s=sr) ################################################################# # 4 - Calc DS beamforming in desired and noise direction result_spec = ds_beamforming(stft_all, d_arr.T) result_spec_inf = ds_beamforming(stft_all, d_arr_inf.T) ################################################################# # 5 - ISTFT sig_sp = istft(result_spec.transpose((1, 0)), overlap=2) sig_inf = istft(result_spec_inf.transpose((1, 0)), overlap=2) sf.write(r"out/out_ds_sp.wav", sig_sp, sr) sf.write(r"out/out_ds_inf.wav", sig_inf, sr) ################################################################# # 6.1 - AP filter + cyclic parameters # M = 200 # step = 0.05 # L = 5 # leak = 0.0 # delay = -5 params = [ #(150, 0.005, 5, 0.001, 0), (150, 0.005, 5, 0.001, 0), (200, 0.05, 5, 0.001, 0), ] for (M, step, L, leak, delay) in params: print("process M = {}, step = {}, L = {}, leak = {}, delay = {}". format(M, step, L, leak, delay)) sig_inf = np.roll(sig_inf, delay) sig_result = affine_projection_filter(main=sig_sp, ref=sig_inf, M=M, step=step, L=L, leak=leak) sf.write( r"out/out_ap_null_M_{}_step_{}_L_{}_leak_{}_delay_{}.wav".format( M, step, L, leak, delay), sig_result, sr) sdr_impr, sir_impr, sar_impr, sdr_base, sir_base, sar_base = calc_sdr_impr_metric( ref_sp, ref_mus, mix, sig_result) print(base_name) print( "sdr_impr, sir_impr, sar_impr = {}, {}, {}, sdr_base, sir_base, sar_base = {}, {}, {}\n" .format(sdr_impr, sir_impr, sar_impr, sdr_base, sir_base, sar_base)) print('---------------------------------------------')
################################################################# # 1.0 - Read signal x_all_arr, sr = read_mic_wav_from_folder(in_wav_path, vert_mic_count, hor_mic_count, max_len_sec = max_len_sec) x_all_mix = x_all_arr[:,(np.int32)(_mix_start*sr):(np.int32)(_mix_end*sr)] (n_channels, n_samples) = x_all_arr.shape print ("Array data read done!") print (" n_channels = ", n_channels) print (" n_samples = ", n_samples) print (" freq = ", sr) ################################################################# # 2 - Do STFT stft_mix = stft_arr(x_all_mix, fftsize = n_fft) (n_bins, n_sensors, n_frames) = stft_mix.shape print ("STFT calc done!") print (" n_bins = ", n_bins) print (" n_sensors = ", n_sensors) print (" n_frames = ", n_frames) ################################################################# # 3 - Calc steering vector print ('Calc steering vector!') print (' (angle_h, angle_v) = ', angle_h, angle_v) sensor_positions = get_sensor_positions(hor_mic_count, vert_mic_count, dHor = dHor, dVert = dVert) source_position = get_source_position(angle_h, angle_v, radius = 6.0) d_arr = propagation_vector_free_field(sensor_positions, source_position, N_fft = n_fft, F_s = sr)
sr):(np.int32)(_noise_end * sr)] x_mix_arr = x_all_arr[:, (np.int32)(_mix_start * sr):(np.int32)(_mix_end * sr)] x_chirp_noise_arr = x_all_arr[:, (np.int32)(_chirp_noise_start * sr):(np.int32)(_chirp_noise_end * sr)] x_chirp_sp_arr = x_all_arr[:, (np.int32)(_chirp_sp_start * sr):(np.int32)(_chirp_sp_end * sr)] ################################################################# # 2 - Do STFT stft_noise_arr = stft_arr(x_noise_arr, fftsize=n_fft, overlap=n_overlap) stft_mix = stft_arr(x_mix_arr, fftsize=n_fft, overlap=n_overlap) stft_chirp_noise_arr = stft_arr(x_chirp_noise_arr, fftsize=n_fft, overlap=n_overlap) stft_chirp_sp_arr = stft_arr(x_chirp_sp_arr, fftsize=n_fft, overlap=n_overlap) (n_bins, n_sensors, n_frames) = stft_mix.shape print("STFT calc done!") print(" n_bins = ", n_bins) print(" n_sensors = ", n_sensors) print(" n_frames = ", n_frames)
def do_ds(): ################################################################# # 1.0 - out_mus1_spk1_snr_-10 PROFILE vert_mic_count = 6 hor_mic_count = 11 dHor = 0.035 dVert = 0.05 max_len_sec = 60 n_fft = 512 # (angle_hor_log, angle_vert_log) = (7.1539, 7.39515) (angle_hor_log, angle_vert_log) = (-16.0721, -0.163439) angle_h = -angle_hor_log angle_v = -angle_vert_log _mix_start = 10 _mix_end = 50 in_wav_path = r'./data/_sdr_test/out_mus1_spk1_snr_-15/mix/' out_wav_path = r'./data/out/' ################################################################# ################################################################# # 1.0 - Read signal x_all_arr, sr = read_mic_wav_from_folder(in_wav_path, vert_mic_count, hor_mic_count, max_len_sec=max_len_sec) x_all_arr = x_all_arr[:, (np.int32)(_mix_start * sr):(np.int32)(_mix_end * sr)] (n_channels, n_samples) = x_all_arr.shape print("Array data read done!") print(" n_channels = ", n_channels) print(" n_samples = ", n_samples) print(" freq = ", sr) ################################################################# # 2 - Do STFT stft_all = stft_arr(x_all_arr, fftsize=n_fft) (n_bins, n_sensors, n_frames) = stft_all.shape print("STFT calc done!") print(" n_bins = ", n_bins) print(" n_sensors = ", n_sensors) print(" n_frames = ", n_frames) ################################################################# # 3 - Calc steering vector print('Calc steering vector!') print(' (angle_h, angle_v) = ', angle_h, angle_v) sensor_positions = get_sensor_positions(hor_mic_count, vert_mic_count, dHor=dHor, dVert=dVert) source_position = get_source_position(angle_h, angle_v, radius=6.0) d_arr = propagation_vector_free_field(sensor_positions, source_position, N_fft=n_fft, F_s=sr) ################################################################# # 4 - Calc DS filter output result_spec = ds_beamforming(stft_all, d_arr.T) ################################################################# # 5 inverse STFT and save sig_out = istft(result_spec.transpose((1, 0)), overlap=2) sf.write(r"out/out_DS.wav", sig_out, sr)
# 1.0 - Read signal x_all_arr, sr = read_mic_wav_from_folder(in_wav_path, vert_mic_count, hor_mic_count, max_len_sec=max_len_sec) x_pref = x_all_arr[:end_noise_time * sr] (n_channels, n_samples) = x_all_arr.shape print("Array data read done!") print(" n_channels = ", n_channels) print(" n_samples = ", n_samples) print(" freq = ", sr) ################################################################# # 2 - Do STFT stft_all = stft_arr(x_all_arr, fftsize=n_fft) stft_noise = stft_arr(x_all_arr[:, int(start_noise_time) * sr:int(end_noise_time) * sr], fftsize=n_fft) stft_mix = stft_arr(x_all_arr[:, int(end_noise_time) * sr:], fftsize=n_fft) (n_bins, n_sensors, n_frames) = stft_all.shape print("STFT calc done!") print(" n_bins = ", n_bins) print(" n_sensors = ", n_sensors) print(" n_frames = ", n_frames) ################################################################# # 3 - Calc steering vector print('Calc steering vector!')
def ds_respk(): # ################################################################# # 1.0 - AMI dataset small session n_fft = 512 n_overlap = 2 r_circular_array = 0.1 mic_count = 8 in_wav_path = r'./data/_ami_data' out_wav_path = r'./data/out/' _mix_start = 15.0 _mix_end = 22.0 angle_azimuth = 64.0 ################################################################# # 1.0 - Read signal x_all_arr, sr = read_mic_wav_from_path(in_wav_path, mic_count) (n_channels, n_samples) = x_all_arr.shape print("Array data read done!") print(" n_channels = ", n_channels) print(" n_samples = ", n_samples) print(" freq = ", sr) x_mix_arr = x_all_arr[:, (np.int32)(_mix_start * sr):(np.int32)(_mix_end * sr)] ################################################################# # 2 - Do STFT stft_mix = stft_arr(x_mix_arr, fftsize=n_fft, overlap=n_overlap) (n_bins, n_sensors, n_frames) = stft_mix.shape print("STFT calc done!") print(" n_bins = ", n_bins) print(" n_sensors = ", n_sensors) print(" n_frames = ", n_frames) ################################################################# # 3 - Plot DN angle_step = 1 print("Begin steering calc ...") arr_angle = range(-180, 180, angle_step) arr_d_arr = np.zeros((len(arr_angle), n_sensors, n_bins), dtype=np.complex) print('arr_d_arr = ', arr_d_arr.shape) for i, angle in enumerate(arr_angle): sensor_positions = get_sensor_positions_circular( r_circular_array, mic_count) source_position = get_source_position_circular(azimuth=angle, polar=90.0) arr_d_arr[i, :, :] = propagation_vector_free_field(sensor_positions, source_position, N_fft=n_fft, F_s=sr) print("Steering calc done!") ################################################################# # 4 - Calc map POW = np.zeros((len(arr_angle))) print("Begin calc map ...") for i, angle_h in enumerate(arr_angle): print(" process angle = {}".format(angle_h)) d_arr = arr_d_arr[i, :, :] # DS beamforming result_spec = ds_beamforming(stft_mix, d_arr.T) POW[i] = np.real( np.sum(result_spec * np.conjugate(result_spec)) / n_frames) print("Calc map done!") ################################################################# # 5 - Scale to power ch_0_0 P0 = np.sum(stft_mix[:, 0, :] * np.conjugate(stft_mix[:, 0, :])) / n_frames POW = POW / P0 ################################################################# # 6 - Plot DN plt.plot(arr_angle, POW) plt.xlabel('angle (s)') plt.ylabel('pow_res/pow_s0') plt.title('DS alg') plt.grid(True) plt.savefig(r".\out\DS_mic{}.png".format(mic_count)) plt.show() ################################################################# # 7 - Do DS beamforming print('Calc DS beamforming!') print(' (angle_azimuth) = ', angle_azimuth) sensor_positions = get_sensor_positions_circular(r_circular_array, mic_count) source_position = get_source_position_circular(azimuth=angle_azimuth, polar=90.0) d_arr = propagation_vector_free_field(sensor_positions, source_position, N_fft=n_fft, F_s=sr) ################################################################# # 4 - Calc DS filter output result_spec = ds_beamforming(stft_mix, d_arr.T) ################################################################# # 5 inverse STFT and save sig_out = istft(result_spec.transpose((1, 0)), overlap=n_overlap) sf.write(r"out/out_DS_{}.wav".format(angle_azimuth), sig_out, sr)
x_noise_arr = x_all_arr[:, (np.int32)(_noise_start * sr):(np.int32)(_noise_end * sr)] x_mix_arr = x_all_arr[:, (np.int32)(_mix_start * sr):(np.int32)(_mix_end * sr)] x_sp_arr = x_all_arr[:, (np.int32)(_sp_start * sr):(np.int32)(_sp_end * sr)] print("Array data read done!") print(" x_noise_arr.shape = ", x_noise_arr.shape) print(" x_mix_arr.shape = ", x_mix_arr.shape) print(" x_sp_arr.shape = ", x_sp_arr.shape) ################################################################# # 2 - Do STFT stft_noise_arr = stft_arr(x_noise_arr, fftsize=n_fft) stft_mix_arr = stft_arr(x_mix_arr, fftsize=n_fft) stft_sp_arr = stft_arr(x_sp_arr, fftsize=n_fft) (n_bins, n_sensors, n_frames) = stft_noise_arr.shape print("STFT calc done!") print(" n_bins = ", n_bins) print(" n_sensors = ", n_sensors) print(" stft_noise_arr.shape = ", stft_noise_arr.shape) print(" stft_mix_arr.shape = ", stft_mix_arr.shape) print(" stft_sp_arr.shape = ", stft_sp_arr.shape) ################################################################# # 3 - Calc steering vector print('Calc steering vector!')
def params_iterate_null(): #base_name = 'out_mus1_spk1_snr_-10' base_name = 'out_wgn_spk_snr_-10' config = cfg.ConfigParser() config.read(os.path.join(r'./data/_sdr_test', base_name, 'config.cfg')) in_Main = r'./data/_sdr_test/' + base_name + r'/ds_mix.wav' in_Main_Sp = r'./data/_sdr_test/' + base_name + r'/ds_spk.wav' in_Main_Mus = r'./data/_sdr_test/' + base_name + r'/ds_mus.wav' # ################################################################# # 1.0 - read PROFILE vert_mic_count = int(config['MIC_CFG']['vert_mic_count']) hor_mic_count = int(config['MIC_CFG']['hor_mic_count']) dHor = float(config['MIC_CFG']['dhor']) dVert = float(config['MIC_CFG']['dvert']) max_len_sec = int(config['MIC_CFG']['max_len_sec']) n_fft = int(config['MIC_CFG']['fft_size']) angle_h = -float(config['FILTER_CFG']['angle_h']) angle_v = -float(config['FILTER_CFG']['angle_v']) angle_inf_h = -float(config['FILTER_CFG']['angle_inf_h']) angle_inf_v = -float(config['FILTER_CFG']['angle_inf_v']) in_wav_path = r'./data/_sdr_test/' + base_name + r'/mix' out_wav_path = r'./data/out/' _mix_start = float(config['FILTER_CFG']['start_mix_time']) _mix_end = 30 ################################################################# ################################################################# # 1.0 - Read signal x_all_arr, sr = read_mic_wav_from_folder(in_wav_path, vert_mic_count, hor_mic_count, max_len_sec=max_len_sec) ref_sp, _ = sf.read(in_Main_Sp) ref_mus, _ = sf.read(in_Main_Mus) mix, _ = sf.read(in_Main) x_all_arr = x_all_arr[:, (np.int32)(_mix_start * sr):(np.int32)(_mix_end * sr)] ref_sp = ref_sp[:(np.int32)((_mix_end - _mix_start) * sr)] ref_mus = ref_mus[:(np.int32)((_mix_end - _mix_start) * sr)] mix = mix[(np.int32)(_mix_start * sr):(np.int32)(_mix_end * sr)] (n_channels, n_samples) = x_all_arr.shape print("Array data read done!") print(" n_channels = ", n_channels) print(" n_samples = ", n_samples) print(" freq = ", sr) ################################################################# # 2 - Do STFT stft_all = stft_arr(x_all_arr, fftsize=n_fft) (n_bins, n_sensors, n_frames) = stft_all.shape print("STFT calc done!") print(" n_bins = ", n_bins) print(" n_sensors = ", n_sensors) print(" n_frames = ", n_frames) ################################################################# # 3 - Calc steering vector print('Calc steering vector!') print(' (angle_h, angle_v) = ', angle_h, angle_v) print(' (angle_inf_h, angle_inf_v) = ', angle_inf_h, angle_inf_v) sensor_positions = get_sensor_positions(hor_mic_count, vert_mic_count, dHor=dHor, dVert=dVert) source_position = get_source_position(angle_h, angle_v, radius=6.0) source_position_inf = get_source_position(angle_inf_h, angle_inf_v, radius=6.0) d_arr = propagation_vector_free_field(sensor_positions, source_position, N_fft=n_fft, F_s=sr) d_arr_inf = propagation_vector_free_field(sensor_positions, source_position_inf, N_fft=n_fft, F_s=sr) ################################################################# # 4 - Calc DS beamforming in desired and noise direction result_spec = ds_beamforming(stft_all, d_arr.T) result_spec_inf = ds_beamforming(stft_all, d_arr_inf.T) ################################################################# # 5 - ISTFT sig_sp = istft(result_spec.transpose((1, 0)), overlap=2) sig_inf = istft(result_spec_inf.transpose((1, 0)), overlap=2) sf.write(r"out/out_ds_sp.wav", sig_sp, sr) sf.write(r"out/out_ds_inf.wav", sig_inf, sr) ################################################################# # 5.1 - NULL filter + cyclic parameters out_spec, _ = null_filter(stft_all, d_arr_sp=d_arr.T, d_arr_inf=d_arr_inf.T) sig_out = istft(out_spec.transpose((1, 0)), overlap=2) sf.write(r"out/out_null.wav", sig_out, sr) #result_spec, _ = null_filter_ex(stft_mix_arr, d_arr_sp=d_arr.T, lst_d_arr_inf=[d_arr_inf.T, d_arr_inf_d1.T, d_arr_inf_d2.T]) sdr_impr, sir_impr, sar_impr, sdr_base, sir_base, sar_base = calc_sdr_impr_metric( ref_sp, ref_mus, mix, sig_out) print(base_name) print( "sdr_impr, sir_impr, sar_impr = {}, {}, {}, sdr_base, sir_base, sar_base = {}, {}, {}\n" .format(sdr_impr, sir_impr, sar_impr, sdr_base, sir_base, sar_base)) print('---------------------------------------------')
################################################################# # 1.0 - Read signal x_all_arr, sr = read_mic_wav_from_folder(in_wav_path, vert_mic_count, hor_mic_count, max_len_sec = max_len_sec) x_noise_arr = x_all_arr[:,(np.int32)(_nose_start*sr):(np.int32)(_nose_end*sr)] (n_channels, n_samples) = x_all_arr.shape print ("Array data read done!") print (" n_channels = ", n_channels) print (" n_samples = ", n_samples) print (" freq = ", sr) ################################################################# # 2 - Do STFT stft_all_arr = stft_arr(x_all_arr, fftsize=n_fft) stft_noise_arr = stft_arr(x_noise_arr, fftsize=n_fft) (n_bins, n_sensors, n_frames) = stft_all_arr.shape print ("STFT calc done!") print (" n_bins = ", n_bins) print (" n_sensors = ", n_sensors) print (" n_frames = ", n_frames) ################################################################# # 3 - Calc steering vector print ('Calc steering vector!') print (' (angle_h, angle_v) = ', angle_h, angle_v) sensor_positions = get_sensor_positions(hor_mic_count, vert_mic_count, dHor = dHor, dVert = dVert) source_position = get_source_position(angle_h, angle_v, radius = 6.0) d_arr = propagation_vector_free_field(sensor_positions, source_position, N_fft = n_fft, F_s = sr)
def ds_respk(): # # ################################################################# # # 1.0 - simulation showroom, wgn WBN_16000hz # n_fft = 512 # n_overlap = 2 # # intermic_distance = 0.0457 # mic_count = 4 # in_wav_path = r'./data/_sim_shoroom/WBN_16000hz/4mic_output.wav' # out_wav_path = r'./data/out/' # _chirp_noise_start = 0 # _chirp_noise_end = 59 # _mix_start = 0 # _mix_end = 59 # angle_azimuth = 150.0 # ################################################################# # 1.0 - simulation showroom, wgn 2800_3800 n_fft = 512 n_overlap = 2 intermic_distance = 0.0457 mic_count = 4 #in_wav_path = r'./data/_sim_shoroom/WBN_2800_3800/4mic_output.wav' in_wav_path = r'./data/_sim_shoroom/WBN_2800_3800/4mic_output_reflection_0.wav' out_wav_path = r'./data/out/' _chirp_noise_start = 0 _chirp_noise_end = 59 _mix_start = 0 _mix_end = 59 angle_azimuth = 0.0 # # ################################################################# # # 1.0 - stc-h873 ex2 # n_fft = 512 # n_overlap = 2 # # intermic_distance = 0.05 # mic_count = 2 # in_wav_path = r'./data/_re_spk_ex2/stc-h873.wav' # out_wav_path = r'./data/out/' # _chirp_noise_start = 47 # _chirp_noise_end = 60 + 3 # _mix_start = 60 + 9 # _mix_end = 3*60 + 31 # angle_azimuth = 0.0 # # ################################################################# # # 1.0 - respeaker_mic_array ex2 # n_fft = 512 # n_overlap = 2 # # intermic_distance = 0.0457 # mic_count = 4 # in_wav_path = r'./data/_re_spk_ex2/respeaker_mic_array.wav' # out_wav_path = r'./data/out/' # _chirp_noise_start = 40 # _chirp_noise_end = 56 # _mix_start = 60 # _mix_end = 3*60 + 22 # angle_azimuth = -50.0 # # ################################################################# # # 1.0 - respeaker_core_v2 ex2 # n_fft = 512 # n_overlap = 2 # # intermic_distance = 0.0463 # mic_count = 6 # in_wav_path = r'./data/_re_spk_ex2/respeaker_core_v2.wav' # out_wav_path = r'./data/out/' # _chirp_noise_start = 52 # _chirp_noise_end = 69 # _mix_start = 70 # _mix_end = 3*60 + 35 # angle_azimuth = 30.0 # # ################################################################# # # 1.0 - respeaker_core_v2 ex1 # n_fft = 512 # n_overlap = 2 # # intermic_distance = 0.0463 # mic_count = 6 # in_wav_path = r'./data/_re_spk_ex1/respeaker_core_v2.wav' # out_wav_path = r'./data/out/' # _chirp_noise_start = 15 # _chirp_noise_end = 60 + 48 # _mix_start = 10 # _mix_end = 15 # angle_azimuth = 30.0 # # ################################################################# # # 1.0 - respeaker_mic_array ex1 # n_fft = 512 # n_overlap = 2 # # intermic_distance = 0.0457 # mic_count = 4 # in_wav_path = r'./data/_re_spk_ex2/respeaker_mic_array.wav' # out_wav_path = r'./data/out/' # _chirp_noise_start = 38 # _chirp_noise_end = 56 # _mix_start = 38 # _mix_end = 56 # angle_azimuth = -50.0 ################################################################# # 1.0 - Read signal x_all_arr, sr = read_mic_wav_from_file(in_wav_path, mic_count) (n_channels, n_samples) = x_all_arr.shape print("Array data read done!") print(" n_channels = ", n_channels) print(" n_samples = ", n_samples) print(" freq = ", sr) x_chirp_noise_arr = x_all_arr[:, (np.int32)(_chirp_noise_start * sr):(np.int32)(_chirp_noise_end * sr)] x_mix_arr = x_all_arr[:, (np.int32)(_mix_start * sr):(np.int32)(_mix_end * sr)] ################################################################# # 2 - Do STFT stft_mix = stft_arr(x_mix_arr, fftsize=n_fft, overlap=n_overlap) stft_chirp_noise_arr = stft_arr(x_chirp_noise_arr, fftsize=n_fft, overlap=n_overlap) (n_bins, n_sensors, n_frames) = stft_mix.shape print("STFT calc done!") print(" n_bins = ", n_bins) print(" n_sensors = ", n_sensors) print(" n_frames = ", n_frames) ################################################################# # 3 - Plot DN angle_step = 1 print("Begin steering calc ...") arr_angle = range(-180, 180, angle_step) arr_d_arr = np.zeros((len(arr_angle), n_sensors, n_bins), dtype=np.complex) print('arr_d_arr = ', arr_d_arr.shape) for i, angle in enumerate(arr_angle): sensor_positions = get_sensor_positions_respeaker( intermic_distance, mic_count) source_position = get_source_position_respeaker(azimuth=angle, polar=90) arr_d_arr[i, :, :] = propagation_vector_free_field(sensor_positions, source_position, N_fft=n_fft, F_s=sr) print("Steering calc done!") ################################################################# # 4 - Calc map POW = np.zeros((len(arr_angle))) print("Begin calc map ...") for i, angle_h in enumerate(arr_angle): print(" process angle = {}".format(angle_h)) d_arr = arr_d_arr[i, :, :] # DS beamforming result_spec = ds_beamforming(stft_chirp_noise_arr, d_arr.T) POW[i] = np.real( np.sum(result_spec * np.conjugate(result_spec)) / n_frames) print("Calc map done!") ################################################################# # 5 - Scale to power ch_0_0 P0 = np.sum(stft_chirp_noise_arr[:, 0, :] * np.conjugate(stft_chirp_noise_arr[:, 0, :])) / n_frames POW = POW / P0 ################################################################# # 6 - Plot DN plt.plot(arr_angle, POW) plt.xlabel('angle (s)') plt.ylabel('pow_res/pow_s0') plt.title('DS alg') plt.grid(True) plt.savefig(r".\out\DS_mic{}.png".format(mic_count)) plt.show() ################################################################# # 7 - Do DS beamforming print('Calc steering vector!') print(' (angle_azimuth) = ', angle_azimuth) sensor_positions = get_sensor_positions_respeaker(intermic_distance, mic_count) source_position = get_source_position_respeaker(azimuth=angle_azimuth, polar=90) d_arr = propagation_vector_free_field(sensor_positions, source_position, N_fft=n_fft, F_s=sr) ################################################################# # 4 - Calc DS filter output result_spec = ds_beamforming(stft_mix, d_arr.T) print('Calc RTF steering vector!') result_spec_rtf = rtf_filter(stft_mix, stft_chirp_noise_arr, 'simple') ################################################################# # 5 inverse STFT and save sig_out = istft(result_spec.transpose((1, 0)), overlap=n_overlap) sf.write(r"out/out_DS.wav", sig_out, sr) sig_out = istft(result_spec_rtf.transpose((1, 0)), overlap=n_overlap) sf.write(r"out/out_DS_rtf.wav", sig_out, sr)