BES平台(恒玄) ANC调试笔记

一  前言

最近比较忙,昨天更新了EQ 调试模块,今天就趁热打铁把ANC部分也写下。

主要说一些基于恒玄平台2500的ANC 环境搭配 软件设置 和 常见问题分析,个人见解,有不足之处,敬请锤教。

二 环境搭配 (此处引用BES 原厂ANC调试指南)

        确保腔体的密闭性,前后腔部分需要用胶水密封,耳塞的尺寸要适宜人工耳佩戴。电声 测试使用粉噪或者 20Hz~20KHz 的扫频信号。准备好 ANC 调试开发板,正确连接耳机(注 意单端和差分的差异)测试场地为具有一定吸音效果的吸音房。

                                          ANC mic频响曲线 逻辑示意图

                                                                  实物测试

前馈耳机头:

MIC:

对于前馈耳机头的 mic 的选择,芯片对于硅麦(MEMS)和驻极体麦克风(ECM)都 是支持的,外围电路有差异,从调试的角度考虑硅麦和电容 mic 都可以,没有本质区别, ECM 在信噪比方面要优于 MEMS,但从生产的角度考虑,硅麦一致性更好。而前馈的降噪 的生产对一致性要求非常高。所以前馈的降噪方式推荐硅麦,尤其是入耳式的耳机,对降噪 量要求较高(典型 20dB 以上)。对于头戴式,由于被动降噪曲线,speaker 曲线随着人的佩 戴变化量较大,对降噪量要求不会太高(典型 10dB 左右),所以如果对电容 mic 频响稍加 控制,头戴式也可以用电容 mic。以下从幅度、相位、灵敏度、信噪比、隔离度来说明相关 要求。

① 幅度:要求降噪频段(典型 50Hz->3kHz)平滑即可,低频(100Hz 以内)不能衰减的 太多。 ② 相位:没有要求

③ 灵敏度:-38dB 以下,太高的灵敏度容易饱和。灵敏度在小于-38db 的前提下,越大越 好。

④ 信噪比:信噪比越高越好。(推荐 60dB 以上)。

⑤ 隔离度:跟 speaker 的隔离度越高越好。(这个还没有具体的数据,只是对比成熟的音 腔测试)。

⑥ 一致性:一致性要求较高,要求幅度差别 1dB 以内,相位差别 5 度以内,以保证 20dB 的降噪量。这里的幅度差别指的是趋势,频响曲线平行的幅度差别大的话没有问题,可 以用增益补偿回来。这里的指标指的是和 speaker 加起来的差别总和。如果降噪量要求 不那么高,可以适当放宽要求(如果降噪主要在 1K 之内,幅度波动要求只需在 1K 内 符合。如果降噪主要在 2K 之内,幅度波动要求则需在 2K 内)。

SPEAKER:

单前馈的耳机头,照着音质最好的频响曲线去做就行。主要是降噪频段的幅度 平滑就行。

① 幅度:要求降噪频段(典型 50Hz->3kHz)平滑即可,低频不能衰减的太多。 BES_ANC 参考指南 V1.3 2 / 10

② 相位:没有要求

③ 灵敏度:越高越好(降噪频段)。

④ 隔离度:跟 mic 的隔离度越高越好。

⑤ 一致性:一致性要求和 MIC 一样。

⑥ 被动降噪曲线:被动降噪曲线越平滑越好,(低频不宜降噪量过大)。另外就是佩戴起来 越稳定越好。也就是每次佩戴都差不多,而不是每次佩戴差别都很大。

反馈耳机头:

MIC:

由于反馈的方式的降噪量对 mic 的频响不太敏感。所有对 mic 的类型没有特殊要求。 幅度:低频不能衰减的太多;

① 相位:没有要求

② 灵敏度: 可以略高于前馈

③ 隔离度:和 sperker 隔离度越低越好,也就是 mic 和 speaker 的距离应该尽量靠近; SPEAKER:

