当前位置: 首页>数据库>正文

语音增强 PercepNet 降噪模型 的解析与实现

参考

《A Hybrid DSP/Deep Learning Approach to Real-Time Full-Band Speech Enhancement》

《A Perceptually-Motivated Approach for Low-Complexity, Real-Time Enhancement of Fullband Speech》

注:由于文章包含许多LaTeX公式,可能需要反复刷新才能渲染成功,或者使用google浏览器。

Python 实现

见:https://github.com/AestheTech163/PercepNet

摘要

? ? ? ? 过去语音增强主要以谱减、谱估计方法对复数谱的幅值调整;近年来基于深度学习的主流语音增强,是直接调整短时傅里叶频谱,这导致计算量过大。下面介绍的PercepNet可以用非常少的计算量,达到实时地、高质量地语音增强;其技术以人类的听觉感知、语音的周期性为基础。

2 信号模型

语音增强 PercepNet 降噪模型 的解析与实现,\begin{aligned}&x(n):\quad 干净语音信号   \ &\eta(n):\quad 房间内的加性噪声 \&h(n):\quad 从说话人到麦克风的冲击响应\end{aligned},第1张

带噪语音信号的模型为:

语音增强 PercepNet 降噪模型 的解析与实现,\begin{aligned} y(n) &= (x\ast h)(n) + \eta(n)\quad ,其中\ast为卷积\&=((p+u)*h)(n) + \eta(n)\&=\underbrace{(p*h)(n)}_{周期分量} + \underbrace{(u*h)(n)+\eta(n)}_{随机分量} \end{aligned},第2张

进一步,可以将干净的语音信号分解为局部周期分量语音增强 PercepNet 降噪模型 的解析与实现,p(n),第3张随机分量语音增强 PercepNet 降噪模型 的解析与实现,u(n),第4张,即有语音增强 PercepNet 降噪模型 的解析与实现,x(n) = p(n) + u(n),第5张。目标是构造一个强化的信号语音增强 PercepNet 降噪模型 的解析与实现,\hat{x}(n) = \hat{p}(n) + \hat{u}(n),第6张在听觉感知上尽可能接近语音增强 PercepNet 降噪模型 的解析与实现,x(n),第7张(这是核心思想)。随机分量由于其近乎完全随机,而环境噪声也有天然的随机性,因此将干净的随机分量从受随机噪声污染的信号中分离出来是不可能的。不过,我们只需要语音增强 PercepNet 降噪模型 的解析与实现,\hat{x}(n),第8张的随机部分听起来像语音增强 PercepNet 降噪模型 的解析与实现,u(n),第4张即可。(比如生成两段高斯白噪声,它们自然是完全不同的,但是听起来是一样的感觉)可以通过将语音增强 PercepNet 降噪模型 的解析与实现,(u*h)(n) + \eta(n),第10张滤波成和语音增强 PercepNet 降噪模型 的解析与实现,u(n),第4张一样的频谱包络即可。另一方面,环境噪声不具有强周期性,因此可以较容易地将周期分量语音增强 PercepNet 降噪模型 的解析与实现,p(n),第3张分离出来。再次,还是可以通过使得语音增强 PercepNet 降噪模型 的解析与实现,\hat{p}(n),第13张的基频和频谱包络逼近语音增强 PercepNet 降噪模型 的解析与实现,p(n),第3张即可。

小结一下,我们尝试构造一个增强的语音信号,它满足如下两个条件:1)它有和干净语音相同的频谱包络,2)它在每个频率分量上都具有和干净语音信号相同的周期-随机比率;并且以人对频率的感知粒度(ERB子带)进行构造。

2.1 子带

大部分的噪声具有宽频带,并且频谱较为平滑;语音的周期和非周期分量都具有平滑的频谱包络,这使得我们只需 34 个子带就可以表示 0~20k Hz范围的频谱。(类似于求积分,函数曲线(包络)变化的越剧烈,要达到同样的积分精度,就需要更细致地划分积分区间;因此越平滑,越利于使用少量子带表达频谱)不过,这些子带不是等距的,而是根据人类听觉的等效矩形带宽来分布的。

