捷徑

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 向量,用於確定參考通道。

另外兩種解決方案是基於導向向量 (steering vector) (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, optional) – 波束成形的參考通道。(預設值:0

  • solution (str, optional) – 計算 MVDR 波束成形權重的解決方案。選項:[ref_channel, stv_evd, stv_power]。(預設值:ref_channel

  • multi_mask (bool, optional) – 如果為 True,則只接受多通道時頻遮罩。(預設值:False

  • diagonal_loading (bool, optional) – 如果為 True,則啟用對噪聲的共變異數矩陣應用對角加載。(預設值:True

  • diag_eps (float, optional) – 乘以單位矩陣以進行對角加載的係數。僅當 diagonal_loading 設置為 True 時才有效。(預設值:1e-7

  • online (bool, optional) – 如果為 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) 的張量 (Tensor)

  • mask_s (torch.Tensor) – 目標語音的時頻遮罩 (Time-Frequency mask)。如果 multi_mask 為 False,則張量的維度為 (…, freq, time);如果 multi_mask 為 True,則張量的維度為 (…, channel, freq, time)

  • mask_n (torch.Tensor or None, optional) – 雜訊的時頻遮罩 (Time-Frequency mask)。如果 multi_mask 為 False,則張量的維度為 (…, freq, time);如果 multi_mask 為 True,則張量的維度為 (…, channel, freq, time)。(預設:None)

返回值:

單聲道複數值增強頻譜,維度為 (…, freq, time)

返回類型:

torch.Tensor

文件

訪問 PyTorch 的完整開發者文檔

查看文檔

教學

獲取適合初學者和高級開發者的深入教程

查看教程

資源

查找開發資源並獲得問題解答

查看資源