APP下载

基于FullSubNet 的单通道实时语音增强算法

2024-05-18许苏魁万家山潘敬敏胡婷婷

科学技术创新 2024年9期
关键词:流式频带语音

许苏魁*,万家山,潘敬敏,胡婷婷

(安徽信息工程学院计算机与软件工程学院,安徽芜湖)

引言

语音降噪是语音领域一个古老又基本的话题,旨在从受噪声干扰的信号中有效地分离出纯净的目标信号。传统的语音降噪主要是基于数字信号处理的方法,常用的有谱减法[1]、滤波法[2]等。但是这些方法都是基于噪声稳定性的假设,一旦噪声是非平稳的,比如说是冲激噪声,则降噪效果非常有限。

最近几年,基于深度学习的语音降噪技术得到了巨大的发展,并且也证实了对于非平稳噪声也能有很好的去除能力。基于深度学习的语音降噪技术主要采用的是时频掩蔽(time-frequency mask, TF-Mask)的有监督训练方式,通过学习一个定义在时频域上的二维矩阵的值来进行网络优化。基于神经网络的语音降噪常用的模型有全连接神经网络,卷积神经网络(CNN),循环神经网络(RNN)[3],Transformer[4]等。

然而在实时会议的场景下,为了减少通信的延时,对语音信号的各种处理往往都要求必须采用“一帧进一帧出”的方式,也就是“帧流式”(frame streaming mode)来进行。并且为了防止延时的累积,对于时长为Tframe的一帧数据,模型处理其耗费的时间Tprocess必须满足Tprocess

Hao 等人[5]提出了一种完全依赖于长短时记忆单元(Long Short Term Memory, LSTM)[6]的实时降噪模型FullSubNet,在没有卷积操作的情况下,也取得了很优秀的客观指标提升和主观听感认可。

我们综合考虑语音增强的各项客观指标和性能,以及“帧流式”的易实现性,决定在FullSubNet 的原始模型基础上进行修改。通过手动保存LSTM不同时刻的state信息,以及实现帧级层面的累积拉普拉斯规整,以让整个模型真正可以做到“帧流式”,更方便的应用在实时通信的工程项目里。

本文的主要贡献包括3 个方面:(1) 提出一种基于FullSubNet 的“帧流式”实时语音降噪模型,并且详细介绍了如何实现按帧处理数据和恢复语音。(2) 在“帧流式”模式的基础上,重新测试了DNS 挑战赛的数据集,客观语音质量评估(perceptual evaluation of speech quality, PESQ)[7]指标只有0.1 的下降,并且证明了性能下降的主要原因是按帧做iFFT和overlap and add 操作。(3) 验证了新模型在GPU 和CPU 上的速度均满足实时处理的要求。

1 任务定义

语音信号降噪任务在时域上可以定义为

式中:x(t),s(t),n(t)分别表示带噪语音,纯净语音和噪声;t 是时域的索引。我们的任务目标是在观测到带噪信号x(t)的情况下尽可能的恢复出原始的纯净语音s(t)。如果我们对公式两边做短时傅里叶变换(short time fourier transform, STFT),得到其在STFT域的表示为

式中:f 是频率域的下标。假设一段语音总共有T 帧,做完FFT 之后的频域通道共有F 个通道,那么t=1,2,…,T,f=1,2,…,F。

2 全频带- 子频带特征

2.1 全频带特征 对于第t 帧,我们将F 个频域通道的复数模拼接成一个长度为F 的向量,即为该帧的全频带特征,可以记为

因为我们的全频带模型是一个LSTM结构,需要序列输入,因此可以取t=1,2,…,T 的所有Xfull(t)拼成一个序列作为全频带模型的输入,即

3 帧流式实时语音增强模型

3.2 模型训练目标 本文模型输入只有幅度谱,没有相位信息。我们参考复数掩模cIRM 的方式,在没有输入相位,仅输入模长信息的条件下,预测复数谱的实部和虚部对应的mask。

假设带噪信号的STFT谱、预测的复数掩模、恢复后信号的STFT谱的复数值分别为X,M,S,从而有

根据公式可以分别求解出Mr和Mi为

在训练的时候,会把式(9)里的值进行压缩获得cIRM 作为训练目标以加速收敛,即

一般取K=10,C=0.1。在测试的时候,根据式由cIRMr和cIRMi求出Mr和Mi,再代入式得到恢复后语音的复数谱S。