2.2 增益

语音增强 PercepNet 降噪模型 的解析与实现,\begin{aligned}&\boldsymbol{ \mathbf {x} }(l), \boldsymbol{ \mathbf {y} }(l):  分别是干净语音x(n)和带噪语音y(n)的频谱\&\boldsymbol{ \mathbf {x}}_{b},\boldsymbol{ \mathbf{y}}_{b} : 分别是干净语音x(n)和带噪语音y(n)的第b个子带\&\mathit {X}_{b} =||\mathbf{x}_{b}||_2 \&\mathit{Y}_{b} = ||\mathbf{y}_{b}||_2\\end{aligned},第15张

为了在每个子带得到和干净频谱相同的包络,我们使用如下理想率掩码语音增强 PercepNet 降噪模型 的解析与实现,g_b,第16张作用到 带噪语音的子带上,就能使得增强信号的(每个子带的)能量等于干净信号的能量。

语音增强 PercepNet 降噪模型 的解析与实现,g_{b} = \frac{\mathit{X}_b}{\mathit{Y}_b},第17张

当语音只包含随机分量时,作用语音增强 PercepNet 降噪模型 的解析与实现,g_b,第16张到语音第语音增强 PercepNet 降噪模型 的解析与实现,b,第19张个子带上去,按照上面的讨论,就会得到和干净的随机分量难以区分的增强信号;另一方面,当语音只包含周期分量时,作用语音增强 PercepNet 降噪模型 的解析与实现,g_b,第16张得到的增强语音会比干净语音要粗糙一点,这是因为我们使用的是子带,谐波间隔小于子带粒度,所以谐波间的噪声是无法去除的,尽管它们的能量一样(参考亚马逊的官方博客或者我根据其整理的笔记https://github.com/AestheTech163/PercepNet/tree/main/follow_AMS_blog)。为此,我们需要梳状滤波器Comb Filter来滤除基频的谐波间噪声。

3 音高滤波

我们使用基于基频的梳状滤波(Comb Filtering),对基频的谐波间噪声形成破坏性干扰;对于有限的帧长(20ms)梳状滤波可以达到比STFT精细得多的频谱滤波。为了估计基频,我们使用一种基于相关函数和动态规划的算法(对此,我基于google开源算法,改造、简化了一版实时基频估计算法,见:https://github.com/AestheTech163/TaoSbeechDSP/tree/main/f0tracker)。

3.1 滤波

在Rnnoise中就已经使用过一个最简单的梳状滤波器,可以将谐波间噪声降低 3dB;在这里,我们将使用更强的、非因果的梳状滤波,其传递函数为:

语音增强 PercepNet 降噪模型 的解析与实现,H_M(z) = \sum_{k=-M}^{M}w_kz^{-kT},\quad 其中 \Sigma_{k}w_k = 1, 而T为浊音信号的周期,第21张

经过语音增强 PercepNet 降噪模型 的解析与实现,H_M(z),第22张滤波后的噪声部分以系数语音增强 PercepNet 降噪模型 的解析与实现,\sigma_w^2=\Sigma_{k}w_k^2,第23张进行减弱,这里做下简单解释:因为周期分量在前后多个以周期为间隔的片段上是相同的,因此使用使用语音增强 PercepNet 降噪模型 的解析与实现,w_k,第24张进行加权平均后,仍然是原来的值,即能量不变;我们使用语音增强 PercepNet 降噪模型 的解析与实现,u_c(n),第25张表示随机分量语音增强 PercepNet 降噪模型 的解析与实现,u(n),第4张滤波后的信号,即语音增强 PercepNet 降噪模型 的解析与实现,u_c(n) = \sum_{k} w_k u(n-kT),第27张,因而经过滤波后,其能量为:

语音增强 PercepNet 降噪模型 的解析与实现,\begin{aligned} \mathbb{E}\{u_c(n)^2\} &= \mathbb{E}\{(\sum_k w_ku(n-kT))^2\}\&=\sum_k w_k^2\mathbb{E}\{u(n-kT)^2\} + \sum_{k \ne j}w_kw_j\mathbb{E}\{u(n-kT)u(n-jT)\}  \&= \mathbb{E}\{u_n^2\}\sum_kw_k^2\end{aligned},第28张

这里用到了,语音增强 PercepNet 降噪模型 的解析与实现,u(n),第4张在不同时刻的非相关性(言外之意还有语音增强 PercepNet 降噪模型 的解析与实现,u(n),第4张是 0 均值),因此上面的第二项为 0;以及噪声的平稳性使得第一项的期望可以拿到求和外面来。

对于语音增强 PercepNet 降噪模型 的解析与实现,w_k,第24张作者使用了Hann窗口,虽然没有矩形窗那样得到最大的噪声抑制效果,但是由于人的听觉系统掩蔽效应,残存的噪声实际上听起来比理论上更弱。当 M=5 时,减弱了语音增强 PercepNet 降噪模型 的解析与实现,-10*\mathrm{log}_{10}\sigma_w^2 = 9.03\mathrm{dB},第32张,实际中,会根据允许的最大延迟对 Comb 窗口进行截断。梳状滤波在时域进行,结果记为语音增强 PercepNet 降噪模型 的解析与实现,\hat{p}(n),第13张,其STFT记为语音增强 PercepNet 降噪模型 的解析与实现,\mathbf{p}_b(l),第34张

3.2 滤波强度

梳状滤波的强度非常重要:强度不足,则谐波间噪声导致声音听起来有些糊;强度太大,则会导致声音太机械化(事实上,这也是PercepNet死磕了Rnnoise中提出的观点,即这个强度比较难确定,因此这也是PercepNet的核心)。这里,作者设计了可学习的目标,即 周期-随机比,这使得我们可以利用神经网络来学习和预测。

定义“音高相干 pitch-coherence” 为信号的复数谱与其周期分量之间的余弦距离,这个量是对每个子带单独计算的,为了保持简洁我们略去子带下标;例如:干净语音的音高相干为:

语音增强 PercepNet 降噪模型 的解析与实现,q_x := \frac{\mathfrak{R}[\mathbf p^{\mathrm H} \mathbf x]}{||\mathbf p||\cdot||\mathbf x||}\quad ,其中\cdot^{\mathrm H}为求共轭转置 ,\mathfrak{R}[\cdot]为求复数的实部,第35张

同样我们可以定义带噪语音的音高相干为语音增强 PercepNet 降噪模型 的解析与实现,q_y := (\mathfrak{R}[\mathbf p^{\mathrm H} \mathbf y]) / (||\mathbf p||\cdot||\mathbf y||),第36张;考虑到语音增强 PercepNet 降噪模型 的解析与实现,\hat{\mathbf p},第37张是由带噪语音经过因子语音增强 PercepNet 降噪模型 的解析与实现,\sigma_w^2,第38张抑制得到的,那么估计量语音增强 PercepNet 降噪模型 的解析与实现,\hat{\mathbf p},第37张的音高相干可以由下式来近似:

语音增强 PercepNet 降噪模型 的解析与实现,q_{\hat{p}} = \frac{q_y}{\sqrt{(1-\sigma_w^2)q_y+\sigma_w^2}},第40张

观察分子分母同除以语音增强 PercepNet 降噪模型 的解析与实现,q_y,第41张,可以发现语音增强 PercepNet 降噪模型 的解析与实现,q_{\hat{p}},第42张语音增强 PercepNet 降噪模型 的解析与实现,q_y,第41张的单调增函数,且当语音中不含随机分量时有语音增强 PercepNet 降噪模型 的解析与实现,q_{\hat{p}} = q_y = 1,第44张

接下来,我们定义音高滤波强度为语音增强 PercepNet 降噪模型 的解析与实现,r \in[0,1],第45张,用语音增强 PercepNet 降噪模型 的解析与实现,\hat{\mathbf p},第37张语音增强 PercepNet 降噪模型 的解析与实现,\mathbf y,第47张的凸组合语音增强 PercepNet 降噪模型 的解析与实现,\mathbf z = (1-r)\mathbf y + r\hat{\mathbf p},第48张作为音高增强后的信号,目的使得语音增强 PercepNet 降噪模型 的解析与实现,q_z=q_x,第49张成立,这也就是上面想达成的第二个条件。当语音增强 PercepNet 降噪模型 的解析与实现,r=0,第50张时则没有滤波,当语音增强 PercepNet 降噪模型 的解析与实现,r=1,第51张时则完全使用估计语音增强 PercepNet 降噪模型 的解析与实现,\hat{\mathbf p},第37张,因此语音增强 PercepNet 降噪模型 的解析与实现,\mathbf z,第53张的音高相干满足语音增强 PercepNet 降噪模型 的解析与实现,q_z\in[q_y,q_{\hat{p}}],第54张。若干净语音的音高相干在该区间中,则语音增强 PercepNet 降噪模型 的解析与实现,r,第55张有解,此时方程如下:

语音增强 PercepNet 降噪模型 的解析与实现,\frac{\mathfrak{R}[\mathbf p^{\mathrm H} ((1-r)\mathbf y+r \hat{\mathbf p})]}{||\mathbf p|| \cdot ||(1-r)\mathbf y+r \hat{\mathbf p}||} = q_x\quad (*),第56张

3.2.1 滤波强度语音增强 PercepNet 降噪模型 的解析与实现,r,第55张的求解

下面我们对方程语音增强 PercepNet 降噪模型 的解析与实现,(*),第58张的求解做一些讨论,由内积和范数的齐次性,对语音增强 PercepNet 降噪模型 的解析与实现,(*),第58张式左边分子分母同乘以语音增强 PercepNet 降噪模型 的解析与实现,\frac{1}{1-r},第60张,并令语音增强 PercepNet 降噪模型 的解析与实现,\alpha=\frac{r}{1-r},第61张得:

语音增强 PercepNet 降噪模型 的解析与实现,\frac{\mathfrak{R}[\mathbf p^{\mathrm H} (\mathbf y+\alpha \hat{\mathbf p})]}{||\mathbf p|| \cdot ||\mathbf y+\alpha \hat{\mathbf p}||} = q_x\quad (**),第62张

再次由内积的线性性,并且考虑到语音增强 PercepNet 降噪模型 的解析与实现,\alpha,第63张是一个实数,可以拿到运算语音增强 PercepNet 降噪模型 的解析与实现,\mathfrak{R}[\cdot],第64张外面,得到:

语音增强 PercepNet 降噪模型 的解析与实现,\frac{\mathfrak{R}[\mathbf p^{\mathrm H} \mathbf y]}{||\mathbf p||} + \frac{\alpha \ \mathfrak{R}[\mathbf p^{\mathrm H}  \hat{\mathbf p}]}{||\mathbf p||}= q_x \cdot ||\mathbf y+\alpha \hat{\mathbf p}||,第65张

语音增强 PercepNet 降噪模型 的解析与实现,q_y,q_{\hat p} ,第66张的定义,代入上式化为:

语音增强 PercepNet 降噪模型 的解析与实现,q_y||\mathbf y|| + q_{\hat p}||\hat{\mathbf p}|| = q_x[(\mathbf y + \alpha \hat{\mathbf p})^{\mathrm H}(\mathbf y + \alpha \hat{\mathbf p})]^{\frac{1}{2}},第67张

两边平方,得:

语音增强 PercepNet 降噪模型 的解析与实现,q_y^2 ||\mathbf y||^2 + \alpha q_{\hat p}||\hat{\mathbf p}||^2 +2\alpha q_y q_{\hat p}||\mathbf y||\cdot||\hat{\mathbf p}|| = q_x^2[||\mathbf y||^2 + 2\alpha \mathfrak{R}[\mathbf y^{\mathrm H} \hat{\mathbf p} + \alpha^2||\hat{\mathbf p}||^2] ,第68张

整理成关于语音增强 PercepNet 降噪模型 的解析与实现,\alpha,第63张的一元二次方程:

语音增强 PercepNet 降噪模型 的解析与实现,||\hat{ \mathbf p}||^2(q_{\hat{p}}^2 - q_x^2) \alpha^2 + 2(q_y q_{\hat p} ||\hat{\mathbf p}||\cdot||\mathbf y|| - q_x^2\mathfrak{R}[\mathbf y^{\mathrm H}\hat{\mathbf p}])\alpha + (q_y^2-q_x^2)||\mathbf y||^2 = 0,第70张

由求根公式,并略去负根得:

语音增强 PercepNet 降噪模型 的解析与实现,\alpha =\frac{\sqrt{b^2 + a(q_x^2-q_y^2)}\ -b} {\frac{||\hat{\mathbf p}||}{||\mathbf y||}a} \quad (***),第71张

其中:语音增强 PercepNet 降噪模型 的解析与实现,a=q_{\hat p}^2-q_x^2, b=q_y q_{\hat p}-q_x^2\frac{\mathbf y ^{\mathrm H} \hat {\mathbf p}}{||\mathbf y|| \cdot ||\hat{\mathbf p}||},第72张

最后,由前面语音增强 PercepNet 降噪模型 的解析与实现,\alpha = \frac{r}{1-r},第73张求得?语音增强 PercepNet 降噪模型 的解析与实现,r = \frac{\alpha}{1+\alpha},第74张,这就是最终的结果。

不过,我推导的结果似乎和论文中有些不同,要想得到和论文一致的结果,需要在上语音增强 PercepNet 降噪模型 的解析与实现,(***),第75张式中令语音增强 PercepNet 降噪模型 的解析与实现,\frac{||\hat{\mathbf p}||}{||\mathbf y||} = 1 \quad (\mathrm c1),第76张,且令语音增强 PercepNet 降噪模型 的解析与实现,\frac{\mathfrak{R}[\mathbf y ^{\mathrm H} \hat{\mathbf p}]}{||\mathbf y||\cdot ||\hat{\mathbf p}||} =  q_y q_{\hat p} \quad (\mathrm c2),第77张

上面第一项语音增强 PercepNet 降噪模型 的解析与实现,(\mathrm c1),第78张可以认为近似成立,因为在发浊音时,带噪语音中以周期分量为主;因而在能量上语音增强 PercepNet 降噪模型 的解析与实现,\mathbf y,第47张语音增强 PercepNet 降噪模型 的解析与实现,\hat{\mathbf p},第37张相近。

对于第二项语音增强 PercepNet 降噪模型 的解析与实现,(\mathrm c2),第81张,假设浊音中的周期分量和随机分量(包含环境噪声)是加性的,考虑语音增强 PercepNet 降噪模型 的解析与实现, \mathbf y=\mathbf p+\mathbf w, \hat{\mathbf p}=\mathbf p+ \beta\mathbf w,第82张,则语音增强 PercepNet 降噪模型 的解析与实现,q_y = \frac{\mathfrak{R}[\mathbf p^{\mathbf H}\mathbf p]+\mathfrak{R}[\mathbf u^{\mathbf H}\mathbf p]}{||\mathbf p||\cdot ||\hat{\mathbf p}||},第83张,且语音增强 PercepNet 降噪模型 的解析与实现,q_{\hat p} = \frac{\mathfrak{R}[\mathbf p^{\mathbf H}\mathbf p]+\mathfrak{R}[\mathbf (\beta u)^{\mathbf H}\mathbf p]}{||\mathbf p||\cdot ||\hat{\mathbf p}||},第84张

因此,有:语音增强 PercepNet 降噪模型 的解析与实现,q_y q_{\hat p} = \frac{\mathfrak{R}[||\mathbf p||^2 + \mathbf u^{\mathrm H} \mathbf p+ (\beta \mathbf u)^{\mathrm H} \mathbf p + \frac{(\beta \mathbf u)^{\mathrm H}\mathbf p\cdot \mathbf u^{\mathrm H} \mathbf p}{||\mathbf p||^2}]}{||\mathbf y|| \cdot ||\hat{\mathbf p}||}\quad (\rm d3),第85张

同样,有:语音增强 PercepNet 降噪模型 的解析与实现,\frac{\mathbf y^{\mathrm H}\hat{\mathbf p}}{||\mathbf y||\cdot ||\hat{\mathbf p}||}=\frac{\mathfrak{R}[||\mathbf p||^2 + (\beta \mathbf p)^{\mathrm H}\mathbf p + \mathbf u^{\mathrm H} \mathbf p + \beta \mathbf u^{\mathrm H} \mathbf u]}{||\mathbf y||\cdot ||\hat{\mathbf p}||} \quad (\rm d4),第86张

对比上两式的不同的部分的绝对值大小,由 Cauchy 不等式得:

语音增强 PercepNet 降噪模型 的解析与实现,\left | \frac{(\beta \mathbf u)^{\mathrm H}\mathbf p\cdot \mathbf u^{\mathrm H} \mathbf p}{||\mathbf p||^2} \right | \le  \left | \frac{\beta ||\mathbf u||\cdot||\mathbf p||\cdot ||\mathbf u||\cdot||\mathbf p||}{||\mathbf p||^2} \right | = \beta \mathbf u ^{\mathrm H}\mathbf u,第87张

语音增强 PercepNet 降噪模型 的解析与实现,\beta,第88张是一个很小的数,那么当语音增强 PercepNet 降噪模型 的解析与实现,||\mathbf u||,第89张较小时,上两式语音增强 PercepNet 降噪模型 的解析与实现,(\rm d3),(d4),第90张中的不同的部分的绝对值就会很小,以至于可以忽略。

最后,结合实践,我得出以下结论:

1)经过上面的讨论,原论文中的近似值是合理的,至少是我可以理解的。

2)事实上,我在 PercepNet 的 Python 复现中,对比了原论文的公式,和上面推导的严格公式语音增强 PercepNet 降噪模型 的解析与实现,(***),第75张,实践证明对模型的结果没多大影响。

3)严格公式语音增强 PercepNet 降噪模型 的解析与实现,(***),第75张虽然计算上稍稍复杂了一点,但是由于这些计算仅仅发生在训练阶段,因此我建议直接使用严格公式。

