专栏首页腾讯游戏云 再也不用担心网吧开黑队友听不清了!降噪解决方案了解一下?
原创

再也不用担心网吧开黑队友听不清了!降噪解决方案了解一下?

经常逛游戏论坛的朋友会深有感触,很多玩家经常会在论坛里吐槽在网吧开黑的体验很差,噪音太多。在游戏语音开黑的过程中,如果其中一个队友身处网吧,则其他人的耳机总是难免会被各种嘈杂的噪音所充斥,这是十分糟糕的体验,甚至会影响整个团队的发挥,那么在这样的场景下,降噪就成为了提升游戏体验的基本操作。

网吧场景下的降噪难度往往大于普通噪音环境下的降噪难度,其源于网吧的噪音环境和普通的噪声环境差别很大,网吧的噪音来源比较广泛,包括有众多人的聊天、呼喊声,大幅度的鼠标键盘敲击声,桌椅挪动人员走动等等,有些网吧还像理发店那样广播背景音乐及一些语音广播。并且网吧座位离得较近,几乎每个人左右都有很近的邻居,这些近距离的声音互相干扰更加恼人。

消除这些复杂的噪音却不是一件简单的事情,网吧环境下的噪声几乎都是非平稳的,所以传统噪声消除方法难以很好的应用在网吧场景下。腾讯云游戏多媒体引擎GME(Game Multimedia Engine,以下简称 GME)针对网吧场景提出了一套降噪技术解决方案,能在复杂的环境下将噪音对语音的影响降到最低。

如何在复杂的网吧环境下实现降噪?

在网吧嘈杂环境下的降噪诉求是:队友不讲话时,听不到任何其他声音,当队友讲话的时候,希望听到的是队友清晰的声音,当队友话毕其他声音随即静默。

以上要解决的问题可以抽象成嘈杂环境里单一主讲人的通话处理。针对可容忍的体验诉求,需要一个排除主讲人以外声音的语音活性检测算法(VAD)。而这个VAD算法和常规意义的语音检测有所不同,因为它不但要排除掉非语音,还要排除掉主讲人以外的语音,否则队友附近的人的话音甚至环境较远处的嘈杂语音仍会被发送给耳机这头的你。

针对这样的情况,GME朝着满足诉求的方向,给出了这个“VAD”算法,流程如下:

在判断声音性质时,一个要进行的过程是,计算语音的相关性,相关性测度定义如下:

E(\tau )=\sum\limits_{n=0}^{N-1}{{{\left[ s(n)-\beta s(n-\tau ) \right]}^{2}}}\

其中 \beta \ 为增益因子,N\ 为分析帧长。令\frac{\partial E(\tau )}{\partial \beta }=0\,求得:

\beta =\frac{\sum\limits_{n=0}^{N-1}{s(n)-\beta s(n-\tau )}}{\sum\limits_{n=0}^{N-1}{{{s}^{2}}(n-\tau )}}\

从而,有

E(\tau )=\sum\limits_{n=0}^{N-1}{{{s}^{2}}(n)}-\frac{{{\left[ \sum\limits_{n=0}^{N-1}{s(n)s(n-\tau )} \right]}^{2}}}{\sum\limits_{n=0}^{N-1}{{{s}^{2}}(n-\tau )}}\

相对误差能量为

R\left[ E(\tau ) \right]=\frac{E(\tau )}{\sum\limits_{n=0}^{N-1}{{{s}^{2}}(n)}}=1-{{\rho }^{2}}(\tau )

其中

\rho (\tau )=\frac{\sum\limits_{n=0}^{N-1}{s(n)s(n-\tau )}}{\sqrt{\sum\limits_{n=0}^{N-1}{{{s}^{2}}(n)}\sum\limits_{n=0}^{N-1}{{{s}^{2}}(n-\tau )}}}\

为了得到这个结果,还需要做一些预处理:

1,去均值:分析窗口内非零均值或非常低的低频噪声出现时,\rho (\tau )\ 会在所有\tau \上都很大,这对依赖\rho (\tau )\进行清浊分类时的安静段语音尤其麻烦。解决办法是去掉均值:

