webRTC
半截木头渡海洋
高出着眼,低处着手
展开
-
webrtc 语音处理模块逐文档注释---APM类的接口文件audio_processing.h
modules/audio_processing/include/audio_processing.hwebrtc 语音处理模块调用接口定义在上述文件之中。struct AecCore;class AudioFrame;template<typename T>class Beamformer;class StreamConfig;class ProcessingConfig;class EchoCancellation;class EchoControlMobi.原创 2021-01-03 04:01:52 · 1311 阅读 · 0 评论 -
卷积与圆周卷积
关于卷积的两种手算方法见链接matlab中fft函数是对序列做DFT,第二个参数是采样点的数量,当缺省时,默认为输入信号序列的长度;当大于信号序列的长度时候,对输入序列后面补零计算,频域信号的分辨率因此而变细,但是这时候的分辨率是伪分辨率。设定信号序列s1,length(s1) = 9s1 = [1,7,8,9,5,4,6,3,2]调用fft函数,对s1进行傅里叶变换plo...原创 2018-07-25 10:57:30 · 8751 阅读 · 0 评论 -
webRTC AEC 添加舒适噪声算法
webRTC的舒适噪声实际上就是,一个随机噪声经过同一帧消回声输出NLP参数的加权处理产生的噪声。如果是32K信号,则对产生的高频段随机噪声统一加权,加权值是同一帧消回声输出NLP参数的平均值。static void ComfortNoise(AecCore* aec, float efw[2][PART_LEN1], ...原创 2018-07-17 15:48:12 · 2924 阅读 · 1 评论 -
webRTC AEC 非线性滤波处理算法
先把代码贴上,有空时候回来注释static void NonLinearProcessing(AecCore* aec, short* output, short* outputH) { float efw[2][PART_LEN1], dfw[2][PART_LEN1], xfw[2][PART_LEN1]; complex_t comfortNoiseHband[PART_LEN...原创 2018-07-17 15:06:27 · 4608 阅读 · 4 评论 -
webRTC AEC 发散处理与抑制算法
所谓发散问题就是在自适应滤波的过程中出现了权值不收敛的问题,一般是由于参考信号与近场数据时间点没有对齐引起的。当滤波器的权值不收敛的时候,自适应滤波器就不能正常的跟踪参考信号产生正确的的合成回声,以至于无法完成回声消除的功能,甚至自适应滤波器会产生一些乱七八糟的信号,淹没近端信号或产生音爆。综上,回声消除过程中要对回声消除的残差进行监控,如果残差信号的能量超过了近场信号的数据,就说明出现了发散...原创 2018-07-17 14:08:25 · 2183 阅读 · 4 评论 -
webRTC AEC 远场滤波器
最后几句代码将远场经过滤波之后加到了传入的yf(合成回声信号)中,但是在调用本滤波器之前已经将yf全部设置为0了,因此输出的合成回声信号就是滤波器的输出。static void FilterFarSSE2(AecCore* aec, float yf[2][PART_LEN1]) { int i; // 设置分块数 const int num_partitions = aec-&...原创 2018-07-17 14:04:37 · 850 阅读 · 0 评论 -
webRTC AEC 归一化误差信号
因为误差信号的大小变化差异较大,不便于设置门限阈值,因此将误差信号e对远端信号x进行归一化,便于对与阈值比较。static void ScaleErrorSignalSSE2(AecCore* aec, float ef[2][PART_LEN1]) { // extern __m128 _mm_set_ps1(float _W); //返回一个__m128的寄存器,Sets the f...原创 2018-07-17 14:01:38 · 1044 阅读 · 0 评论 -
webRTC AEC 滤波器的自适应
权值更新就是使用SSE指令集加速完成NLMS算法的频域计算,具体实现细节见代码注释。static void FilterAdaptationSSE2(AecCore* aec, float* fft, float ef[2][PART_LEN1]) { in...原创 2018-07-17 13:56:44 · 1491 阅读 · 0 评论 -
webRTC中回声消除(AEC)模块的编译与测试
整体过程同webRTC降噪(NS)、自动增益控制(AGC)模块的编译与测试一样,只是在aec_rdft.c文件中可能会报错,局部变量ip跟全局变量冲突的问题,可以将局部变量重新命名一下,就可以通过编译了。修改后的代码如下/* * http://www.kurims.kyoto-u.ac.jp/~ooura/fft.html * Copyright Takuya OOURA, 1996-2001...原创 2018-06-08 09:42:12 · 5711 阅读 · 1 评论 -
在linux系统上实现实时AEC功能
我们从今天起,开始做一个实时的回声消除应用。这个应用的工作环境描述如下:1】linux系统中2】系统通过电脑的喇叭播放音乐3】在播放音乐过程中打开录音功能进行录音我们的应用的目标:1】录音要求输出两个基本的音频文件:录音过程中喇叭的音频、MIC拾到的声音(说话声+喇叭回声)2】对MIC的拾到的声音进行回声消除处理,输出回声消除后的音频文件...原创 2018-06-14 16:21:57 · 2202 阅读 · 2 评论 -
webRTC降噪(NS)、自动增益控制(AGC)模块的编译与测试
本博客记录webRTC中降噪(NS)模块的编译与测试过程获取NS功能、测试代码以及测试语音文件,点击链接使用VS2015打开方案文件并生成在VS右侧资源管理器中,右键选择生成在debug文件夹中生成结果文件将“byby_8K_1C_16bit.pcm”、“lhydd_1C_16bit_32K.pcm”复制到和WebRtcAudioTest.exe文件统一个路径下执行WebRtcAudioTest....原创 2018-06-07 15:57:32 · 6556 阅读 · 3 评论 -
使用CMAKE编译webRTC中的AGC、NS、AEC代码
首先,了解一下CMAKE的基本语法其次,了解一下代码的基本结构然后,写一个CMAKE文件最后,测试一下编译的结果原创 2018-06-11 11:31:16 · 4408 阅读 · 2 评论