接着原文讨论

在噪声水平很高的环境下,有可能我们估计的周期分量语音增强 PercepNet 降噪模型 的解析与实现,\hat{\mathbf p},第37张的音高相干本身比干净语音的音高相干还要低;此时语音增强 PercepNet 降噪模型 的解析与实现,r,第55张无解,我们能做的最好的就是令语音增强 PercepNet 降噪模型 的解析与实现,r=1,第51张,且计算一个增益修正因子语音增强 PercepNet 降噪模型 的解析与实现,g^{(att)},第96张,定义如下:

语音增强 PercepNet 降噪模型 的解析与实现,g^{(att)} = \begin{cases} \sqrt {\frac{1+n_0-q_x^2}{1+n_0-q_{\hat{p}}^2}}, \quad &q_{\hat p} < q_x\1, &\text{otherwise}\end{cases},第97张

在条件语音增强 PercepNet 降噪模型 的解析与实现,q_{\hat p} < q_x,第98张下,并且在最坏的情况下:干净语音包含纯周期分量(语音增强 PercepNet 降噪模型 的解析与实现,q_x \approx 1,第99张),且噪声很大,使得语音增强 PercepNet 降噪模型 的解析与实现,q_{\hat p} \approx 0,第100张,此时语音增强 PercepNet 降噪模型 的解析与实现,g^{(att)} = 0.03/1.03,第101张;因此语音增强 PercepNet 降噪模型 的解析与实现,g^{(att)} \in (0.03/1.03, 1),第102张,最大抑制为语音增强 PercepNet 降噪模型 的解析与实现,10\cdot\log_{10}(g^{(att)})^2 = -15.36\mathrm{dB},第103张,此值为噪声对音调掩蔽效应的阈值。