反馈的耳机头,低频能量越多越好(100Hz 以内的)。一是有利于降噪量的增加; 二是反馈降噪会影响低频的音乐,如果低频能量较高,这样降噪后的音乐播放仍然具有较好 的低频,这样会降低 EQ 的补偿。

① 幅度:低频能量越大越好

② 相位:没有要求

③ 灵敏度:越高越好

④ 隔离度:和 mic 隔离度越低越好,也就是 mic 和 speaker 的距离应该尽量靠近。

ANC 调试主要分为以下几大步骤:

a、测试空场信号 不佩戴耳机的状态下直接测试粉噪(或扫频)的 MIC(仪器)回馈

b、测试被动曲线 在耳机不通电的情况下,将腔体佩戴在人工耳上,测试粉噪(或扫频) 的 MIC(仪器)回馈。

c、调试降噪性能 利用 ANC 调试工具,调整 ANC 参数,直至达到最佳。

d、佩戴验证效果 试听 ANC 效果的实际听感(注意是否有杂音、底噪、啸叫、高频反 升)

三  ANC工具配置连接和使用

a.有线调试

在此模式下,可以通过连接整机直接调试 ,无需烧录软件,跑的是ANC最小的bin文件。

如我调试2500IH使用的 “uart_1305_20201214_v0.bin”,在调试工具的cfg文件夹中,由原厂给出

 工具配置调试方式为UART 

"programmer_file_path": "D:\\software_development_tools\BES\ALL_IN_ONE_BES_Designer_Tool_v1.0.3\cfg\1305\\uart_1305_20201214_v0.bin", ”

影响工具在线调试和实际写入系数一致性,在如下的代码位置和工具,有几个影响因素:

代码Target.mk 文件下:

基础配置:

1)

export ANC_FF_ENABLED     ?= 1

export ANC_FB_ENABLED     ?= 1

分别表示前馈和反馈是否开启,根据项目来填写;  1=开启   0=关闭

2)

export AUD_SECTION_STRUCT_VERSION ?= 1

2000I系列,这里写1;

2300/2500系列,这里写2;

3)

export AUDIO_SECTION_SUPPT ?= 1

表示音频区读取,1=读取音频区;0=不读取音频区;

工具写入anc系数在固定音频区,因此这里需要写1;(非常重要)

4)

export AUDIO_ANC_FB_MC_HW   ?= 1

TWS后馈使用这个  立体声耳机后馈使用  export AUDIO_ANC_FB_MC      ?= 1

5)

AUDIO_RESAMPLE ?= 1

对于2000i 系列的芯片而言:

单前馈或单反馈的配置时,这里写1;

混合降噪配置时,这里写0;

AUDIO_RESAMPLE的值要和anc工具里面的AUDIO_RESAMPLE变量对应起来:

代码Tgt_hardware.h 文件中:

#define ANC_FF_MIC_CH_L                     AUD_CHANNEL_MAP_CH0

#define ANC_FF_MIC_CH_R                     AUD_CHANNEL_MAP_CH1

#define ANC_FB_MIC_CH_L                     AUD_CHANNEL_MAP_CH2

#define ANC_FB_MIC_CH_R                     AUD_CHANNEL_MAP_CH3

表示mic的通道配置,根据具体项目来填写channel;

硬件的通道MIC1,2,3,4,5 对应软件配置的CH0,1,2,3,4;

备注:这个通道配置要和anc工具中的配置一样,否则工具调试和实际运行会不一致;

上图是工具json文件中通道的配置;

注意:针对2300Ymic5 作为通话mic

如果软件里面配置了mic5作为通话,那么工具里面也必须配置mic5作为通话

ANC Designer(bes2300)_v2.0.19版本及以上版本中:

0表示:mic5不作为通话mic

1表示:mic5作为通话mic

如果软件配置了(或没配置)mic5为通话mic,而工具里面没有配置(或配置)mic5,则工具测试和写入测试不一致。Gain值相差1.1db

注意:mic5的这个问题,仅用于2300   2000i 系列不需要这样处理

6)

Mic电压配置:

Mic 可以由vmic1和vmic2(2300可以提供vmic3和vmic4)提供,根据具体项目原理图来配置电压输出;

在代码tgt_hardware.h里面加一句定义

#define CFG_HW_AUD_INPUT_PATH_ANC_DEV       (AUD_VMIC_MAP_VMIC1| AUD_VMIC_MAP_VMIC2)

如上:表示开启vmic1和vmic2,同理配置vmic3,vmic4

BES代码默认是仅开启vmic1,客户根据具体项目去配置vmic2,vmic3,vmic4;

BES  ANC工具是默认将所有vmic都开启的;

注意:2000I 系列只有VMIC1VMIC2  2300系列才有VMIC3VMIC4  !!!

7)

Flash大小配置:

各个系列的芯片flash大小有不同,因此工具中的flash大小配置要对应实际代码:

实际flash配置的大小可以从trace中看到:

开机的前几行log就有flash大小配置;如图是0x400000;  则表示flash配置32Mb

如果是0x100000,则是8Mb;  0x200000,则是16Mb;

或者在代码中搜索FLASH_SIZE 也可以看到定义的大小;

在工具中的json文件对应如下:

这个FLASH_SIZE 大小配置要和代码中大小一样;否则会将系数写入错误的flash区域;

附注:

多模式的选择:

Anc工具中支持多模式,在选框中有mod1, mod2,mod3,mod4的选择

同样,在代码中也可以支持多模式,

tgt_hardware.h中:

#define ANC_COEF_NUM                        (1)

1 表示mod1;  2 表示支持mod1和mod2双模式, 同理3,4表示3模式和4模式;

默认代码是1;

默认的调用逻辑是:按一下降噪按键,递增调用模式,

以双模式为例说明:开机以后,按一下降噪按键 调用mod1,再按一下 调用mod2, 再按一下 关闭。

b.无线调试tws 说明文档:

滤波器设计工具:ANC Designer(bes2300)_v2.0.18 版本及以上版本支持无线调试ANC

需要的设备:美格信提供的dongle,电源上电即可,驱动会自动安装

驱动成功安装后,在设备管理里面出现如上端口

                    

工具里的json文件

Conmmunication: tcspp;

Spp_dev_name:待测耳机的蓝牙名称的部分关键字;

比如蓝牙名称为:BES2500_TWS

则Spp_dev_name可以写 ANC_TEST或TCSPP等

同时注意FLASH_SIZE, AUDIO_RESAMPLE等的配置正确

代码的更改:

Target.mk 文件下:

APP_ANC_TEST ?= 1

TEST_OVER_THE_AIR ?= 1

这两个宏写1;

然后在代码中:

根据项目配置FF 或FB(前文中有叙述,此处不做重复)

根据项目配置ANC MIC的通道(前文中有叙述,此处不做重复)

根据项目配置VMIC开启(前文中有叙述,此处不做重复)

配置AUDIO_SECTION(前文中有叙述,此处不做重复)

配置AUDIO_RESAMPLE(前文中有叙述,此处不做重复)

编译后,下载到耳机中

开启工具,选择SPP端口号,点击connect;此时待测耳机开机(按键开机或touch开机等),使其进入paring状态(各个客户用自己的UI进入paring状态),同时待测耳机要离dongle比较近,约30cm,正常情况下15s以内可以和dongle连接成功,工具状态显示success。到这一步后,可以正常调试滤波器了。

c.调试工具说明:

工具版本众多,UI 界面及配置会略有差异,以下界面以 2500 工具为例。

1.cfg 配置文件夹说明

productline_cfg.json

文件中存放工具的相应配置

communication

芯片与工具的通讯方式,分有”uart” 、”usb” 、”spp”和 ”tcspp” (BT_ANC 配置”uart”,USB_ANC 配置”usb”,FWS 耳机无线连接配置”spp”,FWS 耳机通过第三方 dongle 做无线透传连接配置”tcspp”)

flash_size

 芯片的 flash 大小,分有”8Mb”和”32Mb”(根据芯片 flash 大小而动, 默认为 8Mb,烧录数据的地址以此做参考)

