语音增强之谱减法

Posted qq_37215867

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了语音增强之谱减法相关的知识,希望对你有一定的参考价值。

语音增强之谱减法

原理介绍

谱减法 (Spectral Subtraction) 是最早出现的语音增强算法之一,由于实现简单且实时性较好,获得了广泛的应用。它假设语音和噪声是加性混合,且噪声是缓慢变化的,通过在静音段估计和更新噪声频谱,从带噪语音谱中减去噪声来增强语音。
y ( n ) y(n) y(n) 为带噪语音信号,由纯净语音信号 x ( n ) x(n) x(n) 和 噪声信号 d ( n ) d(n) d(n) 混合形成
y ( n ) = x ( n ) + d ( n ) y(n)=x(n)+d(n) y(n)=x(n)+d(n)
对等式两边做傅里叶变换转换到频域
Y ( ω ) = X ( ω ) + D ( ω ) Y(\\omega)=X(\\omega)+D(\\omega) Y(ω)=X(ω)+D(ω)
Y ( ω ) Y(\\omega) Y(ω)也可以表示成极坐标形式
Y ( ω ) = ∣ Y ( ω ) ∣ e j ϕ y ( ω ) Y(\\omega)=|Y(\\omega)|e^j\\phi_y(\\omega) Y(ω)=Y(ω)ejϕy(ω)
其中 ∣ Y ( ω ) ∣ |Y(\\omega)| Y(ω)为幅度谱, ϕ y ( ω ) \\phi_y(\\omega) ϕy(ω)为相位谱, D ( ω ) D(\\omega) D(ω)也可以表示成 D ( ω ) = ∣ D ( ω ) ∣ e j ϕ d ( ω ) D(\\omega)=|D(\\omega)|e^j\\phi_d(\\omega) D(ω)=D(ω)ejϕd(ω),谱减法是在幅度谱上进行的, ∣ D ( ω ) ∣ |D(\\omega)| D(ω)无法获得,但是可以用静音段(无语音活动的片段)的平均频谱进行估计和更新,由于相位对于语音的可懂度和质量影响较小,所以用带噪相位 ϕ y ( ω ) \\phi_y(\\omega) ϕy(ω)来代替,纯净语音谱的估计为
X ^ ( ω ) = ( ∣ Y ( ω ) ∣ − ∣ D ^ ( ω ) ∣ ) e j ϕ y ( ω ) \\hatX(\\omega)=(|Y(\\omega)|-|\\hatD(\\omega)|)e^j\\phi_y(\\omega) X^(ω)=(Y(ω)D^(ω))ejϕy(ω)
对估计结果做傅里叶逆变换即可得到增强后的语音。上述的 ∣ Y ( ω ) ∣ − ∣ D ^ ( ω ) ∣ |Y(\\omega)|-|\\hatD(\\omega)| Y(ω)D^(ω)过程可能会产生负的幅度值,这显然是有问题的,早期的做法是通过半波整流将负值直接置零
∣ X ^ ( ω ) ∣ = ∣ Y ( ω ) ∣ − ∣ D ^ ( ω ) ∣  if  ∣ Y ( ω ) ∣ > ∣ D ^ ( ω ) ∣ 0  else  |\\hatX(\\omega)|=\\begincases |Y(\\omega)|-|\\hatD(\\omega)| & \\text if |Y(\\omega)|>|\\hatD(\\omega)| \\\\ 0 & \\text else \\endcases X^(ω)=Y(ω)D^(ω)0 if Y(ω)>D^(ω) else 
谱减法可以拓展到功率谱,假定 d ( n ) d(n) d(n)为零均值,且 d ( n ) d(n) d(n) x ( n ) x(n) x(n)不相关,由幅度谱减公式两边平方,去掉交叉项后得到
∣ X ^ ( ω ) ∣ 2 = ∣ Y ( ω ) ∣ 2 − ∣ D ^ ( ω ) ∣ 2 |\\hatX(\\omega)|^2=|Y(\\omega)|^2-|\\hatD(\\omega)|^2 X^(ω)2=Y(ω)2D^(ω)2
∣ X ^ ( ω ) ∣ 2 |\\hatX(\\omega)|^2 X^(ω)2也可能出现负值,可用前述的半波整流方法处理,上式也可以写成:
∣ X ^ ( ω ) ∣ 2 = H 2 ( ω ) ∣ Y ( ω ) ∣ 2 |\\hatX(\\omega)|^2=H^2(\\omega)|Y(\\omega)|^2 X^(ω)2=H2(ω)Y(ω)2
其中
H ( ω ) = 1 − ∣ D ^ ( ω ) ∣ 2 ∣ Y ( ω ) ∣ 2 H(\\omega)=\\sqrt1-\\frac|\\hatD(\\omega)|^2|Y(\\omega)|^2 H(ω)=1Y(ω)2D^(ω)2
H ( ω ) H(\\omega) H(ω)为增益函数或抑制函数,取值范围为 0 ≤ H ( ω ) ≤ 1 0\\le H(\\omega) \\le 1 0H(ω)1
综上,谱减法更通用的形式可定义为
∣ X ^ ( ω ) ∣ p = ∣ Y ( ω ) ∣ p − ∣ D ^ ( ω ) ∣ p |\\hatX(\\omega)|^p=|Y(\\omega)|^p-|\\hatD(\\omega)|^p X^(ω)p=Y(ω)pD^(ω)p

