使用 MVDR 波束成形进行语音增强
作者: Zhaoheng Ni
1. 概述
本教程介绍了如何使用 TorchAudio 应用最小方差无失真响应 (MVDR) 波束成形来估计增强语音。
步骤:
-
通过将干净/噪声的幅度除以混合幅度来生成理想比率掩码(IRM)。
-
使用
torchaudio.transforms.PSD()
估计功率谱密度(PSD)矩阵。 -
使用 MVDR 模块(
torchaudio.transforms.SoudenMVDR()
和torchaudio.transforms.RTFMVDR()
)估计增强后的语音。 -
对计算参考麦克风的相对传递函数(RTF)矩阵的两种方法(
torchaudio.functional.rtf_evd()
和torchaudio.functional.rtf_power()
)进行基准测试。
2. 准备工作
2.1. 导入包
首先,我们安装并导入必要的包。
mir_eval
、pesq
和 pystoi
包是用于评估语音增强性能的必备工具。
2.2. 下载音频数据
多声道音频示例选自 ConferencingSpeech 数据集。
原始文件名为
SSB07200001\#noise-sound-bible-0038\#7.86_6.16_3.00_3.14_4.84_134.5285_191.7899_0.4735\#15217\#25.16333303751458\#0.2101221178590021.wav
其生成使用了:
-
SSB07200001.wav
来自 AISHELL-3 (Apache License v.2.0) -
noise-sound-bible-0038.wav
来自 MUSAN (Attribution 4.0 International — CC BY 4.0)
2.3. 辅助函数
3. 生成理想比率掩码 (IRMs)
3.1. 加载音频数据
注意:为了提高计算的鲁棒性,建议将波形表示为双精度浮点数(torch.float64
或 torch.double
)值。
3.2. 计算短时傅里叶变换 (STFT) 系数
3.2.1. 可视化混合语音
我们使用以下三个指标来评估混合语音或增强语音的质量:
-
信噪失真比 (SDR)
-
尺度不变信噪比 (Si-SNR,在某些论文中也称为 Si-SDR)
-
语音质量感知评估 (PESQ)
我们还使用短时客观可懂度(STOI)指标来评估语音的可懂性。
3.2.2. 可视化纯净语音
3.2.3. 可视化噪声
3.3. 定义参考麦克风
我们选择阵列中的第一个麦克风作为演示的参考通道。参考通道的选择可能取决于麦克风阵列的设计。
您还可以应用一个端到端的神经网络,该网络同时估计参考通道和PSD矩阵,然后通过MVDR模块获得增强的STFT系数。
3.4. 计算IRMs
3.4.1. 可视化目标语音的IRM
3.4.2. 可视化噪声的IRM
4. 计算 PSD 矩阵
torchaudio.transforms.PSD()
计算给定多通道复数 STFT 系数和时频掩码的时不变 PSD 矩阵。
PSD 矩阵的形状为 (…, 频率, 通道, 通道)。
5. 使用 SoudenMVDR 进行波束成形
5.1. 应用波束成形
torchaudio.transforms.SoudenMVDR()
接收混合语音的多通道复数值短时傅里叶变换(STFT)系数、目标语音和噪声的功率谱密度(PSD)矩阵,以及参考通道输入。
输出为增强语音的单通道复数值 STFT 系数。然后,我们可以通过将此输出传递给 torchaudio.transforms.InverseSpectrogram()
模块来获取增强后的波形。
5.2. SoudenMVDR 的结果
6. 使用 RTFMVDR 进行波束成形
6.1. 计算 RTF
TorchAudio 提供了两种计算目标语音 RTF 矩阵的方法:
-
torchaudio.functional.rtf_evd()
,该方法通过对目标语音的PSD矩阵进行特征值分解来获取RTF矩阵。 -
torchaudio.functional.rtf_power()
,该方法应用了幂迭代法。您可以通过参数n_iter
指定迭代次数。
6.2. 应用波束成形
torchaudio.transforms.RTFMVDR()
接收混合语音的多通道复数值短时傅里叶变换(STFT)系数、目标语音的相对传递函数(RTF)矩阵、噪声的功率谱密度(PSD)矩阵以及参考通道输入。
输出是增强语音的单通道复数值 STFT 系数。然后,我们可以通过将此输出传递给 torchaudio.transforms.InverseSpectrogram()
模块来获得增强后的波形。