vCodec

 Codec 的供电电压,分有”1_6V”和”1_8V”和”2_5V”,(BT_ANC 常用 1_6V 或 1_8V,USB_ANC 使用 2_5V。如果用 1.6v,则 vana 必须要和 vcodec 在电路上连接起来,如果用 2.5v,则 vana 必须和 vcodec 在电路上断开连接,2000i 默认使用 1_6V,2300 默认使用 1_95V)

aud_channel_cfg

 麦克风的通道位置,对应有左前、右前、左后、右后(物理通道

1/2/3/4/5 分别对应代表软件通道 0/1/2/3/4,通道配置错误可能无声)。

coef_length     代表滤波器长度,默认无需改动

Diff          喇叭差分输出为 true,喇叭单端输出为 false,依据实际电路原理来定                      

Audio_resample       代表重采样的开关,分别对应”true”和”false”(BT_ANC 需开重采样, USB_ANC 关闭重采样,和软件中的 audio resample 宏配置对应,软件如果打开 resample,则写 true,否则写 false)

Feedback          代表反馈通路的开关,分别对应”true”和”false”(纯前馈 ANC 需关闭此项)

Feedforward       代表前馈通路的开关,分别对应”true”和”false”

  

2.coef 文件夹 coef 文件下存放 ANC 相应的滤波器数据,最多可支持 4 个模式,每个模式下分有 44.1K、 48K、50.7K 采样率(采样率的选择与 AUDIO_RESAMPLE 存在关联)。确定好最终滤波器数据后,需要将此 coef 文件夹拷贝到产线 ANC 校准工具下覆盖原有的 coef 文件夹。注:工具每次重新启动都会将滤波器数据清空

 

3.ANC 调试工具界面介绍

界面左边为功能区和数据区,右边黑底为图形区,其中右上半部分为增益—频率图,右下部分为相位—频率图。

 功能区按钮解释:

Anc switch off                  勾选则关闭当前 ANC 效果,不勾则开启 ANC 效果

Anc Mode                       ANC 调试模式,最大支持 4 个模式,从 mode1 开始

Dump                                       将芯片内部 flash 区 ANC 数据回读,数据可在后端控制台查看

