Esempio n. 1
0
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)
Esempio n. 2
0
                                             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,
Esempio n. 3
0
                                             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,
Esempio n. 4
0
    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)
Esempio n. 5
0
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)
Esempio n. 6
0
    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')
Esempio n. 7
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))
Esempio n. 8
0
    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)
Esempio n. 9
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('---------------------------------------------')
Esempio n. 10
0
    #################################################################
    # 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)
Esempio n. 11
0
                                          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)
Esempio n. 12
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)
Esempio n. 13
0
    # 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!')
Esempio n. 14
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)
Esempio n. 15
0
    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!')
Esempio n. 16
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('---------------------------------------------')
Esempio n. 17
0

    #################################################################
    # 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)
Esempio n. 18
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)