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

本文介绍了声加算法在BES平台的集成方法, 以BES2500YP为例子, 演示集成声加三麦ENC通话降噪算法的详细步骤, 本文为BES平台声加通话ENC降噪算法集成 (一) 的续篇, 上篇主要介绍了声加算法简单介绍和目录结构, 以及演示了集成算法前的准备工作, 未看过的朋友请先看上篇

算法集成的流程

下面会以2500YP为例, 演示声加双麦通话降噪算法的集成过程

集成前的准备工作

  1. 检查通话的配置, 可以参考上一篇文章, 配置MIC通道配置、MIC通道数和增益大小
  2. 先验证BES的原生SDK, 编译, 打开副核SCO_CP_ACCEL, 验证副核能跑起来, 并且没有出现死机的情况(有些BES芯片不是双核芯片, 没有副核, 这步验证就不需要做). 编译完成后还需要在自己所需要的调试的硬件上烧录确认能跑起来, 通话正常、播歌正常没有死机等其他问题. 这一步验证的是原生SDK的好坏, 可避免后续在整合算法后出现问题不知道算法的问题还是原始SDK就出现的问题

添加语音算法通道文件和副核语音处理文件

  1. 其实就是bt_sco_chain_thirdparty_soundplus.c和bt_sco_chain_cp_soundplus.c这两个文件添加到SDK根目录下的app/audioplayers目录下, 并修改app/audioplayers/makefile文件指定编译声加算法使用上面添加的两个文件. Makefile的修改仅供参考, 根据实际代码修改, 目的是为了通话时跑bt_sco_chain_thirdparty_soundplus.c和bt_sco_chain_cp_soundplus.c里面的代码, 而不是跑的BES自带的bt_sco_chain.c和bt_sco_chain_cp.c
    makefile修改
  2. 修改app/audioplayers/bt_sco_chain_cp.h中的头文件内容如图
    因为sco_cp_process是在新添加的bt_sco_chain_cp_soundplus.c代码中重新实现了, 需要的参数不一样了, 所以需要修改接口函数的声明
    头文件修改

添加算法soundplus/库文件夹

因为声加的算法库也属于app的一部分, 所以这里是将算法放在了apps/thirdparty_algorithm/路径下
算法路径
apps/Makefile修改
apps/makefile修改
apps/thirdparty_algorithm路径下也新建了个Makefile文件, 将soundplus/路径加入目标中
thirdparty_algorithm/makefile修改

apps/audioplayers/Makefile加入修改
audopplayers/makefiel修改
以上三个Makefile的修改仅供参考, 需要根据实际代码路径修改, 其目的是为了将通话算法编译进SDK

链接脚本配置

修改脚本文件scripts/link/best1000.lds.S, 默认是这个文件, 具体由target文件夹中的INTSRAM_RUN宏控制
脚本文件
打开best1000.lds.S文件, 并修改指定要加载到SRAM运行的text、data、rodata, 需要将算法库副核运行的函数加载到SRAM运行; RAM不足时, 因BES当前不支持主副核同时访问FLASH, 应该优先将在副核中执行的算法部分链接到RAM中

  1. overlay_text0中添加内容
    text0添加内容
    以上是算法库.a文件中需要调用的函数, 需要添加进入, 每个算法库需要调用的函数可能会有差异, 可以使用命令行进行查询. 进入lib目录, 在linux shell命令行中输入以下命令即可, 就会生成库中所需要overlay_text0中添加的内容:
    arm-none-eabi-size lib | awk ‘{if (NR>1 && $6!=“AttDNN_Coef_q7.o”)print “*:”$6"(.text*)"}’
    需要注意的是命令中的lib需要替换为实际使用的库名, 比如这里是libv3.0alpha_18282f98_bes2600_release.a
    生成text内容
    上面只会生成lib中所需要链接的函数所在文件列表, 不包含算法适配层所需要的文件, *:Soundplus_adapter_ap.o(.text*)和*:Soundplus_adapter_cp.o(.text*), 需要自行添加

  2. overlay_data中添加内容
    data0字段添加内容
    生成方法与生成.text的方法类似
    在算法.a目录下输入以下命令生成:
    arm-none-eabi-size lib | awk ‘{if (NR>1 && $6!=“AttDNN_Coef_q7.o”)print “*:”$6"(.data* .rodata*)"}’
    data生成方法

  3. 建议将sndp_license_Api链接到boot空间, 以便于后期授权
    boot区域

Ref的获取

在voicebtpcmplay_sco_dma_snapshot.cpp中的函数process_uplink_bt_voice_frames(), process_downlink_bt_voice_frames()中增加如下图中部分
process_uplink_bt_voice_frames:
REF获取1
process_downlink_bt_voice_frames():
REF获取2
根据项目具体代码修改, 不同SDK这两个函数可能略有不同, 目的是正确拷贝ref_pcm_buf

编译

在编译过程中, 可能会出现缺少以下文件的错误提示arm_add_f32.c, arm_mult_f32.c, arm_sub_f32.c, arm_dot_prod_f32.c, arm_scale_f32.c
需要在platform/cmsis/Makefile中指定算法库依赖的底层dsp接口实现
dsp
或者修改platform/cmsis/DSP_Lib/Makefile的文件, 添加缺少对应dsp链接文件如图, 每个算法可能需要用到的math function可能略有不同, 需要根据编译时报错的具体文件来添加缺少的链接文件
math function
以上声加算法就已经集成完成了, 可以用来进行上行降噪效果的测试了, 但算法一般不能直接量产使用, 需要产线授权才能使用(毕竟算法就是靠授权的数量来进行收费的嘛), 一般使用的是USBKEY授权方式. 没有经过授权的设备通话时候会有一定的限制, 比如每隔几分钟会播放杂音提示或只能测试使用一段时间

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

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

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

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

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

打赏作者

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

抵扣说明:

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

余额充值