Noise suppression,就是大家说的降噪。这种降噪是把人声和非人声区分开来,把非人声当成噪声。
一段包含人声和噪声的音频经过该模块处理,从理论上讲,只剩下人声了。
webrtc的NS在业内还是赫赫有名的,通过实际对比测试,我们发现webrtc的降噪的确是性能和稳定性
都要高于同类开源算法。
webrtc的ns原理是这样的:把启动前50帧的数据拿来构建噪声模型,把启动前200帧的信号强度用来计
算归一化的频谱差值计算。根据这两个模型使用概率目的函数来计算出每帧的信噪比并区分出噪声和声音,
然后根据计算出的信噪比在频域使用维纳滤波器对噪声信号进行噪声消除,最后在根据降噪前后的能量比
和信号噪声似然比对降噪后的数据进行修复和调整后输出。
webrtc的NS使用分析:webrtc的降噪支持三种采样率,8k,16k和32k,其它的采样率的降噪可以通过
瞎采样来完成。降噪模式有四种:分别是,0,1,2,3 四种模式的降噪量依次增加,笔者亲自测过,一般是2比较
好,对声音损失小,降噪效果又不错。还有个比较重要的参数就是噪声估计模型宏定义,如下所示,推荐在
系统计算能力够的情况下使用第三种,效果最好。
#define PROCESS_FLOW_0 // Use the traditional method.
#define PROCESS_FLOW_1 // Use traditional with DD estimate of prior SNR.
#define PROCESS_FLOW_2 // Use the new method of speech/noise classification.
使用方法和代码调用:
初始化:申请内存,设置采样率和降噪模式。
WebRtcNs_Create(&pNS_inst);
WebRtcNs_Init(pNS_inst,nSample);
WebRtcNs_set_policy(pNS_inst,nMode);
处理主函数:针对降噪的帧进行处理,默认是10ms的帧长度。
int WebRtcNs_Process(NsHandle* NS_inst, short* spframe, short* spframe_H,
short* outframe, short* outframe_H)
linux下可以直接编译运行的代码路径: https://github.com/DyLanCao/webrtc
作者:虚生 出处:https://www.cnblogs.com/dylancao/ 以音频和传感器算法为核心的智能可穿戴产品解决方案提供商 ,提供可穿戴智能软硬件解决方案的设计,开发和咨询服务。 勾搭热线:邮箱:1173496664@qq.com weixin:18019245820 市场技术对接群:347609188 |
![]() |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战