4 DNN 模型

4.0 输入和输出

输入特征包括:幅度谱的 34 个子带、34 个子带的音高相干、1 个基频、一个基频置信度(相关值)共 70 个特征。其中 34 个幅度谱子带是相对当前的未来第 M 帧的,而 34 个音高相干是相对当前帧计算的,但是在其计算周期分量语音增强 PercepNet 降噪模型 的解析与实现,\hat{\mathbf p},第37张时,已经利用了未来的数据,所以音高相干只能用当前帧的(算法的延迟是受限的)。

4.0.1 关于基频特征的讨论

这里再做一些额外的讨论:作者使用了一个标量 F0 来表示音高信息,一个标量给到的直接信息太少了,我觉得这不是最好的 pitch-representation,虽然基频(指的是音高)对于计算机来说只是一个标量,但是对于我们来说,基频还意味着各次谐波;因此,我尝试了两种 pitch-representation,分别是:

1)Pitch Embedding

使用深度学习框架的 Embedding 层,但该方法有频率分辨率问题。

2)Continuous Pitch Representation(CPR)

原论文上的频响图就是一例子,例如:对于 200 Hz的基频,可以将其展开成如下200Hz的频响图曲线(下图 1);但既然手动构造一个曲线,也没必要使用这么复杂的曲线,因此我使用了 warped-cos 曲线(下图 2),该方法没有频率分辨率问题。

