BES平台声加通话ENC降噪算法集成 (一)

本文介绍了声加算法在BES平台的集成方法, 以BES2500YP为例子, 演示集成声加三麦ENC通话降噪算法的详细步骤

通话流程介绍

BES平台开启了通话流程大致为以下步骤:
通话流程
蓝色部分为BES软件处理流程, 声加算法是处理图中红色部分流程, 红色部分可参考声加提供的bt_sco_chain_cp_soundplus.c和bt_sco_chain_thirdparty_soundplus.c, 需要先确保蓝色部分BES处理流程和数据没有问题再做声加算法集成. 如果想做客制化的修改, 也先按该文档集成算法成功, 验证算法效果以后, 再进行修改

算法目录介绍

以声加三麦通话ENC通话降噪的版本为例, 解压之后算法目录如图
算法目录

各文件作用介绍
├── Makefile 算法库的编译脚本
├── SVE_ModeDef.h 语音增强算法模式配置文件
├── Soundplus_adapter.h 算法适配层头文件
├── Soundplus_adapter_ap.c 算法适配层主核调用部分
├── Soundplus_adapter_cp.c 算法适配层副核调用部分
├── SpEcCfgParaSt.c AEC&ENC算法参数配置
├── SpEcCfgParaSt.h AEC&ENC算法参数配置头文件
├── SpEcComDef.h 回声消除通用配置头文件
├── lib 算法库文件夹
│ ├── check_MD5_by_drag_the_.a_file_in_this.bat 检查文件完整性编译时打印的MD5值
│ └── libv3.0alpha_bes2600_debug.a 算法库
└── sndp_lib.h 算法库释放的API头文件

算法主要接口介绍

声加通话ENC降噪算法主要涉及四类接口的调用, 初始化函数, 回声消除处理, 通话上行处理, 反初始化函数. 主要看Soundplus_adapter适配层接口

  1. 算法的初始化
    包含ap核心和cp核心的初始化, aecNrwFlag和rxNrwFlag分别代表aec窄带标志位和rx窄带标志位, 0代表MSBC宽带16K, 1代表CVSD窄带8K, 申请算法需要的动态内存并初始化算法引擎
    初始化函数

  2. 算法反初始化
    释放通话算法动态申请的内存, 0代表释放成功
    算法反初始化函数

  3. 算法AEC模块处理函数, 需要两个大小为240 * mic_num的float数组来保存AEC处理后的out和out_echos, in为麦克风原始数据, ref为参考信号原始数据, buf_len为麦克风原始数据长度, ref_len为参考信号原始数据长度.
    AEC处理参数:
    out: 输出的线性AEC处理后的麦克风PCM数据out_echos: 输出估计回声 PCM 数据
    in: 输入麦克风数据
    ref: 参考信号PCM数据
    buf_len: 麦克风PCM数据长度
    设为240麦克风通道数, 则表示宽带通话
    设为120
    麦克风通道数, 则表示窄带通话
    ref_len: 参考PCM数据长度
    设为240, 则表示宽带通话
    设为120, 则表示窄带通话
    AncFlag: 0 - anc off; 1 - anc on weak; 2 - anc on; 3 - anc on strong; 4 - Transparency

  4. 算法TX模块处理函数, out为TX模块处理后的单通道数据, in传入AEC模块处理后的out数据, in_echos传入AEC模块处理后的out_echos数据, AncFlag为当前ANC模式
    TX处理函数
    参数:
    out: 输出麦克风PCM数据
    In: 输入麦克风PCM数据
    in_echos: 输入估计回声PCM数据
    FAncFlag: 0-anc off; 1-anc on; 2-talk through
    numsamples: 一路麦克风PCM数据的长度

  5. 算法RX模块处理函数
    RX处理函数
    参数:
    buf: 蓝牙下行PCM数据
    len: 下行PCM数据长度 设为240表示宽带通话, 设为120表示窄带通话
    AncFlag: 0-ancoff, 1-anc on

算法集成前的配置

