精华内容
下载资源
问答
  • WebRTC音频降噪使用

    千次阅读 2019-03-08 19:41:40
    webrtc的ns原理:把启动前50帧的数据拿来构建噪声模型,把启动前200帧的信号强度用来计算归一化的频谱差值计算。根据这两个模型使用概率目的函数来计算出每...在研究webrtc降噪模块,这里简述如何使用webrtc降噪...

    webrtc的ns原理:把启动前50帧的数据拿来构建噪声模型,把启动前200帧的信号强度用来计算归一化的频谱差值计算。根据这两个模型使用概率目的函数来计算出每帧的信噪比并区分出噪声和声音,然后根据计算出的信噪比在频域使用维纳滤波器对噪声信号进行噪声消除,最后在根据降噪前后的能量比和信号噪声似然比对降噪后的数据进行修复和调整后输出。

    在研究webrtc的降噪模块,这里简述如何使用webrtc的降噪模块。

    1、创建降噪句柄:

    NsHandle *pNS_inst = NULL;
    
    WebRtcNs_Create(&pNS_inst);

    2、初始化降噪句柄

     WebRtcNs_Init(pNS_inst, samplerate);//samplerate可为8000, 16000,32000

    3、设置降噪策略

    WebRtcNs_set_policy(pNS_inst,nMode);//nMode可为0,1,2,3

    4、首先需要使用滤波函数将音频数据分高低频,以高频和低频的方式传入降噪函数内部

    WebRtcSpl_AnalysisQMF(shBufferIn,in_len,shInL,shInH,filter_state1,filter_state12);

    5、将需要降噪的数据以高频和低频传入对应降噪处理接口,同时需要注意返回数据也是分高频和低

    展开全文
  • 分离webrtc的降噪(Noise Suppression)部分 ...语音降噪模块就包含在audio processing中。本文的降噪算法引用自https://github.com/cpuimage/WebRTC_NS,用c语言编写,需要编译成exe可执行程序...

    分离webrtc的降噪(Noise Suppression)部分

    webrtc是Google开源的优秀音视频处理及传输代码库,其中包含了audio processing、video processing算法。语音降噪模块就包含在audio processing中。本文的降噪算法引用自https://github.com/cpuimage/WebRTC_NS,用c语言编写,需要编译成exe可执行程序供c#程序调用。

    使用cmake生成vs2017工程

    cmake是一款生成c/c++项目的工具,下载地址:https://cmake.org/download/。
    https://github.com/cpuimage/WebRTC_NS源码中包含了cmake所需的CMakeLists.txt.使用cmake工具生成vs工程的时候有两个坑需要注意:

    • CMakeLists.txt的最后一句“target_link_libraries(ns m)”需要注释掉,否则会报link-error.
    • cmake生成的工程main.c编码为uft.因为源文件里边有汉字,需改变编码为GBK。改变编码的方法为在vs2017打开的工程中,点击“文件”下面的“高级保存选项”。如果没有“高级保存选项”的请百度如何调出。

    编译c源程序

    在vs2017中按f5编译源程序。生成完之后会在debug文件下出现:
    生成的目标文件
    使用方法:拖一个.wav文件到ns.exe上面,出现命令行窗口。命令行执行完毕后会在.wav文件旁边生成一个降噪后的.wav文件。

    C#中调用ns.exe

    			string wav = "wav文件绝对路径";
                using (Process proc = new Process())
                {
                    proc.StartInfo.FileName = "ns.exe";
                    proc.StartInfo.Arguments = string.Format(@" ""{0}""", wav);
                    proc.Start();
                    proc.WaitForExit();
                }
    

    上述ns.exe要是绝对路径。可以设置环境变量只写ns.exe.c#中设置环境变量的方法:

    Environment.SetEnvironmentVariable("Path", Environment.GetEnvironmentVariable("Path") + ";exe路径");
    

    上述语句要写两遍才执行,具体原因未可知。

    本人之前的项目HtwMedia(https://blog.csdn.net/u014220286/article/details/88895867)中就用到了ns.exe程序,对语音识别性能提高还是比较明显的。

    展开全文
  • 上篇(webRTC语音降噪模块ANS细节详解(一))讲了维纳滤波的基本原理。本篇先给出webRTC中ANS的基本处理过程,然后讲其中两步(即时域转频域和频域转时域)中的一些处理细节。 ANS的基本处理过程如下图1: ...

    上篇(webRTC中语音降噪模块ANS细节详解(一))讲了维纳滤波的基本原理。本篇先给出webRTC中ANS的基本处理过程,然后讲其中两步(即时域转频域和频域转时域)中的一些处理细节。

    ANS的基本处理过程如下图1:

                                                图1

    从图1可以看出,处理过程主要分6步,具体如下:

    1)  把输入的带噪信号从时域转到频域,主要包括分帧、加窗和短时傅里叶变换(STFT)等

    2)  做初始噪声估计,基于估计出的噪声算先验信噪比和后验信噪比

    3)  计算分类特征,这些特征包括似然比检验(LRT)、频谱平坦度和频谱差异。根据这些特征确定语音/噪声概率,从而判定当前信号是语音还是噪声。

    4)  根据算出来的语音/噪声概率去更新噪声估计

    5)  基于维纳滤波去噪

    6)  把去噪后的信号从频域转换回时域,主要包括短时傅里叶逆变换(ISTFT)、加窗和重叠相加等。

    我用于理解和调试的版本是以前的C版本,里面又分为浮点和定点两种实现方式。对于算法理解来说,最好看浮点实现的版本,因为它能和算法原理中的数学表达式很好的联系起来。定点实现中有很多诸如定标等工程实现上的技巧,跟数学表达式很难直接联系。部署时如有load等制约因素,最好用定点的实现,因为通常定点实现的load比浮点实现的小不少。ANS支持8k/16k/32k HZ等三种采样率。对于语音来说,最常用的是16k HZ的,本文以及后续的均设定采用率为16k HZ。语音信号处理时以帧为单位,ANS中一帧为10 ms,可以算出一帧是160个采样点。语音信号处理又通常在频域下进行的,因此先要把时域信号变成频域信号,处理后再把频域信号变回时域信号。时域信号变频域信号在ANS降噪处理过程的开始部分,频域信号变时域信号在ANS降噪处理过程的结束部分,但它们是相对称的,且它们与降噪处理算法无关,因此把它们放在一起讲。下面讲讲时频互转中的一些细节。

    先看从时域信号变成频域信号。主要步骤是分帧、加窗和做短时傅里叶变换(STFT)。分帧上面说过,10 ms一帧,每帧160个采样点。加窗的目的是避免频谱泄漏。有多种窗函数,常见的有矩形窗、三角窗、汉宁(hanning)窗和海明(hamming)窗等。语音处理中常用的是汉宁窗和海明窗。ANS中用的是汉宁窗和矩形窗混在一起的混合窗。做STFT要求点数是2的N次方,现在每帧160个点,大于160的最近的2的N次方是256,所以STFT一次处理256个点(这也是代码中256(#define ANAL_BLOCKL_MAX  256)的由来)。现在每帧160个点,需要补成256个点。一种做法是在160个点后面补零补成256个点。ANS用了一种更好的方法。用上一帧的尾部的96个点来补从而形成256个点。这样从时域信号变成频域信号的处理流程如下图2:

                                                         图2

    因为对256点做STFT,所以加窗的点数也是256。ANS用的是窗是汉宁和矩形混合窗。汉宁窗函数是w(n) = 0.5 * (1 + cos(2*pi*n / (N-1))),范围是(0,1),波形如下图3。

                                          图3

    这个混合窗是把192(96*2)点的汉宁窗在顶点处插入64点的幅值为1的矩形窗,从而形成256(256 = 192 + 64)点的混合窗,波形如下图4。

                                               图4

    至于为什么要这么做,后面讲频域转换到时域时再说。256个点的值与相应的窗函数相乘,得到要送进STFT处理的值。STFT处理后得到256个频点的值,这些值除了第0点和第N/2点(N=256,即第128点)点是实数外,其余点都是复数,且关于第N/2点共轭对称。因为共轭对称,一个点知道了,它的对称点就可以求出来。所以STFT处理后有(N/2 + 1)个点的值。这里N=256,STFT的输出是129个点的值。这也是代码中129(#define HALF_ANAL_BLOCKL  129)的由来。得到129个频点的值后还要算每个频点的幅度谱和能量等,用于后面降噪算法,具体处理如下面代码,已给出详细的注释,就不细说了。

    在频域做完降噪处理后需要把信号从频域变回时域,即信号的重建或者合成,主要步骤是做短时傅里叶反变换(ISTFT)、加窗和重叠相加(overlap add, OLA)等,处理流程如下图5。

                                          图5

    先做ISTFT(短时傅里叶反变换),得到256点的实数值。这256点包括上一帧的尾部的96点,即有重叠。该怎么拼接保证声音连贯呢?上面讲从时域到频域变换时用的窗是汉宁矩形混合窗,汉宁窗前半部分(头部96点)类似于做正弦操作,后半部分(尾部96点)类似于做余弦操作。重叠部分是在上一帧的尾部,加窗做的是类余弦操作,在当前帧是头部,加窗做的是类正弦操作。信号重建叠加时一般要求能量或者幅值不变,能量是幅值的平方。那些重叠的点(假设幅值为m)在上一帧中加窗时做了类余弦操作,加窗后幅值变成了m*cosθ,在当前帧中加窗时做了类正弦操作,加窗后幅值变成了m*sinθ,能量和为, 正好等于(原信号的能量),这说明只要把重叠部分相加就可以保证语音信号的连贯了。这就解释了代码中把ISTFT后的值再做一次加窗操作并把重叠部分相加的原因。具体代码见下图6。

                                                       图6

    至于矩形窗部分,幅值为1,即加窗后信号幅值不变,因而不需要做处理,直接填上就可以了。需要注意的是图6中还有一个能量缩放因子factor。它在前200帧默认为1,后续帧按如下逻辑关系得到。

    图7给出了做完ISTFT后数据拼接的示意图。做完ISTFT后有256点数据,当前帧的头部96点数据与上一帧的尾部96点数据相加,中间64点数据不变,当前帧尾部96点数据与下一帧的头部96点数据相加,这样就能很好的拼接处连贯的语音数据了。

                                                      图7

    下篇将讲噪声的初始估计以及基于估计出来的噪声算先验信噪比和后验信噪比。

    展开全文
  • 近半年来,我利用业余时间在看着《语音增强:理论与实践》和《实时语音处理时间指南》这两本书,对降噪算法有了更深的理解,同时又对ANS的代码进行了调试,基本掌握了算法实现。我想把我对ANS的理解写出来。由于内容...

    ANS(adaptive noise suppression) 是webRTC中音频相关的核心模块之一,为众多公司所使用。从2015年开始,我在几个产品中使用了webRTC的3A(AEC/ANS/AGC)模块。以前仅仅是使用,对其中的算法原理只是初步了解。近半年来,我利用业余时间在看着《语音增强:理论与实践》和《实时语音处理实践指南》这两本书,对降噪算法有了更深的理解,同时又对ANS的代码进行了调试,基本掌握了算法实现。我想把我对ANS的理解写出来。由于内容细节较多,就出一个系列吧。webRTC中的ANS是基于维纳滤波来降噪的,本篇就先讲讲维纳滤波的基本原理。

    如图1所示,输入信号y(n)经过一个滤波器后产生一个输出信号x(n),希望x(n)尽量逼近期望信号d(n)。这可以通过计算估计误差e(n)并使其最小化来实现,能够最小化这个估计误差的最优滤波器叫做维纳滤波器。

    通常维纳滤波器为线性的,且是FIR滤波器,因为FIR滤波器是稳定的,以及它是线性的方便计算。因而滤波器输出x(n)可以写成式1:

                                       (1)

    其中h(k)为滤波器系数,M为滤波器个数,即是M阶的滤波器。x(n)可以改写成式2:

                                                                                 (2)

    其中h为M行1列的滤波器系数向量,y为M行1列的包括过去M个样本的输入向量。h和y表示如下:

    所以是一个实数值。

    估计误差e(n)可以表示如式3:

                                                     (3)

    为了找到最优的滤波器系数,得求估计误差的统计均方值,即式4:

                                                                                  (4)

    其中E[•]表示期望。因为

    所以

    从而得到式5:

                                           (5)

    展开后得到如下系列式子:

    因为

    所以

    定义表示两个输入值之间的自相关,n表示序列差。所以:

    再定义表示输入值和期望输出值之间的互相关,n表示序列差。所以:

    所以上面式子5可以改写成式子6

          (6)

    展开后得式7:

                                        (7)

    再改写成如下形式,得到式8:

                                                       (8)

    上面的式8是有限脉冲响应滤波器。再来考虑一种双边的无限脉冲滤波器,形式如式9:

                                                               (9)

    则式8可写成式10:

                                                     (10)

    写成卷积形式,得到式11:

                                                                                                 (11)

    对两边做傅里叶变换,时域卷积变成频域就是乘积,所以得到式12:

                                                               (12)

    其中是输入的自功率谱,自功率谱等于自相关的傅里叶变换。是输入与输出的互功率谱,互功率谱等于互相关的傅里叶变换。所以得到式13:

                                                                                                          (13)

    上式就是频域维纳滤波器的一般形式。

    如果要把维纳滤波用到语音降噪上,图1中的y(n)就是带噪语音信号,x(n)就是纯净语音信号。假设n(n)表示噪声信号,如果只考虑加性噪声,则带噪语音信号、纯净语音信号和噪声信号的关系如下:y(n) = x(n) + n(n),做傅里叶变换后的表达式如下:

     假设噪声与语音不相关且具有零均值,则

    其中表示纯净语音的自功率谱,表示噪声的自功率谱。将 带入式13可得式14:

                                                                                     (14)

    如果定义为频点为时的先验信噪比(prior SNR,表示纯净语音和噪声的功率比值,后验信噪比(post SNR)表示带噪语音和噪声的功率比值) ,则式14可以表示为式15:

                                                                                                  (15)

    式15就是维纳滤波器的通用的表示形式,是用先验信噪比来表示的。webRTC里的ANS就是基于这个表达式做语音降噪的。下篇将讲ANS的处理流程以及语音信号在时域和频域相互转换时的一些细节。

    展开全文
  • unity语音聊天,配合网络函数可实现简单的语音通话。降噪是自己封装的WebRtc的算法,项目中打包了windows和android库,附上源码有需要其他平台的可以自己打包。
  • 1.Speex音频降噪模块 相关文章链接:开源库Speex编解码,speex开源库分析(前置处理) Speex是很强大的编解码库,也包含一些降噪,自动增益,回音消除等模块功能,Speex是开源的,Opus是Speex的更优替代方案,但是...
  • webrtc语音增强处理算法综述

    千次阅读 2018-05-15 10:44:50
    作为实时音视频通信框架的webrtc,里面有着丰富的语音处理算法,其中主要涉及到AEC(声学回声抑制),NS(噪音抑制),AGC(自增益控制),VAD(语活检测)和CNG(舒适噪声)等。...webrtc语音处...
  • WebRtc语音整体框架

    千次阅读 2017-04-08 16:16:37
    WebRtc语音整体框架 图一语音整体框架图  如上图所示,音频整个处理框架除了ligjingle负责p2p数据的传输,主要是VOE(Voice Engine)和Channel适配层 图二创建数据通信channel时序图  上图是本地端  ...
  • WebRTC语音对讲无声音

    千次阅读 2019-09-12 15:41:20
    最近在搞Webrtc对讲的降噪和回音消除,找了代码然后改了非常多。。。。发现一个很无语的Bug:进入程序进行语音对讲,有偶发扬声器无法播放声音,但如果首先进行视频通话,再语音,刚正常。 刚开始怀疑是代码改了...
  • webrtc_ns降噪模块详细解读 总述 webrtc降噪模块主要分为3个部分:模块初始化、噪声分析(analysis)、噪声抑制。模块初始化是在最开始为降噪模块设置参数以及初始化一些状态的值。噪声分析模块,主要进行噪声估计...
  • 本博客记录webRTC降噪(NS)模块的编译与测试过程获取NS功能、测试代码以及测试语音文件,点击链接使用VS2015打开方案文件并生成在VS右侧资源管理器中,右键选择生成在debug文件夹中生成结果文件将“byby_8K_1C_...
  • Speex降噪解析 WebRtc降噪解析
  • webrtc 单通道降噪算法(ANS)简析

    千次阅读 2018-06-26 11:10:06
    WebRtcNs_ProcessCore 降噪处理核心函数1、分为高频、低频子带进行处理,采样率为8-16K时,一般只用到低频处理。2、计算输入带噪语音数据帧的能量值。3、FFT傅里叶变换4、计算维纳滤波增益,通过直接判决法计算先验...
  • webRtc整个项目在windows下编译还是很难搞定的一件事,本人是下载别人已经编译好的工程进行开发的,整个工程有200多个项目,音频降噪和VAD检测只是其中的2个项目。 一、音频降噪 void TestNs(char *szFileIn, ...
  • 语音降噪算法 噪音消除

    热门讨论 2009-03-21 16:37:49
    语音降噪算法,语言噪音消除研究。嵌入式开发时噪音是一个头疼的问题
  • android音频降噪webrtc

    热门讨论 2016-11-20 11:38:55
    android音频降噪,采用webrtc技术,提供底层源码和so库,亲测效果不错,请戴上耳机测试效果。
  • 音视频开发之旅(六) -----Android集成webrtc降噪和增益模块, ns_core函数简析 1.前言 再上一章主要介绍了音频文件的相关操作,在录音的过程当中,由于android机型不同的型号,即使采样率设置成44100k,有一定的外接音...
  • Android 音频降噪 webrtc 去回声

    千次阅读 2018-11-08 11:51:15
    使用webrtc 处理降噪,去回声,增益,均衡等 MainActivity代码: import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioRecord; import android.media.AudioTrack...
  • 前面的文章(语音降噪论文“A Hybrid Approach for Speech Enhancement Using MoG Model and Neural Network Phoneme Classifier”的研读 )梳理了论文的思想。本篇就开始对其实践,主要分以下几步:1,基于一个语料...
  • 基于RNN的音频降噪算法。采用的是 GRU/LSTM模型。阅读下训练代码,可惜的是作者没有提供数据训练集。不过基本可以断定他采用的数据集里,肯定有urbansound8k。urbansound8k数据集地址:也可以考虑采用用作者训练的...
  • 博客地址:https://mp.csdn.net/article/details/100150637 Android(jni) 单独抽取 WebRtc-AGC(音频增益) 模块 Android(jni) 单独抽取 WebRtc-NS(音频降噪) 模块
  • python的webrtc库实现语音端点检测

    万次阅读 多人点赞 2017-05-26 16:54:31
    端点检测属于语音处理系统的前端操作,在语音检测领域意义重大. 但是目前的语音端点检测,尤其是检测 人声 开始和结束的端点始终是属于技术难点,各家公司始终处于 能判断,但是不敢保证 判别准确性 的阶段....
  • C#+WebSocket+WebRTC多人语音视频系统

    千次阅读 2017-06-02 17:47:00
    WebRTC是谷歌的开源的实时视频音频聊天技术,支持跨平台,Nat穿透技术(Stun,Turn,Ice),在部分支持Html5的浏览器里集成了这个功能。 至目前为止支持的PC浏览器有:Chrome 31+,opera 19+,FireFox 26+至目前为止...
  • webrtcvad python——语音端点检测

    万次阅读 2017-02-07 14:16:29
    py-webrtcvad 语音端点检测算法说明webrtc的vad使用GMM(Gaussian Mixture Mode)对语音和噪音建模,通过相应的概率来判断语音和噪声,这种算法的优点是它是无监督的,不需要严格的训练。GMM的噪声和语音模型如下:p...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 564
精华内容 225
关键字:

webrtc语音降噪