1 开发平台与基本概念介绍
WinCE是Microsoft公司推出的功能强大、紧凑高效、可伸缩的32位嵌入式操作系统,主要面对各种各样的嵌入式系统和产品。该系统所具有的多线程、多任务、完全抢占式的特点是专为各种具有严格资源限制的硬件系统所设计的。
FM2010是ForteMedia公司推出的一款语音处理器,具有迷你型尺寸、单芯片解决方案、高性能、低功耗,以及优良的回声消除和噪声抑制功能,利用创新的SAM(小型阵列麦克风)技术与波束形成能力使其功率消耗仅为25 mW。FM2010具有提高电池寿命、降低功耗和节省芯片尺寸等优点,可满足便携式手持掌上电脑、笔记本电脑、平板电脑和手机的严格要求。
2 回声产生的原理与消除方法
2.1 回声的基本概念和产生原理
通常意义上的回声可以分为电学回声和声学回声,前一种是由于服务提供商的线路质量所致,而后一种则是由于用户端设备的质量所致。
2.1.1 电学回声
在PSTN (Public Switched Telephone Network,公共交换电话网络)中,为了降低电话中心局与电话用户之间电话线的价格,用户线间的连接采用两线制,而电话中心局之间连接采用四线制。在这样采用混合线制的电路中,由于阻抗的失配,会不可避免地产生电流泄漏。电流泄漏使得一部分信号的能量反射回信号源,这种反射和信道延迟结合在一起,使讲话者听到自己的声音,即为电学回声。
2.1.2 声学回声
声学回声是指扬声器播出的声音在被受话方听到的同时,也通过多种路径被麦克风拾取到,传输到说话方的一端,从而形成声音回路。当回声返回时间超过10 ms时,人耳就可听到明显的回声了。多路径反射的结果产生了不同延时的回声,包括直接回声和间接回声。
①直接回声是指由扬声器播出的声音未经任何反射直接进入麦克风。这种回声的延时最短,它同远端说话者的语音能量,扬声器与麦克风之间的距离、角度,扬声器的播放音量,麦克风的拾取灵敏度等因素直接相关。
②间接回声是指由扬声器播出的声音经过不同的路径(如房屋或房屋内的任何物体)的一次或多次反射后,进入麦克风所产生的回声的集合。房屋内的任何物体的任何变动都会改变回声的通道,因此,这种回声的特点是多路径的、时变的。
对于电学回声的消除,通常由服务提供商提供解决方案。本文研究的重点是声学回声的消除机制,为了防止声音回路的产生,通常需要在硬件和软件设计中采取一定的解决方案。
如图1所示,双方在使用PDA或者手机进行通话时,假设B是主话方,A是受话方:
①B说话的声音经过电信或者移动路径传输到A的设备上;
②声音经过扬声器发出,由于硬件和机构设计上的局限性,会有部分声音渗透到A的麦克风;
③渗透出的声音又传输回到B,导致B能听到自己的声音。
这样,便形成了声音回路,即产生了回声。
PDA或者手机内部结构声音回路示意图如图2所示。在全双工的情况下,扬声器和麦克风之间至少要保持4 cm以上的距离,才能比较好地避免回声问题。在实际情况下,绝大部分的回声回路形成于机构内部,而由机构外部扬声器回流到麦克风的声音,由于距离较长,基本可以忽略。
由于硬件和机构设计上的局限性,在机构内部不可能完全隔离声音的传播,因此从扬声器出来的声音会有一部分会渗透到麦克风,从而产生回声。
2.2 基于FM2010的回声消除原理
FM2010使用的是自适应回声抵消原理,它的基本思想是:估计回声路径的特征参数,产生一个模拟的回声路径,得出模拟回声信号,从接收信号中减去该信号,实现回声抵消。以图3所示的受话端通话流程为例,图中左上方的MIC IN是麦克风进入的信号,即用户的声音输入信号,其中包含由本机扬声器漏进去的部分主话端的语音信号;右下方的Line IN接入是主话端的语音信号,即由本机扬声器输出的信号直接接入到FM2010回音消除芯片的Line IN输入端。在FM2010内部会经过DSP芯片的运算处理对两者进行比较,消除MIC IN信号中与LineIN端相同的信号(即回声音频信号),使用自适应回声抵消原理达到消除回声的目的。MIC IN和Line OUT之间路径上的寄存器需要进行配置和调试,DSP使用这些配置的数据作为特征参数来进行运算处理。
3 基于FM2010的回音消除驱动设计
3.1 硬件架构设计
图4是硬件架构示意图。CPU 通过I2C总线 来控制回音消除芯片读/写回音消除参数(echo parameter)。录音信号先经过回音消除芯片处理后经移动信道传输到对方接收设备,经过对方音频编解码器处理后再通过扬声器或者耳机输出。
3.2 音频设备机构设计
音频设备是否产生回声,很大程度上取决于机构的设计是否合理。不合理的机构设计会大大增加出现回声的概率,而且出现的回声会比较严重,难于消除。我们改进了音频设备机构上的设计,在设计之初就尽可能避免回音的产生,而且扬声器和麦克风的距离尽可能保持一定远的距离,如图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硬件平台上得以实现,在实际项目开发中得到采用,并且获得了良好的应用效果。