CPR 的计算过程,其中语音增强 PercepNet 降噪模型 的解析与实现,corr,第105张为对应基频的相关强度,我们直接将其标量乘到表示向量上去,这相当于使用基频置信度语音增强 PercepNet 降噪模型 的解析与实现,corr,第105张对生成的 d 维空间向量语音增强 PercepNet 降噪模型 的解析与实现,p_{cpr},第107张进行伸缩,如下:

语音增强 PercepNet 降噪模型 的解析与实现,\begin{aligned}&给定  f0, corr\fbin &= \rm{linspace}(F0_{min}, F_{max}, N)\p_{cpr} &= cos^4(\pi \cdot fbin / f0)\p_{cpr} &= p_{cpr} \ corr \p_{cpr} &= \rm{stop\_gradient}(p_{cpr})\p_{cpr} &= \mathbf A p_{cpr} \quad \quad, \mathbf A 是 d\times N可学习矩阵\\end{aligned},第108张

语音增强 PercepNet 降噪模型 的解析与实现,第109张
图1:200Hz的CombFilter频响曲线
语音增强 PercepNet 降噪模型 的解析与实现,第110张
图2:200Hz的warped-cos曲线

上面两种表示都是将标量展开成向量,虽然我们不知道每一帧准确的频谱包络,但是给定基频之后,我们可以肯定某些频点的能量不应该很大,谐波频点的能量有很大概率不会太低,因此期望展开的 representation 能给到模型更多的信息。

