for i in range(0, n_frames_mix, mvdr_step):

        for j in range(min(mvdr_step, n_frames_mix - i - 1)):

            psd_curr = np.zeros((257, 66, 66), dtype=np.complex)
            for k in range(n_bins):
                psd_curr[k] = np.outer(stft_mix_noise[k, :, i + j],
                                       stft_mix_noise[k, :, i + j].conj())

            psd_curr *= taper
            psd = EXP_AV_COEF * psd + (1 - EXP_AV_COEF) * psd_curr

        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))
Beispiel #2
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)
    np.save('psd_noise_mat', psd_noise_matrix)

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

    #################################################################
    # 6 - Apply MVDR
    w = get_mvdr_vector(d_arr.T,  psd_noise_matrix)
    result_mvdr_spec = apply_beamforming_vector(w, stft_mix_arr)
    print ('Apply MVDR done!')

    #################################################################
    # 7 - Do align 
    align_stft_arr = ds_align(stft_mix_arr, d_arr.T)
    print ('Align mix_arr done!')

    #################################################################
    # 8 - Calc mccowan filter output

    # 8.1 - Get coherence shape - (sensors_count, sensors_count, bins)
    G = diffuse_noise_coherence(bins = n_bins, freq = sr, D_IJ = pair_distance)

    # 8.2 - Calc mccowan filter output