一种回声消除时延估算方法及回声消除方法
技术领域
本发明涉及嵌入式系统
技术领域
,尤其涉及一种回声消除时延估算方法及回声消除方法。背景技术
在语音通信中,回声会对说话者产生干扰,大的回声将严重影响通话质量,必须想办法消除。回声就是指说话者通过通信设备发送给其他人的语音重新又回到自己的听筒里的现象。回声分为两种,即“电路回声”和“声学回声”。前者可以通过硬件设备的合理设计而消除,本发明关注的是的“声学回声”的消除。“声学回声”是指远端用户的声音从听筒出来以后,经过空气或其他的传播媒介传到近端用户的话筒,再通过话筒录音后又重新传到远端用户的听筒中形成的回声。当近端用户的放音音量比较大而录音设备和放音设备距离比较近时回声尤其明显。
声学回声消除算法(AEC)需要输入两个输入信号:采集到的包含回声的录音信号和扬声器播放的参考信号,它是以参考信号及其在录音信号中导致的回声的相关性为基础,建立远端信号的语音模型,利用它对回声进行估计,并不断地修改滤波器的系数,使得估计值更加逼近真实回声。然后将回声估计值与录音信号中的实际回声对齐,减去,从而达到消除回声的目的。那么显然,AEC的效果将主要受到下面两个因素的影响:回声估计值与实际回声的匹配度,以及录音信号中回声相对于原始参考信号的时延估算的准确度。两个输入信号如果同步的不好,算法中的自适应滤波器就会发散,影响回声消除的效果。时延估算机制可以根据实时性差别分为基于DSP类实时平台的,和基于linux/windows等非实时平台的。前者直接基于硬件实现信号间同步,如手机等应用场景,由于集成的DSP模组处理回声消除,DSP可以直接实时控制ADC/DAC的采集和播放,所以不存在同步问题;但对于后者,由于回声消除算法运行在应用层,而且录音和播放工作在不同的线程,获得低误差的信号同步要困难的多。
当前非实时平台主流时延估算是采用基于互相关计算的自适应时延估计算法,由于其估算准确度严重依赖于计算复杂度,在计算受限的嵌入式系统中只能采取折中方案,这就导致了嵌入式系统软件方式估算时延的两大缺点:计算开销大,以及精度不高而导致AEC效果差。
发明内容
鉴于目前存在的上述不足,本发明提供一种回声消除时延估算方法及回声消除方法,在直接存储器访问(DMA)层产生精确对齐的录音信号和参考信号,极大提高了回声消除效果,且基本不额外占用CPU资源。
为达到上述目的,本发明的实施例采用如下技术方案:
一种回声消除时延估算方法,所述回声消除时延估算方法包括以下步骤:
在直接存储器访问层设置缓冲区;
在缓冲区为即将播放的音频信号以一定的采样频率添加采样点;
在缓冲区以同样的采样频率为录制的音频信号添加采样点;
根据放音点与录音点间距离和音频采样频率获得回声时延。
依照本发明的一个方面,所述缓冲区包括:播放缓冲区、录音缓冲区和混合缓冲区。
依照本发明的一个方面,所述回声消除时延估算方法包括以下步骤:
把播放缓冲区中某采样点搬运及转换为模拟电信号后驱动扬声放音点扬声器发声;
声音在空气中传播到录音点录音装置;
录音装置转换声音为模拟电信号,并将之转换为采样点数据流;
将包含回声的采样点搬运到录音缓冲区;
通过添加采样点的采样率及放音点和录音点的距离计算回声时延。
依照本发明的一个方面,所述放音点与录音点通过同一总线与缓冲区连接。
一种回声消除方法,所述回声消除方法包括以下步骤:
在直接存储器访问层设置缓冲区;
在缓冲区为即将播放的音频信号以一定的采样频率添加参考音采样点;
在缓冲区以同样的采样频率为录制的音频信号添加录音采样点;
根据放音点与录音点间距离和音频采样频率获得回声时延;
在缓冲区根据回声时延获得与录音采样点匹配对应的参考音采样点,从而获得录音音频和对应参考音音频的混合音频;
根据混合音频拆分出一路录音信号和一路参考音信号;
执行回声消除处理算法,得到干净的录音信号。
依照本发明的一个方面,所述缓冲区包括:播放缓冲区、录音缓冲区和混合缓冲区。
依照本发明的一个方面,录音缓冲区中收到的每一个录音采样点,都会从播放缓冲区找到它对应的参考音采样点,然后把两个采样点一起写入到混合缓冲区。
依照本发明的一个方面,所述回声消除方法包括以下步骤:
以固定速率将录音点录音装置接收到的外部声波转换为音频采样点数据流;
将音频采样点数据流搬运到录音缓冲区;
录音缓冲区中音频数据流满一个帧时,产生中断;
中断处理程序中,拷贝新的录音音频帧到混合缓冲区,并在播放缓冲区中寻找对应同步参考音频帧到混合缓冲区;
读取混合音频帧,并拆分出回声消除处理算法所需的一路录音信号和一路参考音信号;
执行回声消除处理算法,得到干净的录音信号。
依照本发明的一个方面,所述放音点与录音点通过同一总线与缓冲区连接。
依照本发明的一个方面,所述回声消除处理算法采用speek算法。
本发明实施的优点:本发明所述的回声消除方法,包括以下步骤:
在直接存储器访问层设置缓冲区;在缓冲区为即将播放的音频信号以一定的采样频率添加参考音采样点;在缓冲区以同样的采样频率为录制的音频信号添加录音采样点;根据放音点与录音点间距离和音频采样频率获得回声时延;在缓冲区根据回声时延获得与录音采样点匹配对应的参考音采样点,从而获得录音音频和对应参考音音频的混合音频;根据混合音频拆分出一路录音信号和一路参考音信号;执行回声消除处理算法,得到干净的录音信号;计算AEC时延精确度高,对于麦克风和扬声器位置固定的终端设备,可以精确的计算时间延迟,误差在一个采样点级别,远小于软件估算误差;占用CPU资源少,开销只有一次录音和对应参考音的额外拷贝。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明所述的一种回声消除数据流框图;
图2为本发明所述的一种回声消除时延估算方法示意图;
图3为本发明所述的一种回声消除方法示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
如图1和图2所示,一种回声消除时延估算方法,所述回声消除时延估算方法包括以下步骤:
步骤S1:在直接存储器访问层设置缓冲区;
在直接存储器访问层即DMA层设置缓冲区,所述缓冲区包括:播放缓冲区、录音缓冲区和混合缓冲区。在本实施例中,基于非实时linux嵌入式系统,包括有应用层、DMA控制器、I2S控制器、I2S总线和CODEC(编解码器),以及外设装备麦克风和扬声器等。缓冲层设置在DMA控制器中,具体为AEC混合缓冲区、DMA录音缓冲区和DMA播放缓冲区。
步骤S2:在缓冲区为即将播放的音频信号以一定的采样频率添加采样点;
步骤S3:在缓冲区以同样的采样频率为录制的音频信号添加采样点;
步骤S4:根据放音点与录音点间距离和音频采样频率获得回声时延。
所述回声消除时延估算方法,具体可包括以下步骤:
1)把播放缓冲区中某采样点搬运及转换为模拟电信号后驱动扬声放音点扬声器发声;
2)声音在空气中传播到录音点录音装置;
3)录音装置转换声音为模拟电信号,并将之转换为采样点数据流;
4)将包含回声的采样点搬运到录音缓冲区;
5)通过添加采样点的采样率及放音点和录音点的距离计算回声时延。
在本实施例中,定义了一个参数叫DMA层回声时延,它指的是一个采样点从DMA层发出,到DMA层收到这个采样点的回声之间的时间延迟。具体回声延迟的获取流程如下:
a.DMA控制器把DMA播放缓冲区中某采样点搬运到I2S发送缓冲区;
b.经I2S总线传输到CODEC,把采样点经DAC转换为模拟电信号并驱动扬声器发声;
c.声音在空气中传播到麦克风;
d.麦克风转换声音为模拟电信号,CODEC的ADC将之转换为采样点数据流,再经I2S总线传输到I2S接收缓冲区;
e.DMA控制器把此包含回声的采样点搬运到DMA录音缓冲区。
其中,步骤a和e所消耗时间基本可以忽略,步骤b、c、d耗时多且是可以进行计算的;计算如下,假设采用8kHZ采样率,麦克风和扬声器间距34CM,那么时间总和就是0.125ms+1ms+0.125ms=1.25ms。本实施例实际应用中,可以通过测试得到DMA层回声时延的准确值,在本实施例中先假定它为1.50ms,如果我们同步获取此时DMA控制器中录音和播放两个DMA通道的当前缓存工作位置指针,录音位置指针指向的是步骤e中当前录音采样点,播放位置指针指向的是当前播放采样点,由于录音和播放两个通道共享一个I2S总线,它们传输采样点是同步的,故而此时播放位置指针向前回溯1.50ms(即回溯12个采样点),对应的就是步骤a中的原始采样点。用这种方法为录音音频帧生成参考音频帧。
实施例二
如图1和图3所示,一种回声消除方法,所述回声消除方法包括以下步骤:
步骤S10:在直接存储器访问层设置缓冲区;
在直接存储器访问层即DMA层设置缓冲区,所述缓冲区包括:播放缓冲区、录音缓冲区和混合缓冲区。在本实施例中,基于非实时linux嵌入式系统,包括有应用层、DMA控制器、I2S控制器、I2S总线和CODEC(编解码器),以及外设装备麦克风和扬声器等。缓冲层设置在DMA控制器中,具体为AEC混合缓冲区、DMA录音缓冲区和DMA播放缓冲区。
步骤S20:在缓冲区为即将播放的音频信号以一定的采样频率添加参考音采样点;
步骤S30:在缓冲区以同样的采样频率为录制的音频信号添加录音采样点;
步骤S40:根据放音点与录音点间距离和音频采样频率获得回声时延;
步骤S50:在缓冲区根据回声时延获得与录音采样点匹配对应的参考音采样点,从而获得录音音频和对应参考音音频的混合音频;
步骤S60:根据混合音频拆分出一路录音信号和一路参考音信号;
步骤S70:执行回声消除处理算法,得到干净的录音信号。
在本实施例中,音频驱动程序集(ALSA)驱动中比标准ALSA增加一个了AEC混合缓冲区,DMA录音缓冲区中收到的每一个录音采样点,都会从DMA播放缓冲区找到它对应的参考音采样点,然后把两个采样点一起写入到AEC混合缓冲区。为方便理解,本实施例讨论采样率8kHZ的单声道录音和播放的情况。新缓存区中音频帧的基本数据格式是:(录音采样点1,参考音采样点1,录音采样点2,参考音采样点2,...,录音采样点n,参考音采样点n);最终上层调用读取AEC混合缓冲区得到混合信号,从中拆分出一路录音信号和一路对应的参考信号,作为AEC算法输入信号。
录音过程中处理一个新音频帧的基本流程如下:
步骤1.CODEC的ADC以固定速率将麦克风接收到的外部声波转换为音频采样点数据流;
步骤2.数据流经过I2S总线传送到I2S接收缓冲区;
步骤3.DMA控制器把数据流搬运到DMA录音缓冲区;
步骤4.DMA录音缓冲区中音频数据流满一个帧时,产生中断;
步骤5.中断处理程序中,拷贝新的录音音频帧到AEC混合缓冲区,并在DMA播放缓冲区中寻找对应同步参考音频帧到AEC混合缓冲区;
步骤6.通知ALSA新的音频帧就绪;
步骤7.上层应用从ALSA读取混合音频帧,并拆分出AEC算法所需的一路录音信号和一路参考音信号;
步骤8.执行回声消除处理算法,得到干净的录音信号;
步骤9.结束。
关键点是步骤5中如何寻找一个录音采样点对应的参考音采样点,为此,定义了一个参数叫DMA层回声时延,它指的是一个采样点从DMA层发出,到DMA层收到这个采样点的回声之间的时间延迟。具体回声延迟的获取流程如下:
a.DMA控制器把DMA播放缓冲区中某采样点搬运到I2S发送缓冲区;
b.经I2S总线传输到CODEC,把采样点经DAC转换为模拟电信号并驱动扬声器发声;
c.声音在空气中传播到麦克风;
d.麦克风转换声音为模拟电信号,CODEC的ADC将之转换为采样点数据流,再经I2S总线传输到I2S接收缓冲区;
e.DMA控制器把此包含回声的采样点搬运到DMA录音缓冲区。
其中,步骤a和e所消耗时间基本可以忽略,步骤b、c、d耗时多且是可以进行计算的;计算如下,假设采用8kHZ采样率,麦克风和扬声器间距34CM,那么时间总和就是0.125ms+1ms+0.125ms=1.25ms。本实施例实际应用中,可以通过测试得到DMA层回声时延的准确值,在本实施例中先假定它为1.50ms,如果我们同步获取此时DMA控制器中录音和播放两个DMA通道的当前缓存工作位置指针,录音位置指针指向的是步骤e中当前录音采样点,播放位置指针指向的是当前播放采样点,由于录音和播放两个通道共享一个I2S总线,它们传输采样点是同步的,故而此时播放位置指针向前回溯1.50ms(即回溯12个采样点),对应的就是步骤a中的原始采样点。用这种方法为录音音频帧生成参考音频帧。
基于非实时linux嵌入式系统,采用软硬件结合的方式,在DMA层产生精确对齐的录音信号和参考信号,极大提高了回声消除效果,且基本不额外占用CPU资源。本发明的验证使用speex回声消除算法,speex本身不包含时延估计算法,但对时延精度要求很高,与本发明互补性强,由于本发明时延估算精度高,充分发挥了speex算法的优势,实测效果比很多集成了商用回声消除算法的DSP还要优秀。
本发明实施的优点:本发明所述的回声消除方法,包括以下步骤:
在直接存储器访问层设置缓冲区;在缓冲区为即将播放的音频信号以一定的采样频率添加参考音采样点;在缓冲区以同样的采样频率为录制的音频信号添加录音采样点;根据放音点与录音点间距离和音频采样频率获得回声时延;在缓冲区根据回声时延获得与录音采样点匹配对应的参考音采样点,从而获得录音音频和对应参考音音频的混合音频;根据混合音频拆分出一路录音信号和一路参考音信号;执行回声消除处理算法,得到干净的录音信号;计算AEC时延精确度高,对于麦克风和扬声器位置固定的终端设备,可以精确的计算时间延迟,误差在一个采样点级别,远小于软件估算误差;占用CPU资源少,开销只有一次录音和对应参考音的额外拷贝。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本领域技术的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
- 上一篇:石墨接头机器人自动装卡簧、装栓机
- 下一篇:语音降噪方法、装置及设备