正确配置才能使算法正常跑起来, 包括target里面的宏配置、麦克通道配置、麦克风数字增益配置、麦克风模拟增益配置

  1. 修改target.mk文件配置, 关闭所有BES自带通话算法和AUDIO_RESAMPLE(防止重采样只能采样两路, 具体视sdk定义是否需要关闭AUDIO_RESAMPLE)
    关闭算法
  2. 在target.mk中打开声加相关宏开关
    SPEECH_THIRDPARTY_SNDP:打开声加算法
    SNDP_TX_AI_ENABLE: 使能声加算法的TX部分
    SNDP_RX_AI_ENABLE: 使能声加算法的RX部分(默认关闭)
    SNDP_TX_DUMP_ENABLE: 使能TX 部分pcm数据dump功能
    SNDP_RX_DUMP_ENABLE: 使能RX 部分pcm数据dump功能
    SNDP_TX_TIME_ENABLE: 使能TX 部分算法执行时间打印功能
    SNDP_RX_TIME_ENABLE: 使能RX 部分算法执行时间打印功能
    SPEECH_CODEC_CAPTURE_CHANNEL_NUM: 配置MIC通道, 比如有三路麦克风就填3
    SPEECH_PROCESS_FRAME_MS: 设置每帧处理多长时间的音频数据, 默认15ms
    HFP_DISABLE_NREC: 不使能NREC(NREC是手机上自带的算法)
    SPEECH_TX_AEC_CODEC_REF: 使能参考信号codec
    SCO_OPTIMIZE_FOR_RAM: 将overlay_text0剩余空间首地址会赋值到 sco_overlay_ram_buf

打开声加算法
3. 配置麦克风通道的BITMAP
根据不同麦克风的数量, 配置对应数量宏下的麦克风通道, 还要正确配置偏置电压引脚(VMIC), 保证MIC供电正常
配置麦克风通道
4. 前级数字麦克风增益配置
在tgt_hardware.h文件中调整数字麦克风增益CODEC_SADC_VOL, 一格大概2DB左右, 录音数据的幅值需要设置在合理的范围之内, 留给算法可操作的空间, 一般正常佩戴时幅值在-18至 -12dB之间较为合理. 可以使用dump数据查看, 数据dump方法可以参考文章: BES DUMP工具使用
数字麦克风增益调节
5. 模拟麦克风增益配置
通话算法如果用到TalkMIC和FFMIC, 建议修改和TalkMIC和FFMIC的模拟增益一致. 如图在analog_bestxxxx.c文件中, 将DEFAULT_ANC_FF_ADC_GAIN_DB和DEFAULT_VOICE_ADC_GAIN_DB改成同样的值(根据项目实际情况判断是否需要修改)
模拟麦克风增益配置
完成以上配置了之后, 声加ENC算法移植前的工作就做好了, 下一步就可以将算法进行移植

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
BES蓝牙芯片的加密解密是通过蓝牙协议中的安全管理模块实现的,具体来说是通过使用配对密钥和加密密钥来进行加密解密。 在BES芯片中,安全管理模块包括了配对机制和加密机制。配对机制用于建立安全连接并生成配对密钥,而加密机制则用于对数据进行加密和解密。配对密钥是由芯片内部的随机数生成器生成的,而加密密钥则是使用配对密钥和其他参数进行计算得出的。 在BES芯片的源码中,安全管理模块的实现是比较复杂的,包括了配对流程、加密流程、密钥管理等多个子模块。具体的源码实现涉及到芯片的底层驱动和协议栈等多个层面,需要深入了解BES芯片的内部结构和蓝牙协议的相关规范才能进行理解和分析。 以下是一个简单的C代码示例,演示了如何使用BES芯片进行加密和解密: ```c #include "security.h" void encrypt_data(uint8_t *data, uint16_t len, uint8_t *key) { // 使用指定的密钥对数据进行加密 bes_encrypt_data(data, len, key); } void decrypt_data(uint8_t *data, uint16_t len, uint8_t *key) { // 使用指定的密钥对数据进行解密 bes_decrypt_data(data, len, key); } ``` 在这个示例中,我们调用了BES芯片安全库中的bes_encrypt_data和bes_decrypt_data函数来进行加密和解密操作。这些函数的具体实现是在芯片的安全管理模块中,涉及到了密钥生成、密钥管理、加密算法和解密算法等多个方面的实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小的代码里面挖呀挖呀挖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值