Table of Contents
1400/1402/1302 算法调试指南
整体通路
需要的设备和工具
调整下行通路
确定 A2DP 最大输出音量,在 A2DP 模式下测试
确定 HPF 最大输出音量,在 HPF 模式下测试
PLC
调试噪声
EQ
.....................................................................................................................
...........................................................................................................................................
.............................................................................................................................
....................................................................................................................................
.........................................................................
..............................................................................
............................................................................................................................................
....................................................................................................................................
..............................................................................................................................................
....................................................................................................................................
.............................................................................................................................
..........................................................................................................................
.............................................................................................................................
.............................................................................................................................
....................................................................................................................
...............................................................................................................................
.............................................................................................................................
................................................................................................................................
..................................................................................................................................
.............................................................................................................................
...................................................................................................................................
..............................................................................................................................................
1
1
1
1
1
1
1
1
2
2
2
2
5
5
5
5
5
5
6
7
8
8
调整上行通路
调整上行音量
调试上行双麦克
调试上行回声
调试上行噪声
调试上行 COMPEXP
调试上行 EQ
算法相关参数调试
AEC2FLOAT
NS2FLOAT
算法增益调试
COMPEXP
EQ
1400/1402/1302 算法调试指南
整体通路
整体通路参考 Audio Developer 工具。 所有算法参数都在 bt_sco_chain_cfg_default.c,其他变量
名含有 TX 的表示是上行算法参数,还有 RX 的表示是下行算法参数。
需要的设备和工具
需要调试的整机(接出串口线,dump 音频数据)
Audio Developer 工具。如无工具,请到 ftp 下载。
ftp://software.bestechnic.com/,用户名 bescustomer,密码 A#yd2Ha4n_
工具位于 tools/audiotools/audio_developer/ 目录下,audio_developer_v0.3.4.rar 为调试工具,
bes_speech_tuning_tool_ug_v0.3.3 为调试工具使用说明。
如果需要调试双麦克抑噪,还需要下面两项
一个小音箱
白噪声源文件
调整下行通路
确定 A2DP 最大输出音量,在 A2DP 模式下测试
目前确认的是电学的失真必须满足在一定的范围内(< 0.04%)。 模拟增益默认已设置为最大,如果需要
更大的输出幅度,需要提高 VCODEC 电压或者外接 PA。
确定 HPF 最大输出音量,在 HPF 模式下测试
目前 HPF 模式和 A2DP 模式下 Codec 的模拟数字增益是一致的,因此如果要调整 HPF 下喇叭音量,必须
调整下行算法增益(bt_sco_chain_cfg_default.c 文件里的 .rx_post_gain),需要注意的事,一般下行算法增
益不能大于 1.0,也就是不能放大,否则会出现饱和失真。
PLC
提供开关选项,默认打开。
调试噪声
如果下行有噪声,可以打开下行抑噪(SPEECH_RX_NS2FLOAT)。参考下面噪声算法调试。
EQ
根据客户需要具体调整,参考下面 EQ 调试。
调整上行通路
调整上行音量
使用默认模拟数字增益,测试回声性能,如果存在回声残留,调整 AEC 相关参数,需要注意的是调整
AEC 时需保证麦克风拾取的回声没有饱和,控制麦克拾取到的回声大小。如果最终的上行音量偏小,需要
调整 .tx_post_gain 。要注意的是,CVSD 编码在信号幅度大于 -6dBFs 的时候会存在失真。
默认麦克风模拟增益已经最大,默认 12dB,参考对应的 analog_bestxxxx.c(比如 2300p 系列芯片参考
analog_best2300p.c)。
#define DEFAULT_VOICE_ADC_GAIN_DB 12
数字增益(CODEC_SAD_GAIN 默认 10 为放大 18dB,一级 2dB,参考 tgt_hardware.h 里面,一般需要
在无后端增益的情况下上行数据 PCM 能达到 -15dB 左右。
#define CODEC_SADC_VOL (10)
调试上行双麦克
#if defined(SPEECH_TX_MIC_CALIBRATION)
/***************************************************************************
*************************
* Describtion:
* Mic Calibration Equalizer, implementation with 2 order iir filters
* Parameters:
* bypass(0/1): bypass enable or disable.
* mic_num(1~4): the number of microphones. The filter num is (mic_num -
1)
* calib: {bypass, gain, num, {type, frequency, gain, q}}. Please refer
to SPEECH_TX_EQ section
* in this file
* Resource consumption:
* RAM: None
* FLASE: None
* MIPS: fs = 16kHz, 0.5M/section;
* Note:
* None
****************************************************************************
************************/
const SpeechIirCalibConfig WEAK speech_tx_mic_calib_cfg =
{
.bypass = ,
.mic_num = 2,
.calib = {
{
.bypass = ,
.gain = .f,
.num = ,
.params = {
{IIR_BIQUARD_LOWSHELF, 150, -2.5, 0.707},
}
},
},
};
#endif
#if defined(SPEECH_TX_MIC_FIR_CALIBRATION)
/***************************************************************************
*************************
* Describtion:
* Mic Calibration Equalizer, implementation with fir filter
* Parameters:
* bypass(0/1): bypass enable or disable.
* mic_num(1~4): the number of microphones. The filter num is (mic_num -
1)
* calib: {filter, filter_length, nfft}.
* Resource consumption:
* RAM: None
* FLASE: None
* MIPS: fs = 16kHz, 0.5M/section;
* Note:
* None
****************************************************************************
************************/
float mic2_ft_caliration[256] = {1.f, };
const SpeechFirCalibConfig WEAK speech_tx_mic_fir_calib_cfg =
{
.bypass = ,
.mic_num = SPEECH_CODEC_CAPTURE_CHANNEL_NUM,
.delay = ,
.calib = {
{
.filter = mic2_ft_caliration,
.filter_length = ARRAY_SIZE(mic2_ft_caliration),
},
},
};
#endif
#if defined(SPEECH_TX_2MIC_NS2)
/***************************************************************************
*************************
* Describtion:
* 2 MICs Noise Suppression
* Parameters:
* bypass(0/1): bypass enable or disable.
* delay_taps(0~4): ceil{[d(MIC1~mouth) - d(MIC2~mouth)] / 2}.
* ceil: Returns the largest integer less than or equal to the
specified data
* d(MIC~mouth): The dinstance from MIC to mouth
* e.g. 0: 0~2cm; 1: 2~4; 2: 5~6...
* freq_smooth_enable(1): Must enable
* wnr_enable(0/1): wind noise reduction enable or disable. This is also
useful for improving
* noise suppression, but it also has some damage to speech signal.
* Resource consumption:
* RAM: None
* FLASE: None
* MIPS: fs = 16kHz, 32M;
* Note:
* None
****************************************************************************
************************/
.tx_2mic_ns2 = {
.bypass = ,
.delay_taps = .f,
.freq_smooth_enable = 1,
.wnr_enable = 1,
},
#endif
1.
2.
1.
2.
3.
4.
5.
6.
7.
将喇叭放在双麦克中垂线上,播放白噪声,dump 数据查看录音大小,调整音箱声音大小,使录音数
据大概在 -10dB 左右。
使用 Adobe Audition 其他类似工具打开 dump 出的文件,查看两个 mic 拾取到的信号的幅频或相
频差异是否符合预期,可以与结构工程师的结果比较。如果没有相位差异,直接调到第 7 步。
使用 Audio Developer 工具中 console 里 aqe_tools.run_fir_calibration 或者
aqe_tools.run_iir_calibration ,将 1 中录音数据作为输入,得到一组 FIR/IIR 滤波器系数
(位于 _coeffs.h 里面)。
在支持硬件 FIR 的平台上(best2300/best2300p),使用
aqe_tools.run_fir_calibration(infile.wav) ,会在 dist 文件夹下生成文件名后
缀为 _coeff_fir.h 文件,将其中的数组替换 bt_sco_chain_cfg_default.c 里
mic2_ft_caliration 数组即可。
在不支持硬件 FIR 的平台上(best1400/best1402),使用
aqe_tools.run_fir_calibration(infile.wav,12,12,True) ,会在 dist 文件夹
下生成文件名后缀为 _coeff_iir.h 文件,将其中的数组替换
bt_sco_chain_cfg_default.c 里 speech_tx_mic_calib_cfg 里的滤波器参数即可。
其中命令中的 12 是滤波器的阶数,可以调整成更大。
查看生成的文件 calib_noise_out.wav,看校准后的相位是否达到预期。当输入文件相位差较大
时,可能无法使用 FIR 滤波器来补偿。
将获得的参数更新软件里后重新执行第 1,2 步,此时校准后的信号应该是无相位差的。
调整 SPEECH_TX_2MIC_NS2 中 delay 参数,参考双麦克 2cm 间隔设置为 1,测试双麦克主方向是
否存在失真,及双麦克前后左右四个方向的噪声抑制情况。逐渐减少 gain,直至主麦克方向无失真,
并且主瓣宽度能够符合佩戴角度的变化。
注意在支持硬件 FIR 的平台上推荐使用 SPEECH_TX_MIC_FIR_CALIBRATION,同时使用
SPEECH_TX_MIC_FIR_CALIBRATION 里的 delay 来调整双麦克噪声抑制量。
调试上行回声
打开 SPEECH_TX_AEC2FLOAT。参考下面 回声算法调试。
调试上行噪声
打开 SPEECH_TX_NS2FLOAT。参考下面 噪声算法调试。
调试上行 COMPEXP
参考下面 COMPEXP 调试。
调试上行 EQ
参考下面 EQ 调试。
算法相关参数调试
由于部分算法可以同时在上行和下行使用,因此下面的文档不特指是上行还是下行算法,其参数配置的含
义是一致的。
AEC2FLOAT
#if defined(SPEECH_TX_AEC2FLOAT)
/***************************************************************************
*************************
* Describtion:
* Acoustic Echo Cancellation
* Parameters:
* bypass(0/1): bypass enable or disable.
* hpf_enabled(0/1): high pass filter enable or disable. Used to remove
DC for Near and Ref signals.
* af_enabled(0/1): adaptive filter enable or disable. If the echo
signal is very large, enable this
* nlp_enabled(0/1): non-linear process enable or disable. Enable this
by default.
* ns_enabled(0/1): noise supression enable or disable. Enable this by
default.
* cng_enabled(0/1): comfort noise generator enable or disable.
* blocks(1~8): the length of adaptive filter = blocks * frame length
* delay(>0): delay samples from mic to speak, unit(sample).
* min_ovrd(1~6): supression factor, min_ovrd becomes larger and echo
suppression becomes larger.
* target_supp(<0): target echo suppression, unit(dB)
* noise_supp(-30~0): noise suppression, unit(dB)
* cng_type(0/1): noise type(0: White noise; 1: Pink noise)
* cng_level(<0): noise gain, unit(dB)
* Resource consumption:
* RAM: None
* FLASE: None
* MIPS: fs = 16kHz;
* Note:
* This is the recommended AEC
****************************************************************************
************************/
.tx_aec2float = {
.bypass = ,
.hpf_enabled = false,
.af_enabled = false,
.nlp_enabled = true,
.clip_enabled = false,
.stsupp_enabled = false,
.ns_enabled = true,
.cng_enabled = false,
.blocks = 1,
.delay = 70,
.min_ovrd = 2,
.target_supp = -40,
.noise_supp = -15,
.cng_type = 1,
.cng_level = -60,
.clip_threshold = -20.f,
.banks = 64,
},
#endif
一般耳机项目默认参数即可, 注意一下几点即可:
如果回声比较大,需要打开 af_enable。可能会导致系统卡顿,此时需要提高系统主频。
该模块已集成噪声抑制,通过 ns_enable 来控制。
NS2FLOAT
#if defined(SPEECH_RX_NS2FLOAT)
/***************************************************************************
*************************
* Describtion:
* Acoustic Echo Cancellation
* Parameters:
* bypass(0/1): bypass enable or disable.
* denoise_dB(-30~0): noise suppression, unit(dB).
* e.g. -15: Can reduce 15dB of stationary noise.