Burn                                   将调试数据烧录到芯片内部 flash 指定分区(掉电不丢失

Preview                                   单击则执行一次 ANC 数据在线调试,每改动一次界面数据需单击一次此按钮方有效(数据掉电丢失

Connect                              执行连接命令

Check ports                                             选择当前设备端口

Save                                   保存界面数据到文件(不可出现中文路径和特殊字符)

Load                                   导入界面数据文件(不可出现中文路径和特殊字符)

 

ANC 数据区按钮解释:

Get config data from ff-right  将 ANC 数据从右拷贝到左(或从左到右)

ANC OFF                            勾选则关闭当前侧 ANC 效果

TotalGain                            总增益(-6~6)

Reverse                               勾选则喇叭极性取反

IIR_by_pass                        勾选则关闭 IIR 数据效果

DAC_Gain                           DAC 增益,默认为 0

ADC_Gain     ADC 增益(0/6/12/18/24,0/6 为负增益,18/24 为正增益),此处 2300 芯片与 2000i 芯片有所不同 Reference_Gain                   增益(-60~12,-60 为 0 增益为被动)

 

4.滤波器使用介绍

ANC 调试目前使用的是无限长单位脉冲响应(IIR)滤波器,目前提供有

Peak/Notch、LowShelf、HighShelf、LowPass、HighPass 滤波器,滤波器原理不一阐述。

 

ANC 调试:

① 单前馈:

第一步:先确定整体的大致增益,调整 Reference_Gain(该值通常为负值),调整过程中,电声测试仪测试到的曲线会整体下移,低频段最低则为当前最佳值。

第二步:添加滤波器,滤波器遵循分频段调试,首先调制低频(~200Hz),通常在低频频点

20Hz 左右加入 LowShelf 类型,Gain 值为正值,Q 值小于 1 的滤波器。

第三步:抑制高频(1000Hz~)反升,在相应频点附近加入 Gain 值为负值,Q 值在 1 左右的 HighShelf 滤波器,用于抑制高频部分的整体反升。如果只有高频区间小部分反升,则考虑使用 Gain 值为负值的 Peak 滤波器。

第四步:在处理了低频和高频之后,中频部分降噪量会有所损失,在相应位置加入 Peak/Notch 滤波器,Gain 值不宜过大,正负视具体而定。

第五步:由于滤波器中引入了增益,之前的 Reference_Gain 值不一定为最佳,此时需要对

Reference_Gain 进行微调,以达到最佳。下图为某款已上市入耳式耳机的调试降噪曲线图。

 

  • 单反馈:反馈系统因 MIC 离喇叭位置较近,极易产生声音回路引起啸叫。

第一步:在高频位置加入值为负的 HighShelf 滤波器或者值为负的 Peak 滤波器用于抑制高频的反升。

第二步:调整反馈 Reference_Gain 值,增益过大会引起啸叫。

第三步:在低频位置 100Hz 附近加入正值 Peak 滤波器,Gain 不宜过大。

  • 混合式混合式降噪系统的处理实际上为单前馈和单反馈的结合,要注意的是,混合式降噪系统中要注意反馈的抑制量,过大仍然会引起啸叫。

关于降噪量:降噪效果的主要表现在两个方面,一是最大降噪深度,即主动降噪所能达到的最大降噪量,前馈入耳式耳机通常为 25db 左右,混合入耳式耳机通常为 35db 左右,最大降噪深度一般体现在 100-200Hz 这个频段;二是降噪宽度,通常指的是主动降噪跟被动降噪在曲线上的交叉频点,一般情况下为 1000-2000Hz 附近。下图为 BOSE QC20 耳机头搭载 BES2300 系列芯片的混合降噪效果与 QC20 的对比曲线。

 

四 常见问题分析解决

1. UART工具连接不上的问题

确定上面介绍的配置设定是没有问题的 

如果你电脑是第一次使用,可能是缺少驱动 库 需要安装“libusb-win32-devel-filter-1.2.6.0.exe” 

微云链接:文件分享

.TWS耳机 SPP方式连接 :

a.首先需要进入配对模式,一般来说ANC 都是单个调试的

可以在SDK apps.cpp  app_init 上修改源代码:

app_ibrt_ui_event_entry(IBRT_FREEMAN_PAIRING_EVENT);

 b. 可能美格信 工具的SPP channel 配置不对 恒玄代码中使用的RF channel  是12  

 连接之前使用串口指令修改 美格信 donggle  SPP channel 

修改指令 :SPP_CH_SET=12

2.ANC降噪开启时,会对音乐的音质有所影响。

需要通过添加EQ进行声音补偿,默认的代码中只有正常模式的EQ参数,而且增益全0,那如何添加ANC开启的EQ参数呢?
1)添加ANC模式的EQ数组:

2) ANC EQ 参数的使用和更新

3. BES ANC /TT 也有产线校准机制 ,如果 AUDIO_SECTION 有数据 ,在上电开机会导入烧录的数据,并且覆盖代码默认的ANC 参数 。

        3.1 默认代码ANC 参数类型修改:

        默认代码设置ANC ,一般在tgthardware.c  里面,采样率不同使用不同的参数,开发者也可以通过增加ANC 参数组数 实现不同的 效果(ANC/TT)等

如 我在项目中修改的 :

ANC 参数生效需要参数导入修改滤波器,BES 实现函数如下:“app_anc_switch_coef

 

3.2 SPP ANC 产线校准后参数生效原理:

        3.2.1  AUDIO_SECTION 数据导入:

        

 

 3.2.2  ANC /EQ/SPEECH 保存的参数 全部在 AUDIO_SECTION 区域 ,根据芯片不同 分配的Flash起始地址也有差异,默认分配大小为64K (0x10000).    在上电开机初始化会有打印

