Ejemplo n.º 1
0
    #################################################################
    # 4  - Calc psd matrix
    psd_noise_matrix = get_power_spectral_density_matrix(stft_noise_arr)
    print('Calc psd matrix done!')
    print('    psd_noise_matrix.shape = ', psd_noise_matrix.shape)

    #################################################################
    # 6 - Apply MVDR
    type_reg = 1
    reg_p = 0.001

    w = get_mvdr_vector_svd(d_arr.T,
                            psd_noise_matrix,
                            type_reg=type_reg,
                            r=reg_p)
    result_spec = apply_beamforming_vector(w, stft_mix_arr)

    #################################################################
    # 6 inverse STFT and save
    sig_out = istft(result_spec.transpose((1, 0)), overlap=2)
    sf.write(r"out/out_mvdr_svd_type_{}_r_{}.wav".format(type_reg, reg_p),
             sig_out, sr)

    #################################################################
    # 7.1 - Do align
    align_stft_arr = ds_align(stft_mix_arr, d_arr.T)

    #################################################################
    # 7.2 save ds output
    result_spec = align_stft_arr.sum(axis=1) / (hor_mic_count * vert_mic_count)
    sig_out = istft(result_spec.transpose((1, 0)), overlap=2)
Ejemplo n.º 2
0
    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)

    psd = get_power_spectral_density_matrix(stft_mix)

    w = get_mvdr_vector(d_arr.T, psd)

    result_mvdr_spec = apply_beamforming_vector(w, stft_mix)

    align_stft_arr = ds_align(stft_mix, d_arr.T)

    #################################################################
    result_spec, H = zelin_filter(stft_arr=align_stft_arr,
                                  alfa=0.7,
                                  alg_type=0)
    print('Calc zelin filter output done!')

    #################################################################
    result_spec = result_mvdr_spec * H

    #################################################################
    sig_out = istft(result_spec.transpose((1, 0)), overlap=4)
    sf.write(r"out/out_mvdr_mix_zelin.wav", sig_out, sr)
Ejemplo n.º 3
0
        psd_reg = psd + REG_COEF * np.identity(psd.shape[-1])

        w = get_mvdr_vector(d_arr.T, psd_reg)

        if i == 0:
            taper, _ = cov_matrix_tapper_bandwidth(stft_mix[:, :, 0:mvdr_step],
                                                   hor_mic_count,
                                                   vert_mic_count,
                                                   dHor=dHor,
                                                   dVert=dVert,
                                                   angle_v=angle_v,
                                                   angle_h=angle_h,
                                                   sr=sr)
            w = np.zeros((n_bins, n_sensors))
            pp = apply_beamforming_vector(w, stft_mix[:, :, i:i + mvdr_step])
            res_spec = pp
            w = np.zeros((n_bins, n_sensors))

        pp = apply_beamforming_vector(
            w, stft_mix[:, :, i + mvdr_step:i + 2 * mvdr_step])

        if res_spec is None:
            res_spec = pp
        else:
            res_spec = np.hstack((res_spec, pp))

    print('Result shape: {}'.format(res_spec.shape))

    align_stft_arr = ds_align(stft_mix, d_arr.T)
Ejemplo n.º 4
0
    stft_all_noise = copy.deepcopy(stft_all)
    for i in range(0, n_sensors):
        stft_all_noise[:, i, :] *= actual_mask

    psd_noise_matrix = get_power_spectral_density_matrix(stft_all_noise)

    #################################################################
    # 5 -Regularisation psd matrix
    psd_noise_matrix = psd_noise_matrix + 0.01 * np.identity(
        psd_noise_matrix.shape[-1])

    #################################################################
    # 6 - Apply MVDR
    w = get_mvdr_vector(d_arr.T, psd_noise_matrix)
    result_spec = apply_beamforming_vector(w, stft_all)

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

    #################################################################
    # 7.1 - Do align
    align_stft_arr = ds_align(stft_all, d_arr.T)

    #################################################################
    # 7.2 save ds output
    result_spec = align_stft_arr.sum(axis=1) / (hor_mic_count * vert_mic_count)
    sig_out = istft(result_spec.transpose((1, 0)), overlap=2)
    sf.write(r"out/ds.wav", sig_out, sr)