#################################################################
    # 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 - DS filter
    result_spec = ds_beamforming(stft_mix, d_arr.T)

    # 5 - inverse STFT and save
    sig_out = istft(result_spec.transpose((1, 0)), overlap=2)
    out_ds_path = r'{}/tmp_ds.wav'.format(os.path.dirname(out_wav_path))
    sf.write(out_ds_path, sig_out, sr)

    # 6 - get noise mask
    print('Get noise mask form neural net!')

    # shape - (time, freq, 2)
    config_path = r'/home/stc/MA_ALG/datasets/test_ma/' \
                  r'chimera_v12/9_chimera.json'
    in_model_path = r'/home/stc/MA_ALG/datasets/test_ma/chimera_v12/checkpoint/'

    frozen_model_path = r'/home/stc/MA_ALG/datasets/test_ma/chimera_frozen/model_chimera_v11.pb'
Beispiel #2
0
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('---------------------------------------------')
Beispiel #3
0
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))
Beispiel #4
0
                                          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  RTF steering vector
    print('Calc  RTF steering vector!')
    #result_spec_rtf = rtf_filter(stft_mix, stft_chirp_sp_arr, 'simple')
    result_spec_rtf = rtf_filter(stft_mix, stft_chirp_noise_arr, 'simple')

    #################################################################
    # 5 - Do DS beamforming
    result_sp = ds_beamforming(stft_mix, d_arr.T)
    result_noise = ds_beamforming(stft_mix, d_arr_inf.T)

    #################################################################
    # 5 - Write result

    sig_out = istft(result_spec_rtf.transpose((1, 0)), overlap=n_overlap)
    sf.write(r"out/out_DS_rtf.wav", sig_out, sr)

    sig_out = istft(result_sp.transpose((1, 0)), overlap=n_overlap)
    sf.write(r"out/out_DS_sp.wav", sig_out, sr)

    sig_out = istft(result_noise.transpose((1, 0)), overlap=n_overlap)
    sf.write(r"out/out_DS_noise.wav", sig_out, sr)
Beispiel #5
0
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('---------------------------------------------')
Beispiel #6
0
    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 - MCRA postfilter
    result_spec = mcra_filter(stft_arr=result_spec)

    #################################################################
    # 5 inverse STFT and save
    sig_out = istft(result_spec.transpose((1,0)), overlap = 2)
    sf.write(r"out/out_DS_MCRA.wav", sig_out, sr)


Beispiel #7
0
    #     sf.write(r"out/out_HARD_NULL_{}.wav".format(alg_type), sig_out, sr)
    # else:
    #
    #     #################################################################
    #     # 4 - HARD NULL filter output
    #     alg_type    = 2 #0-compensate ref, 1-spec subs, 2- SMB filter
    #     result_spec = hard_null_filter(stft_all, d_arr_sp=d_arr, d_arr_inf=d_arr_inf, alg_type=alg_type)
    #
    #     #################################################################
    #     # 5 - Inverse STFT and save
    #     sig_out = istft(result_spec.transpose((1,0)), overlap = 2)
    #     sf.write(r"out/out_HARD_NULL_{}.wav".format(alg_type), sig_out, sr)

    (n_bins, n_num_sensors, n_frames) = stft_all.shape

    spec_sp = ds_beamforming(stft_all, d_arr.T)
    spec_inf = ds_beamforming(stft_all, d_arr_inf.T)

    gain_correction = np.zeros((n_bins), dtype=np.complex)

    for i in range(n_bins):
        d1 = d_arr[:, i]
        d2 = d_arr_inf[:, i]
        eq_i = np.dot(np.conj(d2), d1)
        gain_correction[i] = eq_i / n_sensors

    spec_corr_inf = np.expand_dims(gain_correction, axis=1) * spec_inf

    #result_spec = spectral_substract_filter(stft_main=spec_sp, stft_ref=spec_inf, alfa_PX=0.01, alfa_PN=0.099)
    result_spec = spectral_substract_filter(stft_main=spec_sp,
                                            stft_ref=spec_corr_inf,
Beispiel #8
0
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)
Beispiel #9
0
    #################################################################
    # 3 - Calc  map
    POW = np.zeros((len(arr_angle_h), len(arr_angle_v)))

    print("Begin calc map ...")
    col = 0
    for k in range(0, n_frames, frame_step):
        print("Process frame {} .. {},  max {}".format(k, k + frame_step,
                                                       n_frames))

        for i, angle_h in enumerate(arr_angle_h):
            for j, angle_v in enumerate(arr_angle_v):
                d_arr = arr_d_arr[i, j, :, :]
                # 4 - Do beamforming
                inst_spec = ds_beamforming(stft_arr[:, :, k:k + frame_step],
                                           d_arr.T)
                inst_pow = np.sum(inst_spec**2) / frame_step
                POW[i, j] = inst_pow

        # Display matrix
        plt.matshow(POW.T)
        plt.savefig('./out/png/mic_{}.png'.format(col))
        plt.close()
        col += 1
    print("Calc map done!")

    #################################################################
    # 4 - Do align
    #align_stft_arr = ds_align(stft_arr, d_arr.T)
Beispiel #10
0
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)
Beispiel #11
0
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)
    #################################################################
    # 3 - Calc Chebyshev weights

    weights = get_chebyshev_weights_for_amplitudes(vert_mic_count,
                                                   hor_mic_count, n_bins)

    # 4 - Calc  steering vector with Chebyshev weights
    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)
    d_arr_cheb = d_arr * weights

    #################################################################
    # 4 - Calc DS filter output
    result_spec_cheb = ds_beamforming(stft_all, d_arr_cheb.T)

    np.save('Chebyshev', result_spec_cheb)

    #################################################################
    # 5 inverse STFT and save
    sig_out = istft(result_spec_cheb.transpose((1, 0)), overlap=2)
    sf.write(r"out/out_rameses_cheb.wav", sig_out, sr)