基于EasyEDA平台设计FM1188消回音调试板
最近有在做一些对讲设备,测试的时候,每次对着麦克风讲完话,总能从面前的喇叭上听到自己讲的话。想起偶尔打电话的时候也会出现相似的情况,就是不知道为什么电话里有自己的讲话声,之前只觉得电话出问题了,或者是信号串了之类的,没思考过。这回是面对面碰到了这种现象,了解后才知道这个是对讲系统设计中最棘手的问题之一,回音问题。经过一段时间与回音问题的抗争,积累了不少回音消除方面的经验,而今天就将这些经验分享给大伙,主要是其中用到的一款消回音调试板。
这次为了分享完整的设计,我使用的工具是EasyEDA。这个网站对硬件设计开源支持非常好,和Github有点相似,不过侧重于开源硬件设计,而且个人觉得比Github亲民很多,Github只有英文版本,天生就是为大神们量身打造的。Github侧重的是软件的开源,有很强大的版本管理功能,能够完全记录每一个文本格式的文件的修改历史,并比对不同版本文件间的不同点,而且支持在线阅读代码。不过这种强大的管理功能也只限于文本格式的文件,对于非文本格式的文件,Github都认为它是一个文件,只记录它的版本,如果你对这个文件修改的内容描述不够 详细,过段时间后需要回滚版本就得很麻烦,而且Github是不支持这种文件的在线浏览的。EasyEDA支持在线进行硬件设计,并且具有很好的项目管理和版本管理功能。挑两张图略略说明一下EasyEDA,因为下面主要是在它上面操作的。
花了点口水,描述了一下设计工具。工欲善其事必先利其器嘛,因此我再花点时间给刚遇到回音问题的伙伴们普及一些基础知识。
对讲系统回音原理
它的基本原理就是这样,如下图,音源(用户讲话)从本地设备的麦克风采集后,通过网络发往远端设备,远端设备从喇叭中播放出来音源的声音(通常会经过放大),如果远端设备没有进行消回音处理,那么这个远端设备的喇叭播放出来的声音,就会被远端设备的麦克风采集到,并通过网络传回到本地设备,并经过放大,从本地喇叭播放处理。
模拟对讲系统比较少出现对讲回音问题,原因有两个:1、传输延时很小,即使有声音,通常也会隐藏在自己的讲话声中,使用者不容易察觉。2、也由于第一点原因,模拟系统的消回音处理也相对简单(有了解过回音消除算法的伙伴们应该知道这个回音回来的时间上是关键参数,这里不讨论回音算法,所以不赘述),直接将输出和输入做减法运算,消回音效果就基本能保证了。我们常用的模拟对讲系统有传统的固话系统,而IP电话则是(数字)网络对讲系统。
对讲回音与啸叫区别
下图简单地示意了啸叫的形成,基本的原因就是麦克风采集的音频通过放大后从扬声器播出,若扬声器放得比较靠近麦克风,那么声波通过空间传回麦克风,麦克风将这些放大后的声音再次采集送往功放放大,然后从扬声器播出,以此反复,声音越来越大,从观察者的角度,就更喇叭叫了起来一样,听到刺耳的巨响。这个和海啸有点像,地震波推着海浪向前,后来的波浪会叠加到前面的波浪上,最后越叠越高,形成巨型的海浪,造成惊人的破坏力。
回音也可以引起啸叫,不过这个回传的路径不单只包括空间(声学回声传播路径)还包括电路线缆,不过“叫”起来的原因是一样的,有音频的回环,并且在环上有放大环节。
消回音常用手段
早时候,算法还不够完善,为了处理回音、啸叫这种种音频问题,网络对讲系统曾经为了绕过它们而采用单工的对讲方式,就是我讲的时候不能听你讲,回想一下,在医院打点滴,如果点针水快用完,就需要按边上的按钮呼叫护士,需要按下按钮获得讲话的权限,而护士听到了呼话后,在总台同样需要按下按钮进行恢复。半双工对讲系统就是这么个令人纠结的系统。
目前消回音算法取得了极大的进展,不用再使用半双工的蹩脚方式避让开回音问题了,了解了一圈,消回音通常有三种处理办法,1、使用对讲程序现成的消回音库,这些库有免的如webRTC或者freeswitch消回音库开源版本,也有收费的如 freeswitch的消回音库商业版本;2、使用富迪的消回音芯片,这种芯片其实上就是一个专用DSP加上固化了的消回音程序(固件),并开放参数调节接口;3、使用DSP跑自主开发的消回音算法,因为这类算法涉及的浮点运算比较多,通常需要使用高性能的DSP芯片才能支撑。第一种方式消回音效果好,但是通常使用的自适应算法需要收敛时间,这种方式收敛时间相对较长。第二种方式简单易用,算法收敛快,效果也能满足大多数使用情况下的要求。第三种方式,无论是消回音效果或收敛时间都能达到最优,不过技术门槛较高,成本也较高。
FM1188消回音调试板设计
科普了一大段,终于要进入主题了,如何设计FM1188消回音调试板。
其实在消回音领域富迪的方案还是用得相当广泛的,淘宝上也有各种已经烧好了参数的小模块,如下图,可以直接嵌入电路使用。不过这种模块不方便调试参数,而今天的调试板充分考虑了调试的各种情况。
如图2所示,其中每张原理图放置板子的一个功能模块,接下来分别说一下这些功能模块的作用和设计注意事项。(整幅图片可能看起来比较模糊,有需要的伙伴们可以登录下文项目链接进行探讨)
1、ALC5640音频编解码电路
ALC5640是REALTEK公司推出的一款高性能的多通道编解码芯片,有两组I2S接口,能当Audio Hub使用,能够真正实现全双工操作,就是编码的同时进行解码。而且体积小通常用在移动设备上。
为了确保音质,需要降低电源噪声,调试板的编解码芯片采用独立的线性电源供电,如下。板卡上的每个模块都尽量保持低噪声很重要,在调试的时候才能更好地评估,设计对正真噪声(空间声学噪声)的抑制效果。
ALC5640内置双通道D类功放,最大支持5W功率输出,输出必须加滤波电路,如下:
接口处将所有控制信号、音频输入输出引出来,封装采用2.54mm引脚间距的双排插针,方便后续使用杜邦线根据需要互联电路,如下:
2、AMPLIFIER功放电路
功放模块设计包含了两个不同输出功率的功放芯片,其中LM4950是7W,LM4871是5W,而且两个芯片都具有静音控制功能,这是为了后续调试的时候更好地比对在不同喇叭响度的情况下比对消回音效果。
和音频编解码模块一样,电源采用线性电源独立供电,降低电源噪声;接口处将所有控制信号、音频输入输出引出来,封装采用2.54mm引脚间距的双排插针,方便后续使用杜邦线根据需要互联电路,如下:
LM4950和LM4871内部原理类似,都是桥接方式推动喇叭工作的,如下,无需外接隔直大电容,这是一种OCL(output capacitor less)功放电路。
3、FM1188消回音模块
FM1188是富迪公司(fortemedia)推出的语言处理芯片,它能够降低环境噪声、定向采集声音、消回音等。它的内部消回音算法或者说消回音处理逻辑如下:
因为是调试板卡,配置是不固定的,增加跳线接口,用于调试的时候根据需要进行配置。配置包括两种,一个是参数下载方式的配置,FM1188共支持4种参数下载方式:1、从256 BYTE EEPROM读取参数;2、从1 KBYTE EEPROM读取参数;3、从SHI接口读取参数;4、从UART接口读取参数。淘宝上卖的模块通常是将参数预先烧写到EEPROM中,而且参数通常不多,然后配置成第一种参数下载方式,方便客户使用。还有一个是烧写参数位置的配置,可以根据配置将程序烧写到EEPROM的不同地址。
所谓的配置指的就是设置功能引脚上电时的电平,预留2.54mm引脚间距的双排插针,后续使用跳线帽进行跳线即可,如下。
引出音量调节引脚,方便调试的时候随时可以改变音量,以便在不同响度情况下,观察消回音效果。
原理图模块就这些,接下来画PCB,PCB图设计也在EasyEDA上实现(作图思路大同小异,对工具有兴趣的伙伴们自行百度EasyEDA,这里不详述),在这说明一下设计时的注意事项。先上整体效果图,如下:
样板设计完之后想看板卡的生产时的效果图也可以用EasyEDA预览,如下,是不是真的很像打样回来的样板呢?
最终做出来的样板如下,由于走的公司渠道的打样,有部分公司信息,因此图片打了马赛克。
麦克风接FM1188进行声音采集,并虑除回声,和噪声;FM1188处理过后的音频信号传给音频编解码芯片ALC5640的LINEIN进行采集并编码;音频编解码芯片ALC5640输出的音频LINEOUT一方面输给功放放大,一方面为FM1188提供参考(没有参考音源是无法消除回声的,要不然FM1188如何知道喇叭播出了什么声音?)
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码