espnet2.enh.layers.beamformer.get_gev_vector
espnet2.enh.layers.beamformer.get_gev_vector
espnet2.enh.layers.beamformer.get_gev_vector(psd_noise: Tensor | ComplexTensor, psd_speech: Tensor | ComplexTensor, mode='power', reference_vector: int | Tensor = 0, iterations: int = 3, diagonal_loading: bool = True, diag_eps: float = 1e-07, eps: float = 1e-08) → Tensor | ComplexTensor
Return the generalized eigenvalue (GEV) beamformer vector.
The GEV beamformer is defined by the equation: : psd_speech @ h = lambda * psd_noise @ h
Reference: : Blind acoustic beamforming based on generalized eigenvalue decomposition; E. Warsitz and R. Haeb-Umbach, 2007.
- Parameters:
psd_noise (torch.complex64/ComplexTensor) – Noise covariance matrix of shape (…, F, C, C).
psd_speech (torch.complex64/ComplexTensor) – Speech covariance matrix of shape (…, F, C, C).
mode (str) –
One of (“power”, “evd”).
- “power”: Power method for calculating the eigenvector.
- “evd”: Eigenvalue decomposition (only for torch builtin
complex tensors).
reference_vector (torch.Tensor or int) – Reference vector of shape (…, C) or a scalar.
iterations (int) – Number of iterations for the power method.
diagonal_loading (bool) – Whether to add a small term to the diagonal of psd_noise to prevent singularity.
diag_eps (float) – Regularization parameter for diagonal loading.
eps (float) – Small constant to avoid division by zero.
- Returns: GEV beamformer vector of shape (…, F, C).
- Return type: beamform_vector (torch.complex64/ComplexTensor)
Examples
>>> psd_n = torch.rand(10, 8, 4, 4, dtype=torch.complex64)
>>> psd_s = torch.rand(10, 8, 4, 4, dtype=torch.complex64)
>>> vector = get_gev_vector(psd_n, psd_s, mode="power")
>>> print(vector.shape)
torch.Size([10, 8, 4])