高通音频调试总结_高通音频增益调试总结
高通音频调试总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“高通音频增益调试总结”。
高通音频调试总结
----夏珊珊
之前会议电话项目我们设计的方案是:外部的codec内带音频处理dsp接6270模块工作。外部codec+6270与高通的codec+dsp工作方式大致相同。所以调节音频的工作原理可以以高通内部的原理来作依据。
在调节会议电话的时候我们遇到了一个很大的问题,底噪。我们在这个问题上纠结了很久。调节了mic的滤波电路,高通的AGC参数,TX,RX filter 参数,都没有明显的改善,后来我们把mic断开接地,发现tx端还是有很大的噪音,截取输入到高通的音频噪音比较明显,从而我们确定了这个噪音是由外部的codec所引入的。调整音频的时候分析噪音来源比较重要,这样相应调整各部分增益来使噪音源影响尽量减小。
对于噪音处理,发现不管使用高通的AGC压制噪音还是使用外部CODEC带的DSP处理噪音都对音质有很大的损伤。所以建议在调整音频之前先最大限度的保证结构和硬件设计的优化性,毕竟软件可以对数字噪音处理比较理想,但是对于模拟噪音就不是万能的了。具体对于噪音的处理后续会在文档中提到。
高通音频通道及调整
基本概念
回音:Near end 端不说话,far end说话了后经过上图的path,经过喇叭播放后在空中回荡,又被mic收回去,在far-end听到了自己的声音。
Echo path:从Echo Canceller出来,经过gain、a/d转换 到speaker 经外面的环境,然后又被mic收回,通过一系列的通道到Echo Canceller。
Acoustic echo path:从speaker 出来,在环境中回荡后再进mic
从上图可以看到:
如果TX进来的ECHO跟我们估测的ECHO相近,Ataptive filter相减TX进来的echo可以消除回音。
Ataptive filter:用于模拟echo。
PCD(Path Change Detect):当使用者在移动,acoustic echo path也会改变。SPDET:用于检测是far end speaker讲话或者near end speaker,防止near end speaker讲话的时候被抑制掉
理想的状态是TX进来的echo,跟我们估测echo相近,相减就为0,但是实际上不可能,所以需要一个DENS消除非线性的回音,我们选择0~4KHZ是因为这个范围的声音是人声范围。
调整顺序:
设置音量等级和AGC gain→EC gain和 limit→codec和mic的gain→Ec parameter。高通的default volume 基本上可以使用于各个普通的场合。
AGC gain 我们首先调整外围的gain,比如tx agc、txvolume,AGC处理噪音比较有效,但是会相应的牺牲tx端的音质及音量大小。如果这个噪音会随着Rx_Volume变化,在拔出手柄或者静音Rx_CODEC_GAIN(0x0000),噪音明显减弱,那么这个噪音是数字噪音,可以使用RxAGC减弱,具体的操作方法是:
设置Rx AGC工作在静态增益模式(compFlinkAIGFlag=0x0000); 减弱‘rx_agc_static_gain’为0dB(compFlinkStaticGain=0x2000); 增加‘rx_agc_exp_thres’ 到-40dBm0mu(expFlinkThreshold=0x1180).同样TX端的数字噪音也可以调整TX AGC 消除,调整的方式于RX AGC相同。在音频通路上,建议调整增益的地方是codectxgain 和txvolume,这样做的目的是防止送入codec处理的音频信号太大出现削顶失真,使EC无法很好的模拟回音并处理掉回音。所以我们尽量在EC处理完毕后对信号进行放大。
EC gain和limit 外围的gain调整完毕后调整EC block gain(input gain、output gain)在调整的时候,rx volume 是调整到最大处理,这样做为了避免rx 方向上声音太小,扬声器声音不够大,不易于测试回音。
Nlpp limit:当input太大的时候,rx收到的声音特别大声,但是spk不总是这么大声,这样使ECHO收到的东西太多失真,设置limit的话使突强的时候使进入EC的echo不要太多。AF limit:控制TX方向的,EC 无法收敛,或者收敛的速度太慢,收到的东西突强太多,这样使用limit 解决,用于限制突然大声的信号。
Codec及mic的gain 随后设置codec和mic的gain,文章开端曾提到若模块有噪音,噪音的来源必须找到,并相对于此来设置codec及mic的gain。我们的应用噪音是来自于codec芯片本身,所以对于mic增益的降低对噪音是没有益处的,因为噪音会随着ADC的放大而放大,衰减而减弱。Mic增益小,相对的ADCgain必须放大才能让tx端听到清晰的声音,这样反而把噪音放大了。所以为了让产生的噪音最小,我们尝试把mic的增益放大,ADC gain衰减来减弱噪音,达到比较好的效果。所以调整这部分的增益需要根据具体的情况,具体的模块相应调整。
Ec parameters 对回音来说,结构及材料也有很大的影响因素。我们在设计的时候必须要考虑到这些因素才能更好的实现音质效果。比如SPK与mic必须尽量的拉开距离;mic腔体不能太大,mic使用专门的泡膜包起来;机壳的材质最好使用吸引的材料,防止大声音播放的时候机壳震动影响mic等等,这些在前期的时候最好设计考虑到。
关于EC参数,高通有几组默认的回音参数,从Speaker phone 到bluetooth 几个等级。通常尝试的时候从普通的模式到aggreive尝试,ECHO canceller的肯定会伤害到double talk的能力,所以可以不用不压抑太多就不要压抑太多。如果尝试模式的参数没有echo,就选择压制的比较小的那组参数。总之是在Double talk 和echo canceller取得一个平衡。
细调
如果使用aggreive那组参数,echo还是没有消除,那么查找echo path delay Echo会随着echo path改变,echo path有长短。当echo path delay设置不好,会使echo收敛不好。
如果不知道要设置多少的话就先设置为0,然后慢慢向上调整。
调整进入AF的参数
调整进入AF的两个进入EC的input的大小,他们的大小关系必须在一定的范围,AF才能正常的收敛。
X[K]> Z[K],AF才能正常的收敛。从网路端送来的信号,ECHO是从环境处理后的声音,肯定是稍微有点小,但是如果经过codec处理后就可能比X大,那么就使用Inputgain降低,然后增大OutputGain。
EC已经收敛了,如果有非线性的echo无法消除,通过设置 DENS_tail_portion: DENS_tail_alpha: DENS_NL_atteu:
这几个参数设置越大,echo 消除能力越好,但是影响double talk 高通给出的参数适用于大部分的场合,只需要在默认参数的基础上微调就可以了。这些参数的调整如果使用工具调整就比较方便了。下面就讲讲音频调试工具。
音频调试工具
音频调试工具的比较(这个是引用了钟明同学的文档,他的高通文档讲解的比较清晰了,我对其引用补充下吧 O(^_^)O)
AT Command: 引用了6100的使用的AT命令作个简要的介绍。设置回音的ECHO命令AT+ECHO和AT+ECHO1可以设置回音的28个参数。
AT+CLVL: 音量级别设置 AT+RXVOL: RX端音量设置 AT+CMUT:静音设置 AT+CMIC: mic音量设置 AT+SIDET:侧边音设置
AT+ECHO:设置手持与免提模式下的回声各个参数 AT+ECHO1:设置蓝牙耳机与普通耳机的回声参数
QACT 需要导入正确的audio_cal.xml,通常这个文件在工程里带有 使用步骤
1.配置QPST,使使端口出现在active Phones tab。
如果设备没有连接上或者XML文件导入错误,在QACT v1.x的版本会弹出这个窗口。表示只能在PC上调整,而无法在线的把数据导入到模块。
导入正确的xml文件
如果连接成功,可以看到以下图片,选择“否”,也就是不把XML 中默认的结果导到模块里面去。(我们这里只是调试,不要导入.XML 中默认的值)
我们在里面会调整的比较多的是: 调整codec的gains
Graphical拉AGC 参数,从Data获取参数
拉TX,RX filter 曲线
选择对应的path,device,拉出曲线后可见右边的7个参数,对应于代码里voc_pcm_path_cal_type结构体中的tx_iir_filter。
QACT在线调试必须通话挂机后才生效。而且拉TX,RX filter无法模拟模块里原来的声音曲线,调节音质曲线个人比较倾向于使用Qfilt。
QFILT 使用音频分析仪器获取未处理的(TX/RX filter全部设置为0)频响曲线。把这个曲线数据保存为*.EXP格式。
之前在龙旗做测试的时候发现使用仪器获取曲线数据无法直接保存为.EXP格式,保存为.ASM格式,将保存的数据去掉100之前及4000之后的数据,加上固定的格式如下:
# 09-27-06 15:32:32.49 Hz dBPa/V 100 0.239521 105.83 0.174744 112 0.105024 118.322 0.0793721 125 0.0562545 132.288 0.0526554 140 0.0522274 149.666 0.0886258 160 0.144394 169.706 0.17004 180 0.128156 189.737 0.0954074 „„„„ 3768.29 0.286294 4000 FAIL 保存为.EXP格式,红色的是RX的首尾固定格式,Tx的首尾固定格式如下:
# 09-29-06 15:05:11.04 Hz dBV/Pa „„ FAIL 使用QFILT导入对应的RX或者TX数据,导入数据之前必须配置右边的相关设置。选择Test Mode,Test Cla,Test Path及Filter Type 0.676438
导入文件后的初始化曲线,这个曲线跟使用仪器测出来的频响曲线一致。
通过调整滤波曲线后的图如下:绿色是调整后的曲线,黄色的是原始的曲线,红色的滤波器的调整曲线。我们调整曲线的目的是确保调整后曲线在两条白色的曲线之间,且比较平滑。
调整到合适的曲线则点击Get Cofficients 获取调整的参数
在实际测试的时候如果把这个参数写入程序然后编译下载效率太慢了,这个时候可以直接使用QDV把这些实时的数据写入到模块,在通话的过程中实时生效,使用测试仪器测试使用调整后的参数曲线是否能通过测试。
QDV QDV使用需要导入正确的rpt文件。这个文件可以跟高通提SR获取。
之前遇到使用了错误的rpt文件导致有些参数设置不正确,所以一定要确保使用正确的文件。
启动QDV,首先看到以下的界面:
MEMA , MEMB , MEMC , MEMI值一定要设置正确,这个值可以通过查看代码获取。设置完成后进入以下界面
它的工具条如下所示
选择导入.rpt文件。
选择完.rpt文件后 点击 打开一个Text view 界面,右击选择需要修改的参数。
选择new可以导入一个新的参数。
导入后如图,选中变量后点击
可以修改变量值。
调整EC block中参数,配置完成后,必须写ecParametersUpdated使回音参数生效。如下图,设定了Echo参数后需要设置ecParametersUpdated为FFFF使其生效,设置完成后它会自动跳变为0000.同样,对于TX filtr和RX filter也需要写一个load参数(txPcmFiltLoad和rxPcmFiltLoad)FFFF使写入的参数生效,同样这个参数生效后会自动跳回0000。