一种基于神经网络的实时回声消除方法与流程
- 国知局
- 2024-06-21 10:41:19
本发明涉及回声消除,尤其涉及一种基于神经网络的实时回声消除方法。
背景技术:
1、回声消除作为音频处理的重要部分,传统的基于自适应滤波器的回声消除算法如webrtc,speex等具有调试复杂,收敛慢,难以适应复杂环境等缺点。
2、随着神经网络的发展,神经网络被广泛用于回声消除。基于神经网络的回声消除方案主要有2种:
3、一是通过自适应滤波器消除线性回声和估计时延,再用一个神经网络模型去除非线性回声以及噪声。采用了自适应滤波器+神经网络模型,对于自适应滤波器特别是时延估计的要求较大,在实际应用中由于场景的多样性自适应滤波器的调试难度较大,性能难以保证。除此之外,由于该方案在训练模型时往往需要将自适应滤波器输出,原始近端信号和远端音频信号同时作为特征输入模型,导致模型较大,训练较慢,且需要大量的数据做支撑。因此,虽然这种方案效果好,但实现困难,且模型较大,在设备端难以部署;
4、二是直接通过一个神经网络模型实现回声消除和降噪;只使用一个模型做回声消除,这种方案实现部署简单,但是因为没法像自适应滤波器那样对不同的设备更新参数,所以模型在不同设备和在不同场景下效果难以保证。
5、公开号为cn116887160a的中国发明,公开了基于神经网络的数字助听器啸叫抑制方法及系统,该方法包括:获取数字助听器接收的语音信号;基于神经网络获取所述语音信号中每个时刻的状态;根据所述语音信号中每个时刻的状态以及每个时刻的幅频峰值的分布特征确定每个时刻对应的收敛平稳系数;基于所述收敛平稳系数确定非平稳时刻;基于所述非平稳时刻与啸叫时刻的时间间隔确定步长调节比例,并基于所述步长调节比例和所述收敛平稳系数获取每个时刻对应的收敛步长;基于nlms算法和所述收敛步长对所述语音信号进行回声消除,以抑制所述数字助听器中的啸叫。该专利是通过自适应滤波器(nlms算法)消除线性回声和估计时延,这种方案实现困难,且模型较大,在设备端难以部署。
技术实现思路
1、有鉴于此,本发明的目的在于提出一种基于神经网络的实时回声消除方法,是结合回声消除模型和回声检测模型的方案,在只采集少量数据的情况下,提高回声消除模型的效果,减小模型的部署难度。
2、为了实现上述的技术目的,本发明所采用的技术方案为:
3、本发明提供了一种基于神经网络的实时回声消除方法,包括如下步骤:
4、步骤1、构建回声消除模型;具体包括:
5、步骤11、所述回声消除模型的结构使用开源的dtln-aec模型;
6、步骤12、所述dtln-aec模型由两个分帧层、两个傅里叶变换层、两个核心模块、一个傅里叶逆变换层、两个第一线性层、一个第二线性层和重叠相加层组成,每个所述核心模块均包括两个归一化层、一个连接层、两个lstm层、一个第三线性层和一个sigmoid激活函数;
7、步骤2、对所述回声消除模型进行训练;
8、步骤3、构建回声检测模型;具体包括:
9、步骤31、所述回声检测模型由两个分帧层、两个傅里叶变换层、两个归一化层、一个拼接层、一个第四线性层、两个gru层、一个第五线性层和一个sigmoid激活函数;
10、步骤32、所述回声检测模型的输入为回声消除模型的输出和远端音频信号y(n),两个所述分帧层用于接收回声消除模型的输出和远端音频信号y(n),两个所述分帧层分别进入两个傅里叶变换层,两个所述傅里叶变换层分别进入两个归一化层,两个所述归一化层进入拼接层,所述拼接层依次进入两个gru层、一个第五线性层和一个sigmoid激活函数,得到所述回声检测模型的输出 out;
11、步骤4、对所述回声检测模型进行训练;
12、步骤5、将近端音频信号和远端音频信号作为训练后的所述回声消除模型的输入,得到训练后的所述回声消除模型的输出;
13、步骤6、将训练后的所述回声消除模型的输出和远端音频信号作为训练后的所述回声检测模型的输入,得到训练后的所述回声检测模型的输出作为回声检测的标签;
14、步骤7、根据所述回声检测的标签判断当前回声消除模型输出帧的状态,得到最终的目标音频。
15、进一步的,所述步骤12之后还包括:
16、步骤13、所述回声消除模型的输入为近端音频信号x(n)和远端音频信号y(n),两个所述分帧层用于接收近端音频信号x(n)和远端音频信号y(n),两个所述分帧层分别进入两个傅里叶变换层,两个所述傅里叶变换层进入第一个核心模块中,两个所述傅里叶变换层分别进入两个归一化层,两个所述归一化层进入连接层,所述连接层依次进入两个lstm层、一个第三线性层和一个sigmoid激活函数;近端音频信号依次经分帧层和傅里叶变换层后输出的结果与第一个核心模块中sigmoid激活函数输出的结果进行相乘后进入傅里叶逆变换层;
17、步骤14、所述傅里叶逆变换层和远端音频信号分别进入两个第一线性层,两个所述第一线性层进入第二个核心模块中,两个所述第一线性层分别进入两个归一化层,两个所述归一化层进入连接层,所述连接层依次进入两个lstm层、一个第三线性层和一个sigmoid激活函数;依次经傅里叶逆变换层和第一线性层后输出的结果与第二个核心模块中sigmoid激活函数输出的结果进行相乘后依次进入第二线性层和重叠相加层,得到所述回声消除模型的输出。
18、进一步的,所述步骤2具体包括:
19、步骤21、获取开源的dns-challenge、aec-challenge和openslr这三个数据集中的多条音频信号;
20、步骤22、所述回声消除模型的输入为近端音频信号x(n)和远端音频信号y(n),其中,x(n)=s(n)+e(n)+n,s(n)代表需要从远端音频信号y(n)中剥离出的干净语音信号,e(n)表示由远端音频信号y(n)被近端麦克风播放再采集后产生的回声,n表示环境噪声;
21、步骤23、从aec-challenge数据集中选取多条合成的回声对以及多条真实的回声对作为训练数据中的y(n)和e(n),从dns-challenge数据集中选取多条不同带噪语音信号和干净语音信号对分别作为训练数据中的s(n)+n和s(n),从dns-challenge数据集中选取多条音频信号作为训练数据中的y(n);
22、步骤24、从openslr数据集中的rir_noises数据里选取多条音频信号,在训练时实时生成模拟回声,生成的模拟回声作为训练数据的e(n),参与训练;
23、步骤25、多条近端音频信号和多条远端音频信号作为训练数据,再从训练数据中选10%的数据作为训练的测试集;
24、步骤26、将所述训练数据作为回声消除模型的输入,对回声消除模型进行训练,损失函数采用:,其中表示回声消除模型的输出,s(n)表示干净语音信号,即目标信号;当的值稳定且趋近于s(n)时,说明训练已完成;
25、步骤27、训练结束后,再将所述测试集作为所述回声消除模型的输入,对回声消除模型进行测试,最终得到训练后的回声消除模型。
26、进一步的,所述步骤24具体如下:
27、步骤241、随机从多条远端音频信号y(n)中选取1条作为远端参考信号,若选取的远端参考信号是aec-challenge数据集中的音频信号,则直接使用其对应的e(n);若选取的远端参考信号是dns-challenge数据集中的音频信号,则进入步骤242;
28、步骤242、随机从opensi数据集中的rir_noises数据里选取1条作为响应信号,将所述响应信号与远端参考信号做卷积;
29、步骤243、将卷积后的结果通过一个参数随机的带通滤波器进行滤波处理,得到1条模拟回声信号;
30、步骤244、重复步骤241-步骤243,得到多条模拟回声信号作为训练数据的e(n)。
31、进一步的,所述带通滤波器的最低频率为100-400hz的随机数,最高频率为6000-7500hz的随机数;选取0-100ms范围内的随机数作为回声信号的时延。
32、进一步的,所述步骤4具体包括:
33、步骤41、获取所述回声消除模型的输出,从aec-challenge数据集中选取多条合成的回声对以及多条真实的回声对作为训练数据中的远端音频信号y(n),从dns-challenge数据集中选取多条音频信号作为训练数据中的远端音频信号y(n);
34、步骤42、将回声消除模型的输出和远端音频信号y(n)作为所述回声检测模型的输入,通过dns-challenge数据集提供的干净语音信号s(n)计算每帧能量,即每一帧的采样点幅度的平方和,从而得到每帧的标签,判断对应的干净语音信号s(n)在当前帧的平方和是否大于0.001,若是,则将当前帧的语音标签设为1,否则将当前帧的语音标签设为0;
35、步骤43、使用平均均方误差作为损失函数,即:,其中 out (n)表示回声检测模型在当前帧的输出, label(n)为对应的标签, n为总的帧的个数;当 out (n)的值稳定且趋近于 label(n)时,说明训练已完成。
36、进一步的,所述步骤5具有包括:
37、步骤51、输入目标远端音频信号和目标近端音频信号到所述回声消除模型中;
38、步骤52、将目标远端音频信号和目标近端音频信号进行分帧并计算每一帧的傅里叶系数;
39、步骤53、对每一帧的傅里叶系数进行归一化,将远端音频信号和近端音频信号每一帧的傅里叶系数进行拼接,再经过lstm层、第三线性层和sigmoid激活函数的运算,在lstm层中,将上一帧的输出作为下一帧的输入;近端音频信号依次经分帧和傅里叶变换后输出的结果与第一个核心模块中sigmoid激活函数输出的结果进行相乘后进行傅里叶逆变换;
40、步骤54、通过傅里叶逆变换的结果和远端音频信号分别进行第一线性层的运算,对第一线性层的运算结果进行归一化和拼接处理,再经过lstm层、第三线性层和sigmoid激活函数的运算,在lstm层中,将上一帧的输出作为下一帧的输入;依次经傅里叶逆变换和第一线性层运算后输出的结果与第二个核心模块中sigmoid激活函数输出的结果进行相乘;
41、步骤55、将相乘的结果通过一个第二线性层将每一帧的系数个数恢复成与傅里叶系数相同的个数,再用一个重叠相加得到与输入信号长度相同的输出信号。
42、进一步的,所述步骤6具体包括:
43、步骤61、输入目标远端音频信号和回声消除模型的输出到所述回声检测模型中;
44、步骤62、将目标远端音频信号和回声消除模型的输出进行分帧并计算每一帧的傅里叶系数;
45、步骤63、对每一帧的傅里叶系数进行归一化,将远端音频信号和回声消除模型的输出每一帧的傅里叶系数进行拼接,再经过第四线性层、gru层、第五线性层和sigmoid激活函数的运算,得到所述回声检测模型的输出 out;在gru层中,将上一帧的输出作为下一帧的输入。
46、进一步的,所述步骤7具体包括:
47、步骤71、所述回声消除模型的输入帧长为512个点,帧移为128个点,实际部署中需要一个512个点的输入寄存器保存上一帧的输入,一个512个点的输出寄存器保存上一帧的输出;
48、步骤72、假设一次输入512个点,则每一次输入需要跑512/128=4次;第一次将输入寄存器中上一帧的后384个点和当前帧的前128个点输入,第二次将上一帧的后256个点和当前帧的前256个点输入,第三次将上一帧的后128个点和当前帧的前384个点输入,第四次将当前帧的前512个点输入;当全部4次前向推导执行完,将当前帧的输入导入到输入寄存器,在下一帧输入时使用;
49、步骤73、对于每一次前向推导的输出,先将输出寄存器的点前移128位,后128位置零;再将每一帧输出的512个点与输出寄存器里的512个点相加,再输出前128个点,每一次前向推导输出128个点;假设一次输入512个点,做512/128=4次前向推导后,输出128×4=512个点,得到输出的长度与输入的长度相同;
50、步骤74、所述回声检测模型的输入帧长是512,帧移为256,需要一个512个点的寄存器,每一次回声消除模型输出128个点,将寄存器前移128个点,再导入回声消除模型输出的128个点;由于回声检测模型的帧移是回声消除模型的2倍,所以回声消除模型每做2次前向推导,做一次回声检测;
51、步骤75、设置一个判决的阈值,若连续多次回声检测模型的输出小于阈值,则认为此时回声消除模型的输出包含较大回声,输出置0;否则为正常语音。
52、采用上述的技术方案,本发明与现有技术相比,其具有的有益效果为:
53、该方法只通过开源的数据集训练一个回声消除模型,为了适配不同的设备只需要采集少量数据,训练一个小的回声检测模型,而不需要再花大量时间去调试自适应滤波器,大大降低了训练难度和成本。
54、该方法在传统的回声消除模型基础上增加一个回声检测模型,当回声消除模型效果不佳时可通过回声检测模型消除回声,同时还可通过设置阈值适配不同场景的需求,弥补了端到端回声消除模型在不同场景下效果不稳定的问题。在只增加少量复杂度的情况下提高了回声消除的性能。
55、该方法大部分的训练数据都使用开源的数据集,对于不同的设备也只需要采集少量数据来训练回声检测模型,可以比较方便的适配不同的设备。整个回声消除模型量化后约为1.5m,回声检测模型量化后为350kb,可以用于移动端设备。
56、同时,在实际应用中,回声消除效果和听感往往难以平衡,该方法可通过设置回声检测的阈值,在不同场景下适配。如果需要保证听感可将回声检测模型的阈值降低0,如果需要保证回声消除的效果,则将阈值增加。
本文地址:https://www.jishuxx.com/zhuanli/20240618/21217.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表