哈喽大家好,这是该系列博文的第五篇~ 篇~
<<【系列博文索引】快速通道 >>
一、前言
一次心血来潮,使用正在开发的蓝牙耳机跟媳妇交流感情,正说着,媳妇那边却生气了,遂问原因,她说我吐字不清晰,声音又小,没一点子诚意!W.T…我明明诚意满满,难道是耳机的上行通话有问题?我赶紧换回手机,一顿口吐莲花操作,媳妇那头才消了气。
二、言归正传
1、声音小
打开BES的工程,在tgt_hardware.h中上行通话音量的宏CODEC_SADC_VOL默认是12,也就是对应的22dB;如图,如果通话时上行音量小,还可以加大到15(28dB)。
通过修改CODEC_SADC_VOL可以调整上行数字增益,增大通话上行音量,但此时会同等的把低频放大,可能会出现底噪或者通话不清晰的问题。
2、通话不清晰
通话算法的宏开关都在target.mk文件中(不同芯片,不同项目的target可能不同),含有TX的表示是上行算法参数,含有RX的表示是下行算法参数。
通话的上层数据应用在app_bt_stream.cpp文件中的bt_sco_player函数,开启通话算法时需要根据不同算法类型变更主频,所有算法参数都在 bt_sco_chain_cfg_default.c文件。
1)SPEECH_TX_EQ
首先打开宏SPEECH_TX_EQ,引入上行的EQ,通过调试EQ增益来消除底噪;(同理打开宏SPEECH_RX_EQ,可以调整下行的EQ,去掉几十Hz的背景音)。
Acoustic Echo Canceller (AEC)
当双工(同时双向)通信中的一部分信号返回到源信号时,就称为“回声”。在长距离模拟和几乎所有的数字通信系统中,即使是很小的回波信号也会因为严重的往返延迟而造成干扰。
在语音通信终端中,由于扬声器和麦克风之间的声学耦合而产生声学回声。由于在通信信道中应用的非线性处理,如有损声码器和转码,回声波必须在设备内部进行局部处理(取消)。
Acoustic Noise Suppressor (ANS)
噪声抑制技术降低了单通道语音信号中的平稳和暂态噪声,提高了信噪比,提高了语音清晰度,降低了听力疲劳。
2)SPEECH_TX_AEC2FLOAT
SPEECH_TX_AEC2FLOA宏默认是打开的,也就是默认打开了回声AEC和噪音抑制ANS;(此时采用的是NS2FLOAT算法,可以把ns_enable改成false,打开更优的NS3版本的算法,更优的算法需要更高的主频,需要在bt_sco_player接口中提高主频:freq = APP_SYSFREQ_104M,否则会出现死机的情况,同样当添加第三方算法时,也需要把ns_enable改成false)。
3)SPEECH_TX_COMPEXP
如果出现消回声效果不理想,可尝试关闭宏SPEECH_TX_COMPEXP;由于宏SPEECH_TX_COMPEXP这里有6dB的增益,关闭宏会导致上行音量降低6dB;这时可采用后端补偿:通过打开宏SPEECH_TX_POST_GAIN,把增益增加6dB。