再讨论原论文使用一个标量:1)或许神经网络可以学习到基频的某种连续表示,但这也需要消耗大量神经元;2)另一方面,一个标量也可以看作 d 维向量空间中的一维子空间,而不同的基频输入就意味着在这个子空间轴上来回滑动,只利用向量的大小而忽略向量的方向,显然不利于神经网络进行区分;而上面的 CPR 表示,就类似于“词向量word embedding” 给不同的单词以不同的方向,只不过在那里是学习到的方向,而这里是手动构造的。

回到原论文:输出层对每个子带计算两个量:语音增强 PercepNet 降噪模型 的解析与实现,\hat{g}_b,\hat{r}_b,第111张;用于先音高滤波:语音增强 PercepNet 降噪模型 的解析与实现,\hat{r}(l)=\mathrm{Extrapolate}[\hat{r}_b]; \mathbf z(l) = (1-\hat{r}(l)) \mathbf y + \hat{r}(l) \hat{\mathbf p},第112张,再进行噪声抑制:语音增强 PercepNet 降噪模型 的解析与实现,\hat{g}(l) =  \mathrm{Extrapolate}[\hat{g}_b];\quad \hat{\mathbf x}(l) = \hat{g}(l) \cdot \mathbf z(l),第113张

4.1 训练数据