{{s}^{'}}(n)=s(n)-\frac{1}{N}\sum\limits_{n=0}^{N-1}{s(n)}

2,低通滤波:为减小高频共振峰和高频噪声的影响,要进行一个800赫兹的低通滤波,去掉大部分共振峰影响,并可以再基音频率最高500赫兹时仍能保留其一次,二次谐波,其技术指标要求为:

\frac{1}{T}=8000\text{Hz}\ , \frac{{{\omega }_{c}}}{2\pi }=800\text{Hz},\frac{{{\omega }_{r}}}{2\pi }=1200\text{Hz},1-{{\delta }_{1}}=-0.25\text{dB},{{\delta }_{2}}=-50\text{dB}

据此,由双线性变换法设计一个五阶的滤波器,幅频响应如图:

3,数值滤波:

上述低通滤波可以较为有效的去掉第三个第四个共振峰的影响,但前两个共振峰的影响仍然存在,浊音语音周期性会模糊,为了去掉这一影响,进行数值滤波。数值滤波能正确显现信号的趋势,如上升沿:

y(n)=\frac{1}{2K+1}\sum\limits_{i=-K}^{K}{x(n+i)}

但这个是个非因果的数字系统,为了因果性改写如下:

y(n)=\frac{1}{N}\sum\limits_{i=0}^{N}{x(n-i)}

注意,这个过程引入了算法延时。在一些参数编码原理的语音编码器中,会用LPC过程的残差来估计基音周期,就是因为残差经过“白化”排出了共振峰影响。因为lpc分析主要产出并非为计算基音,而其又涉及加重叠窗又需要求解尤利沃克方程或burg迭代所以本文并未使用。

我们最终关心的是,周期性水平的度量,我们定义如下

{{Z}_{\text{period}}}=\frac{{{\rho }_{\max 1}}+{{\rho }_{\max 2}}+{{\rho }_{\max 3}}}{3}+{{\rho }_{\max }}

当这个周期性水平满足条件后,还要看周期是否满足语音信号基音周期范围:语音信号的基音频率范围是60Hz到500Hz;对于8k采样,用采样周期表示的区间为[80,147],[40,79],[20,39],同时满足周期性和周期范围,我们认为该声音性质具备语音特性。

其他环节,诸如底噪包络跟踪,主讲声强跟踪这里不再详述。

在此方案下,我们将大部分嘈杂的声音从时间段上全部排除掉了,如图:

上侧:原始声音,下方:排除掉嘈杂后的声音

通过效果图可以明显看到,噪声被大大的抑制了,但没有影响玩家正常的语音对话,网吧嘈杂环境的诉求得到了满足。

通过自研技术,GME已经能在复杂的网吧环境下也准确的检测到特定的人声并有效的去掉环境音或其他玩家带来的噪声,给玩家带来了极致的开黑体验,让好友之间的语音互动不再有噪点,目前游戏多媒体引擎GME 已正式登陆腾讯云,为广大游戏厂商开发者提供服务,详细信息可浏览:https://cloud.tencent.com/product/gme

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 「腾讯云 GAME-TECH 沙龙」8 月 16 日广州站,畅谈游戏全球化

    本期「腾讯云 GAME-TECH 」沙龙 8月16日 广州站,将和来宾聚焦探讨腾讯云在全球化方面的技术布局,并邀请到了游戏全球化先行者的代表分享实践与洞察。期待...

    腾讯游戏云
  • 腾讯云 GAME-TECH 沙龙干货回顾:与腾讯云携手出海

    在红海时代来临的游戏行业,“全球化”已成为近年来的TOP热点。 游戏全球化运营,对节点分布、网络稳定、网络加速、安全防护等云端基础能力提出了很高要求。作为国...

    腾讯游戏云
  • 「腾讯云游戏开发者技术沙龙」11月24 日深圳站报名开启 畅谈游戏加速

    本期腾讯云GAME-TECH沙龙11.24深圳站,我们将与您探讨实时对战类游戏网络优化、全球游戏加速和游戏更新等话题。

    腾讯游戏云
  • 腾讯开放 Marketing API,满足个性化社交广告营销

    纵观 Facebook、Twitter等国外社交网络的广告平台发展史,我们可以发现一个有趣的现象:当广告平台发展到一定的阶段时,都会将平台自身的广告能力通过 A...

    BestSDK
  • 17张图揭密支付宝系统架构

    支付宝的系统架构图,仅供参考。不管是不是支付行业,都值得我们参考,学习。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

    Java技术栈
  • 安卓系统Google Admin应用曝0day漏洞,可绕过沙箱

    MWR实验室的研究人员发现一个0day漏洞,该漏洞存在于安卓系统中Google Admin应用程序处理一些URL的方式中,通过该漏洞攻击者可以绕过安卓沙箱机制。...

    FB客服
  • 子空间迭代法求结构自振频率

    在结构模态分析中一般不需要求解结构的所有特征对,而只需要求解部分低阶特征对。子空间迭代算法就是用于求解结构部分低阶特征对。许多著名的商业有限元分析软件都有这种求...

    fem178
  • Linux下安装Oracle的过程和涉及的知识点-系列5

    使用root登录,编辑/etc/inittab文件,将d:5:initdefault:改为d:3:initdefault:

    bisal
  • 大数据学习之路03——Hadoop常用命令详解

    从键盘读取输入到hdfs file中,按Ctrl+D(Control+D)结束输入。hdfs file不能存在,否则命令不会执行

    汪志宾
  • 仿电商商品分类的思路实现

    Anonymous_95975_565

扫码关注云+社区

领取腾讯云代金券