缺点和改进

谱减法最显著的缺点是会引入“音乐噪声”,由于谱减过程中可能出现负的幅度值,半波整流是一种直接的解决办法,但是这种非线性处理会导致频谱随机频率位置上出现小的、独立的峰值,在时域中表现为明显的多频颤音,也称为“音乐噪声”。如果处理不当,在某些语音段,“音乐噪声”的影响甚至比干扰噪声更为明显。造成“音乐噪声”的常见原因有:

  1. 对谱减过程中负值的非线性处理。
  2. 噪声谱估计不匹配。静音段的平均噪声谱可能与实际语音段的噪声分量有着较大差别,相减后会有残留的孤立噪声段。
  3. 谱估计方法的误差。例如周期图等有偏功率谱估计方法带来的偏差。
  4. 抑制函数有较大的可变性。

为了减小音乐噪声,学者们提出了一系列的改进方法,感兴趣的读者可以自行了解。这里介绍Boll使用的方法,相比直接置零,该方法设置了一个谱值下限。在噪声估计阶段,计算一个最大噪声帧,如果谱减后某时频点的值小于最大噪声帧的对应频点值,则将其替换为相邻帧的最小值。具体可表示为:
∣ X i ^ ( ω ) ∣ = ∣ Y i ( ω ) ∣ − ∣ D ^ ( ω ) ∣  if  ∣ Y i ( ω ) ∣ − ∣ D ^ ( ω ) ∣ > m a x ∣ D ^ ( ω ) ∣ min ⁡ j = i − 1 , i , i + 1 ∣ X i ^ ( ω ) ∣  else  |\\hatX_i(\\omega)|=\\begincases |Y_i(\\omega)|-|\\hatD(\\omega)| & \\text if |Y_i(\\omega)|-|\\hatD(\\omega)| > max|\\hatD(\\omega)| \\\\ \\undersetj=i-1,i,i+1\\min |\\hatX_i(\\omega)| & \\text else \\endcases Xi^(ω)=Yi(ω)

信号去噪基于谱减法去噪matlab源码

一、简介

在语音去噪中最常用的方法是谱减法,谱减法是一种发展较早且应用较为成熟的语音去噪算法,该算法利用加性噪声与语音不相关的特点,在假设噪声是统计平稳的前提下,用无语音间隙测算到的噪声频谱估计值取代有语音期间噪声的频谱,与含噪语音频谱相减,从而获得语音频谱的估计值。谱减法具有算法简单、运算量小的特点,便于实现快速处理,往往能够获得较高的输出信噪比,所以被广泛采用。该算法经典形式的不足之处是处理后会产生具有一定节奏性起伏、听上去类似音乐的“音乐噪声”。

转换到频域后,这些峰值听起来就像帧与帧之间频率随机变化的多频音,这种情况在清音段尤其明显,这种由于半波整流引起的“噪声”被称为“音乐噪声”。从根本上,通常导致音乐噪声的原因主要有:
(1)对谱减算法中的负数部分进行了非线性处理
(2)对噪声谱的估计不准
(3)抑制函数(增益函数)具有较大的可变性
1 原理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、源代码

三、运行结果

在这里插入图片描述

四、备注

完整代码或者仿真咨询添加QQ1575304183

 

以上是关于语音增强之谱减法的主要内容,如果未能解决你的问题,请参考以下文章

单通道语音增强之综述

基于kaldi的iOS实时语音识别(本地)+03+音频采集传输

从语音识别意图记录/保存音频

语音识别,录制的音频去哪了?

语音增强原理之增益因子

如何用python调用百度语音识别