训练数据,这里不再讨论;我在实践中使用的信噪比是语音增强 PercepNet 降噪模型 的解析与实现,[-10\rm dB,30dB],第114张范围,参考 DNS 官方的脚本来构造数据集。

4.2 损失函数

语音增强 PercepNet 降噪模型 的解析与实现,\begin{aligned}\mathcal L_g &= \sum_b (g_b^{\gamma} - \hat{g}_b^{\gamma})^2 + C\sum_b (g_b^{\gamma} - \hat{g}_b^{\gamma})^4 \L_r &= \sum_b ((1-r_b)^{\gamma} - (1-\hat{r}_b)^{\gamma})^2\end{aligned},第115张

如上式,损失函数分为两个部分:关于增益损失,作者采用了响度域损失(声音的感知响度与能量的某次方呈比例);实际上分析下来,和语音增强 PercepNet 降噪模型 的解析与实现,\gamma =1,第116张时对比,当语音增强 PercepNet 降噪模型 的解析与实现,\gamma=0.5,第117张时,因为增益小于 1,所以语音增强 PercepNet 降噪模型 的解析与实现,g_b,\hat{g}_b,第118张之间的误差被放大了。另又添加了一个 4 次项,来进一步惩罚较大误差。

由于函数 sqrt 的非线性,使得损失在语音增强 PercepNet 降噪模型 的解析与实现,r_b\approx1,第119张时,比在语音增强 PercepNet 降噪模型 的解析与实现,r_b \approx 0,第120张时的损失更大,在前者情况下,噪声比较大,此时的音高滤波对降低谐波间噪声很重要,因此此时的误差更需要惩罚;后者情况下,噪声很小,那么进行多强的音高滤波其实得到的结果都差不多,因而误差大点也没太大关系。