3.3 帧流式实时模型 在训练的时候,我们可以把整句话的特征输入给模型,也就是输入的张量有时间维T,对于单通道的语音,Gfull的输入X~full张量形状可以是[B,F,T],LSTM模型的状态由框架内部处理,比如直接调用torch.nn.LSTM 接口。但是在“帧流式”实时推理时,由于数据是按帧送入模型的,时间维T 消失,对于单句测试有B=1,从而Gfull的输入Xfull(t)形状为[1,F]。因此我们需要重新构建模型,把所有LSTM换成LSTMCell,也就是自己维护LSTM的states 信息。

3.5 按帧复原语音 完整的按帧复原语音的流程如算法1 所示,注意这里用到了信号处理领域的overlap-and-add[9]的操作。

算法1.“帧流式”实时语音增强算法。

4 实验结果

4.1 数据集简介 本文采用 DNS-Challenge InterSpeech2020 的数据集进行实验,该数据集包含来自2 150 个说话人的500 小时干净语音,和包含150 类总计180 小时的噪声。测试集是DNS 挑战赛提供的一个公开测试集,为了计算相关指标,我们选择了该测试集里合成的集合,这个集合有带噪语音对应的纯净语音,可以作为目标计算各项指标。

4.2 训练策略 对于STFT我们采用512 点FFT,帧移256,除了按帧复原时采用的合成窗之外,其他窗函数都是512 点的hanning窗。训练采用整句训练的方式,句子长度统一为3.072 s。为了利用未来信息同时考虑延时的要求,设置τ=2 也就是延时2 帧。子频带特征左右各展开频点N=15。Gfull和Gsub的LSTM隐含层节点数分别为512 和384。采用Adam优化方式,学习率设置为默认的0.001。所有代码在PyTorch 框架[10]下实现。

4.3 评价指标 我们主要关注语音质量感知评估(PESQ)[7]指标,该指标越大越好,并且和主观听感关联最大。

4.4 性能对比 我们关注以下几种策略在DNS 测试集上的PESQ结果,如表1 所示。

表1 不同策略下的性能比较

策略1 是标准的方式,采用整句LSTM训练和测试,语音恢复直接调用框架的iSTFT 接口即可,分析与合成窗采用相同的hanning 窗。策略2 将模型里的LSTM换成了LSTMCell,通过直接映射模型state_dict的方式给LSTMCell 权重赋值,根据算法1 进行“帧流式”的按帧复原测试,采用overlap and add,窗函数采用双正交循环的方式处理。

可以看到,采用策略2 的完全“帧流式”方式,PESQ相比于策略1 下降了约0.13,但是2.85 的PESQ 相比于原始带噪语音的1.82,或者是官方给出的基线模型性能2.37,提升也是相当明显的。

为了分析策略2 最后计算出的PESQ 指标相比于策略1 下降的原因,也为了验证LSTMCell 模型的“帧流式”测试流程正确性,我们进一步尝试了策略3。即将策略2 按帧处理增强后的频域信号S 完整保留下来;待所有时刻的S 全部计算完,拼接成一个完整的时频信号,直接调用框架的iSTFT接口。可以看到,策略3 的PESQ和策略1 完全一致,从而说明策略2 性能下降主要来源于overlap and add 的复原方式。

为了评估真实产品下的实时率,我们测试模型在GPU 和CPU 下处理16 ms 一帧数据的平均耗时。对于CPU如果将模型由torch 转为onnx,则性能会有较大的提升,这可能是PyTorch 对于CPU 并没有做太多优化的原因。相关测试结果如表2 所示。

表2 不同硬件和模型格式下的一帧数据平均耗时比较

可以看到,如果采用GPU的话,16 ms 一帧的数据仅耗时1.5 ms,肯定达到实时性的要求。如果是CPU 的话,通过将模型转为onnx格式,平均耗时3.8 ms,也能达到实时性的要求。

5 结论

本文提出了一种基于LSTM的“帧流式”实时语音增强模型,在系统固定延时32 ms 的前提下,实现“帧流式”的语音增强,在公开的DNS 挑战赛测试集上取得了2.85 的PESQ,相比于原始的带噪语音和官方基线性能提升明显。

同时,本文详细的给出了按帧复原信号的算法流程细节。并且在不同硬件平台上测试了模型的实时率,在GPU 和CPU 上处理16 ms 一帧的语音分别耗时约为1.5 ms 和3.8 ms,基本满足真实的实时通信系统集成要求。

猜你喜欢

流式频带语音
Wi-Fi网络中5G和2.4G是什么?有何区别?
辐流式二沉池的结构优化研究
魔力语音
基于MATLAB的语音信号处理
单音及部分频带干扰下DSSS系统性能分析
基于MQ3与MP3的价廉物美的酒驾语音提醒器
对方正在输入……
双频带隔板极化器
微球测速聚类分析的流式液路稳定性评估
自调流式喷管型ICD的设计与数值验证