![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
语音信号处理
文章平均质量分 53
半截木头渡海洋
高出着眼,低处着手
展开
-
matlab 实时录音
clcclear allclose allH = dsp.AudioRecorder;recorderData = zeros(1024,1);for iloop1 = 1:100 recorderData(:,iloop1) = mean(step(H),2);endplot(reshape(recorderData,1,[]));audiowrite('re...原创 2019-12-09 04:19:03 · 2420 阅读 · 4 评论 -
webRTC AEC 添加舒适噪声算法
webRTC的舒适噪声实际上就是,一个随机噪声经过同一帧消回声输出NLP参数的加权处理产生的噪声。如果是32K信号,则对产生的高频段随机噪声统一加权,加权值是同一帧消回声输出NLP参数的平均值。static void ComfortNoise(AecCore* aec, float efw[2][PART_LEN1], ...原创 2018-07-17 15:48:12 · 2874 阅读 · 1 评论 -
卷积与圆周卷积
关于卷积的两种手算方法见链接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 · 8732 阅读 · 0 评论 -
matlab自带的VAD检测程序
在matlab的DSP工具箱中,自带了VAD程序,本文主要记录如何使用这个程序。clear allclose allclc%% 设置音频源,读入一个speaker.wav文件,并对读入的文件进行分帧,每帧80个采样点audioSource = dsp.AudioFileReader('SamplesPerFrame',80,... ...原创 2018-07-31 14:50:39 · 6681 阅读 · 6 评论 -
使用matlab进行实时VAD判断
使用matlab自带的VAD以及SCOPE函数进行实时的VAD判断废话不多说,实现看以下代码:clear allclose allclcaudioSource = dsp.AudioRecorder('SamplesPerFrame',80,... 'SampleRate',8000,... ...原创 2018-08-02 12:36:04 · 3052 阅读 · 7 评论 -
声源数目测定
本文使用协方差矩阵特征值分解的方法求解声音数目,对比两种主特征值数目的判定方法,代码如下clcclearclose allframeLength = 160;audioDataArray = zeros(frameLength,5);audioDataArray2 = zeros(frameLength,5);signalSourceInfo = zeros(4,1);sign...原创 2018-09-14 16:45:14 · 795 阅读 · 0 评论 -
利用SVM实现噪声分类
通过支持向量机实现对噪声的分类,提升语音增强以及VAD的效果。当样例是以输入/输出对的形式给出时,学习方法称为有监督学习。当样例仅以输入的形式给出,而没有输出结果时候,成为无监督学习,包括密度估计、分布类型学习、聚类等领域的学习。另外还有查询学习、强化学习等。按照学习的过程来分,还可以分为批量学习、线性学习等。按照输出结果的不同,分类问题被分为二类问题、多类问题、回归问题。支持...原创 2019-01-29 11:01:00 · 3851 阅读 · 45 评论 -
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 · 4509 阅读 · 4 评论 -
webRTC AEC 发散处理与抑制算法
所谓发散问题就是在自适应滤波的过程中出现了权值不收敛的问题,一般是由于参考信号与近场数据时间点没有对齐引起的。当滤波器的权值不收敛的时候,自适应滤波器就不能正常的跟踪参考信号产生正确的的合成回声,以至于无法完成回声消除的功能,甚至自适应滤波器会产生一些乱七八糟的信号,淹没近端信号或产生音爆。综上,回声消除过程中要对回声消除的残差进行监控,如果残差信号的能量超过了近场信号的数据,就说明出现了发散...原创 2018-07-17 14:08:25 · 2153 阅读 · 4 评论 -
回声消除(AEC)初体验之matlab仿真
从代码传送门查看源码。对比不同的滤波器对应的回声消除效果原创 2018-05-28 10:42:21 · 12453 阅读 · 5 评论 -
自适应滤波之最小均方(LMS)算法以及matlab实现
使用LMS算法对进行信号分离clearclose allclca1=-1.6; a2=0.8; [x,fs1]=audioread('handel.wav');[dn,fs2]=audioread('handel_echo.wav');figure;subplot(2,1,1);plot(x);title('spk参考信号');subplot(2,1,2);plo...原创 2018-05-31 14:06:30 · 47339 阅读 · 15 评论 -
ITUT-T recommendations G.168 标准回声模型
相关标准定义见《ITUT-T recommendations G.168 标准》附件D,文件中给出的公式D-3中-2*pi*f*k应修改为-2*pi*f*m1(k)回声模型1的验证代码如下clcclear allclose allf=0:1:4095;i=1:8;m1=[-436 -829 -2797 -4208 -17968 -11215 46150 34480 -10427 904...原创 2018-06-05 14:24:09 · 2343 阅读 · 4 评论 -
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 · 6508 阅读 · 3 评论 -
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 · 5657 阅读 · 1 评论 -
回声消除实验数据的产生与分离
本篇介绍如何使用matlab产生一套回声消除所需要的实验数据,以及验证数据实验数据产生思路:1】首先要有一个原始的哈利路亚语音信号,这个信号用来模拟MIC端讲话人的语音2】建立一个带通滤波器用来模拟SPK到MIC的传输过程,因为带通滤波器是一个是不变系统,所以在后续回声消除的实验中只需要开始时候权值收敛,后续不需要跟踪回声通道的变化3】一个随机的杂波,用来模拟喇叭播放的声音4】喇叭的原声经过带通滤...原创 2018-06-01 21:13:18 · 3827 阅读 · 1 评论 -
webRTC AEC 滤波器的自适应
权值更新就是使用SSE指令集加速完成NLMS算法的频域计算,具体实现细节见代码注释。static void FilterAdaptationSSE2(AecCore* aec, float* fft, float ef[2][PART_LEN1]) { in...原创 2018-07-17 13:56:44 · 1464 阅读 · 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 · 1026 阅读 · 0 评论 -
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 · 834 阅读 · 0 评论 -
自适应滤波收敛特性求解
clcclear allclose alln=500;Sspk=zeros(1,n)';e=zeros(1,n); % 用于存放误差e1=zeros(1,n); % 用于存放实际回声与合成回声之间的误差ep=zeros(1,n); % 用于存放五十次运算累积的误差w=randn(1,n)'; % 产生一个随机信号用作参考,然后用x来拟合这个信号,并用前两个点初始化滤波器第...原创 2018-06-03 21:12:15 · 1974 阅读 · 0 评论