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))
################################################################# # 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