5 包络后滤波

为了进一步抑制噪声、增强语音,我们对 DNN 的输出语音增强 PercepNet 降噪模型 的解析与实现,\hat{g}_b,第121张做一些调整:对噪声更大的子带进一步减小增益系数,另一方面增大干净子带以补偿能量,后滤波公式为:语音增强 PercepNet 降噪模型 的解析与实现,\hat{g}_b^{(w)} = \hat{g}_b\sin(\pi/2\cdot\hat{g}_b),第122张,其图像如下,可以发现函数将区间语音增强 PercepNet 降噪模型 的解析与实现,0<\hat{g}_b<0.2,第123张挤压到很小的范围;事实上由语音增强 PercepNet 降噪模型 的解析与实现,\sin,第124张函数在 0 点的 Taylor 展开可知当语音增强 PercepNet 降噪模型 的解析与实现,\hat{g}_b\to0,第125张时,语音增强 PercepNet 降噪模型 的解析与实现,\hat{g}_b^{(w)},第126张语音增强 PercepNet 降噪模型 的解析与实现,\hat{g}_b,第121张的平方高阶小。

语音增强 PercepNet 降噪模型 的解析与实现,第128张
gain warp function

最后,为了进一步补偿由 warp 函数滤波造成信号整体的能量降低,再添加一项与子带无关的整体补偿项,它作用到所有的增益语音增强 PercepNet 降噪模型 的解析与实现,\hat{g}_b,第121张上去:

语音增强 PercepNet 降噪模型 的解析与实现,G=\sqrt{\frac{(1+\beta)\frac{E_0}{E_1}}{1+\beta (\frac{E_0}{E_1})^2}},第130张

其中:语音增强 PercepNet 降噪模型 的解析与实现,E_0,第131张是使用模型输出增益抑制后信号总能量,而语音增强 PercepNet 降噪模型 的解析与实现,E_1,第132张是使用 warped 增益抑制后的信号总能量。


https://www.xamrdz.com/database/6bg1994034.html

相关文章: