>
音频设备是否产生回声,很大程度上取决于机构的设计是否合理。不合理的机构设计会大大增加出现回声的概率,而且出现的回声会比较严重,难于消除。我们改进了音频设备机构上的设计,在设计之初就尽可能避免回音的产生,而且扬声器和麦克风的距离尽可能保持一定远的距离,如图5所示。实践中发现,扬声器和麦克风之间的距离保持在10 cm以上,效果会比较好。
为了尽可能减少扬声器和麦克风之间的声音传播,可以采用以下2种设计方案:方案一是把麦克风隔离开来,如图5(a)所示;方案二是把扬声器隔离开来,如图5(b)所示。当然,为了达到更好的效果,可以把扬声器和麦克风分别隔离开;但是鉴于成本的考虑,使用其中的一种即可达到比较好的效果。具体的实现方法分别是:
①用橡胶套密封扬声器的边缘,尽可能避免声音从机构内部回流到麦克风;同时把麦克风密封在一个腔体之内,以隔离外部噪声的进入。
②把扬声器密封在一个腔体之内,以尽可能隔离扬声器的声音向外部传播;同时使用橡胶套密封麦克风的边缘,以避免扬声器发出的声音进入。
另外,扬声器和麦克风在设置的方向上也有讲究,如图6所示。两者最好是相差180°,90°也可以接受;但是如果两者的方向相同,如图6(c)所示,则出现回声的概率和程度都很大。
3.3 软件架构设计与实现
软件架构示意图如图7所示。
回音消除驱动的开发需要完成以下几步:
①给回音消除芯片上电,并初始化其相关的寄存器和GPIO;
②初始化I2C总线,并配置I2C速率等的寄存器,使其处于正常运行状态;
③检查I2C总线是否已准备好;
④通过I2C总线读取回音消除参数;
⑤等待回音消除芯片处于可读/写状态,然后把参数写入到芯片里,使配置的参数生效。
3.3.1 FM2010上电时序
当对FM2010初始化时,比较重要的一点是要按照其规格说明书定义的上电时序进行,否则可能会导致录音声音时有时无的情况发生。具体的要求如图8所示。在初始化FM2010时,PWD high的状态必须要在RESET high状态之前设定,两者之间相差5 ms。
3.3.2 读/写Echo parameter
FM2010芯片的初始化比较简单,只要按照上述的时序进行初始化即可。下面重点剖析回音消除驱动的开发要点,即如何读/写回音消除参数(详见代码中的①和④)、设置回音消除芯片的工作模式(详见②处),以及配置I2C总线(详见③处)。
结 语
本文在分析语音通话中回声产生的机理的基础上,详细研究了回声消除的原理、基本声学回声产生根源,提出了改进的PDA或者手机等音频设备的机构设计方案;针对FM2010芯片的特点,给出了回声消除驱动开发的软硬件设计方案,并且给出了回音消除驱动程序关键代码的实现。本文设计的软硬件解决方案已经在基于WinCE操作系统平台和FM2010硬件平台上得以实现,在实际项目开发中得到采用,并且获得了良好的应用效果。