快捷方式

MVDR

class torchaudio.transforms.MVDR(ref_channel: int = 0, solution: str = 'ref_channel', multi_mask: bool = False, diag_loading: bool = True, diag_eps: float = 1e-07, online: bool = False)[source]

最小方差无失真响应 (MVDR) 模块,执行带有时频掩码的 MVDR 波束成形。

This feature supports the following devices: CPU, CUDA This API supports the following properties: Autograd, TorchScript

基于 https://github.com/espnet/espnet/blob/master/espnet2/enh/layers/beamformer.py

我们提供了 MVDR 波束成形的三种解决方案。一种是基于参考通道选择 [Souden et al., 2009] (solution=ref_channel)。

\[\textbf{w}_{\text{MVDR}}(f) = \frac{{{\bf{\Phi}_{\textbf{NN}}^{-1}}(f){\bf{\Phi}_{\textbf{SS}}}}(f)} {\text{Trace}({{{\bf{\Phi}_{\textbf{NN}}^{-1}}(f) \bf{\Phi}_{\textbf{SS}}}(f))}}\bm{u} \]

其中 \(\bf{\Phi}_{\textbf{SS}}\)\(\bf{\Phi}_{\textbf{NN}}\) 分别是语音和噪声的协方差矩阵。\(\bf{u}\) 是确定参考通道的 one-hot 向量。

另外两种解决方案基于导向矢量 (solution=stv_evdsolution=stv_power)。

\[\textbf{w}_{\text{MVDR}}(f) = \frac{{{\bf{\Phi}_{\textbf{NN}}^{-1}}(f){\bm{v}}(f)}} {{\bm{v}^{\mathsf{H}}}(f){\bf{\Phi}_{\textbf{NN}}^{-1}}(f){\bm{v}}(f)} \]

其中 \(\bm{v}\) 是声学传递函数或导向矢量。\(.^{\mathsf{H}}\) 表示 Hermitian 共轭运算。

我们应用特征值分解 [Higuchi et al., 2016]幂迭代法 [Mises and Pollaczek-Geiringer, 1929] 从语音的 PSD 矩阵中获取导向矢量。

在估计波束成形权重后,通过下式获得增强的短时傅里叶变换 (STFT):

\[\hat{\bf{S}} = {\bf{w}^\mathsf{H}}{\bf{Y}}, {\bf{w}} \in \mathbb{C}^{M \times F} \]

其中 \(\bf{Y}\)\(\hat{\bf{S}}\) 分别是多通道噪声语音和单通道增强语音的 STFT。

对于在线流式音频,我们提供了一种递归方法 [Higuchi et al., 2017] 分别更新语音和噪声的 PSD 矩阵。

参数:
  • ref_channel (int, 可选) – 波束成形的参考通道。(默认值:0

  • solution (str, 可选) – 计算 MVDR 波束成形权重的解决方案。选项:[ref_channel, stv_evd, stv_power]。(默认值:ref_channel

  • multi_mask (bool, 可选) – 如果为 True,则仅接受多通道时频掩码。(默认值:False

  • diagonal_loading (bool, 可选) – 如果为 True,则启用对噪声协方差矩阵应用对角加载。(默认值:True

  • diag_eps (float, 可选) – 乘以单位矩阵进行对角加载的系数。仅当 diagonal_loading 设置为 True 时有效。(默认值:1e-7

  • online (bool, 可选) – 如果为 True,则根据先前的协方差矩阵更新 MVDR 波束成形权重。(默认值:False

注意

为了提高数值稳定性,输入频谱图将转换为双精度 (torch.complex128torch.cdouble) dtype 以进行内部计算。输出频谱图将转换为输入频谱图的 dtype,以便与其他模块兼容。

注意

如果您使用 stv_evd 解决方案,如果 PSD 矩阵的特征值不明显(即,某些特征值接近或相同),则相同输入的梯度可能不完全相同。

forward(specgram: Tensor, mask_s: Tensor, mask_n: Optional[Tensor] = None) Tensor[source]

执行 MVDR 波束成形。

参数:
  • specgram (torch.Tensor) – 多通道复值频谱图。维度为 (…, channel, freq, time) 的张量

  • mask_s (torch.Tensor) – 目标语音的时频掩码。如果 multi_mask 为 False,则维度为 (…, freq, time) 的张量;如果 multi_mask 为 True,则维度为 (…, channel, freq, time) 的张量。

  • mask_n (torch.TensorNone, 可选) – 噪声的时频掩码。如果 multi_mask 为 False,则维度为 (…, freq, time) 的张量;如果 multi_mask 为 True,则维度为 (…, channel, freq, time) 的张量。(默认值:None)

返回:

单通道复值增强频谱图,维度为 (…, freq, time)

返回类型:

torch.Tensor

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取面向初学者和高级开发者的深度教程

查看教程

资源

查找开发资源并获得您的问题解答

查看资源