如1305(2500IU/IZ/IH) 系类起始地址为:

 1501系类(2500ZP/2500Z/2500YP/2600YP)如下:

 这个数据区域可以是SPP 工具校验写入:(代码中的函数接口在aud_section.c中)

 int audio_section_store_cfg(uint32_t device, uint8_t *cfg, uint32_t len)

数据的搽除是无法在OTA升级的时候搽除的,如果想要搽除 ,可以通过烧录工具或者自行编写一段代码:

对于整机或者不支持 单线升级接口的耳机 可以如下修改代码 :

extern uint32_t __aud_start[] ;
void app_eaebud_auido_section_clear(void){
    enum HAL_NORFLASH_RET_T flash_opt_res;
	uint32_t flag = int_lock();
	flash_opt_res = hal_norflash_erase(HAL_FLASH_ID_0, (uint32_t)__aud_start ,AUD_SECTION_SIZE);
	int_unlock(flag);

	if (flash_opt_res){
	    	TRACE(2,"[%s] ERROR: erase flash res = %d", __func__, flash_opt_res);
	        
	}
	else{
		TRACE(1,"[%s] : erase audio flash successfully", __func__);
	}
}

 重启后AUDIO_SECTION数据就会被清空
 

3.2.3  ANC fade in/out  

     默认代码是没有开启ANC fade in /out 功能的,需要在app_anc.c中 注释掉“ANC_MODE_SWITCH_WITHOUT_FADE”   anc淡入淡出使用函数接口如下:

 

     

 

 3.2.4. ANC 相关软件设置不当导致的noise

a. 重采样问题 :anc系数加载由44.1k采样率转换到48k采样率(或48k转44.1k),系数切换有轻微pop,解决方案是系数 不切换 (详细修改见下4 代码附)

b. fade in/out 设置问题,需要使用低优先级任务的线程处理fadein out,这样来保证fadein过程不会有杂音出现

3.2.5. ANC ON的底噪

a. 一般由滤波器参数产生的底噪是由fb参数设计带入的,fb 滤波器peak点越靠近高频,底噪越大,因此最好是在200hz内 做peak,300hz后peak的增益不要太大,5db内即可

b. 选取snr高的mic 有利于底噪

4.BES 开启ANC后,播放音乐时切换播放提示音带有POP音

BES开启ANC后,我们在听音乐过程中,进行暂停/上下曲等UI操作伴有提示音时,就会发现有pop音带出。这是因为在codec_int_stream_setup里ANC模块同步变更采样率导致。 

通常的解决方式就是 在可以在这里加个判断,如果播放的stream为media ,ANC的采样率不做变更。

// Always config sample rate, for the pll setting might have been changed by the other stream
    CODEC_TRACE(2,"[sample_rate]old=%d new=%d", codec_int_cfg.stream_cfg[stream].codec_cfg.sample_rate, cfg->sample_rate);
    if (codec_int_cfg.user_map & CODEC_USER_ANC) {
        // Check ANC sample rate
        if (stream != AUD_STREAM_PLAYBACK){  // add here for Solve POP sound caused by sampling rate conversion.
            if (codec_anc_handler) {
                enum AUD_SAMPRATE_T cfg_rate;
                enum AUD_SAMPRATE_T old_rate;

                cfg_rate = hal_codec_anc_convert_rate(cfg->sample_rate);
                if (cfg_rate != codec_anc_samp_rate) {
                    old_rate = codec_anc_samp_rate;

                    codec_anc_handler(stream, cfg_rate, NULL, NULL);

                    codec_anc_samp_rate = cfg_rate;
                    TRACE(5,"%s: ANC sample rate changes from %u to %u due to stream=%d         
                         samp_rate=%u",__func__, old_rate, codec_anc_samp_rate, stream,     
                         cfg->sample_rate);
            }
        }
    }
}

ANC 这一块的我所了解的大概就这么多了 ,后续再更新IBRT对耳通讯 ENC调试 等章节

有兴趣的同学可以加我Q 一起讨论 1902026113 

验证:筱谙   谢谢!

  • 24
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值