我是靠谱客的博主 无辜水池,最近开发中收集的这篇文章主要介绍高通平台音频调试心得,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

平台: QSC60X0
参考文档: 80-V9137-1, 80-VH828-1, CL93-V6321-1, 80-VA552-11
参考代码: msmaud.h,  sndcal.c ,  voccal.c
工具: FIR/IIR滤波器调节工具---QFILT  

      本文主要是针对QSC60X0的音频调试,但是高通音频部分的原理都是大同小异的,所以对于其他平台也有借鉴作用。首先我们要熟悉平台的音频通路:






一,音频通路说明
1.发送通路(TX)---表示本地到远端,即发送给对方的声音通路
      声音一开始是从MIC 进入,这里有2个MIC ,默认MIC1用于手机(handset),MIC2用于耳机(headset)。之后声音进过2个可选增益的AP,注意第一个AP只能选择0db或+24db,而第二个AP的增益范围就大了很多,从-6db~+24db,步长1.5db。通过codec的寄存器,可以选择AP的增益,以及使用哪个AP(全选,全不选,或则只用一个,另一个bypass)。经过ADC之后,有两个滤波器HPF和SLOPE,HPF滤出120Hz以下信号,SLOPE会增强1kHz以上的高频信号。在进入QDSP前,有一个可编程增益CodecTxGain,范围-84dB~12dB。这里还有直连到RX后级的侧音增益控制side_tone_gain。进入QDSP后,首先经过EC(回声消除器),然后经过NS(噪声抑制器)和TX AGC,到这里声音信号已经达到最大信噪比。然后通过Tx PCM Filter,这是个FIR滤波器,根据自身的幅频和相频特性影响SFR(发送频响)。最后还有一级可编程增益TxVolume,也会影响到SLR(发送响度)。

1.接收通路(RX)---表示远端到本地,即本地听到声音的通路
      与TX部分类似。需要补充一点,除图中所示外,SPEAKER还会在PMIC中进行最后一级放大,声音从MIC进来以后,流到CODEC,然后从AUXOP,AUXON输出,流到SPKR_IN_M,SPKR_IN_P, 即进入PMIC,这时可以通过PMIC的API pm_set_speaker_gain(PM_SPKR_GAIN_PLUS12DB)定义增益大小(在sndhw_init()中),放大增益范围为[-16,-12,-8,-4,0,4,8,12]dB ,最后通过SPKR_OUT_P,SPKR_OUT_M输出到喇叭。

二,音频校准
主要修改2个文件 sndcal.c ,voccal.c


1.先要理解两个常量,一个是voccal.c中的常量voc_pcm_on_chip_0_gsm_cal,结构如下:
typedef struct {
  voc_ec_type ec_mode;   /* Echo Cancellation mode    */
  voc_ns_type ns_enable;  /* Noise suppressor enable   */
  uint16 tx_gain;    /* TX Voice Volume           */
  uint16 dtmf_tx_gain;   /* TX DTMF gain              */
  uint16 codec_tx_gain;   /* CODEC TX gain             */
  uint16 codec_rx_gain;   /* CODEC RX gain             */
  uint16 codec_st_gain;   /* CODEC ST gain             */
  qdsp_cmd_pcm_filter_type tx_filter; /* TX PCM filter coefficients*/
  qdsp_cmd_pcm_filter_type rx_filter; /* RX PCM filter coefficients*/
  sint15 rx_dbm_offset;     /* RX offset in dBm          */
  qdsp_cmd_agc_param_type agc_param; /* AGC/AVC parameters        */
……
……
}voc_pcm_path_cal_type;
根据注释,很容易找到Tx Codec Gain, Tx Volume, Rx Codec Gain, ST Codec Gain, Tx PCM Filter, Rx PCM Filter。这里找到的Gain和Volume增益计算公式为:Gain(dB) = 20*LOG(Value/16384)。

2.另一个是Sndcal.c中的snd_cal_handset_voice_vol。平台默认为四级音量,数组的第一竖列就是每级音量对应Rx Volume的大小。
VOL_MEMORY snd_gen_level_voc_type snd_cal_handset_voice_vol[] = {
{ VOC_VOL_SILENCE , VOC_VOL_SILENCE ,  0 },
{    -1100  ,    -3400 ,  0 },
{     -500  ,     -3300 ,  0 },
{      100  ,     -3200 ,  0 },
{      700  ,     -3100 ,  0 }
};
Rx volume计算公式为:Value = 100* Gain(dB)。上例四级音量分别为-11,-5,1,7dB,最大音量7dB。需要说明的是每级音量至少间隔4dB,才能被人耳区分出来。

3. 对照音频的款图可以发现,以下参数可以调节:
Tx Volume     ---------voccal.c
Tx Codec Gain  ---------voccal.c
Rx Codec Gain  ---------voccal.c
ST Codec Gain  ---------voccal.c
Tx PCM Filter  ---------voccal.c
Rx PCM Filter ---------voccal.c
Rx Volume(max)  ---------snddcal.c


本文摘录自以下网站:

http://www.cnblogs.com/hengfeng/archive/2009/07/19/1526489.html

最后

以上就是无辜水池为你收集整理的高通平台音频调试心得的全部内容,希望文章能够帮你解决高通平台音频调试心得所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部