高通ADSP音频算法集成(一)开发环境搭建

1、Hexagon DSP SDK开发环境搭建

Hexagon SDK 是高通提供的一个软件开发工具包,专为 Hexagon DSP(数字信号处理器)而设计,它提供了一组工具、库和API,可以用于创建和优化针对 Hexagon DSP 的软件。开发人员可以利用 Hexagon SDK 中的编程接口和资源,充分发挥 DSP 的处理能力,用于音频和视频处理、计算机视觉、机器学习以及其他信号处理应用。下载地址:Hexagon DSP SDK - Qualcomm Developer Network (根据实际芯片ADSP型号选择SDK)。

以下是基于Ubuntu 16.04.6 LTS进行操作,理论上同样适用于其他版本。

  • 解压sdk包

unzip hexagon_sdk_lnx_3_5_installer_00006_1.zip

tar -xv Hexagon_SDK_LNX_3_5_Installer_00006_1.tar

  • 赋予可执行权限并开始安装

chmod +x qualcomm_hexagon_sdk_3_5_4_eval.bin

执行 ./qualcomm_hexagon_sdk_3_5_4_eval.bin开始安装,根据提示输入信息,以便安装继续。

  • 目录位置和文件列表

安装成功后的位置:~/Qualcomm/Hexagon_SDK/3.5.4

├── build
├── docs
├── examples
├── incs
├── Launch Hexagon IDE 
├── libs
├── readme.txt
├── scripts
├── setup_sdk_env.source
├── test
├── tools
└── Uninstall_Hexagon_SDK

2. capi_v2_gain 算法模块编译和验证

        capi_v2_gain是Hexagon SDK中预置的算法样例,它提供了一种简单的方法来对音频数据进行增益处理。该算法的原理十分简单,通过将增益值和使能开关作为参数传递给算法模块,可以轻松地控制增益处理的效果。通过调整增益值,可以改变音频信号的音量大小,而使能开关则用于启用或禁用增益处理功能。

capi_v2_gain$ tree 
.
├── all.mak
├── data  
│   ├── gain.cfg  //配置文件,用于定义音频格式和设置校准参数
│   ├── input_wnoise_48k_stereo.raw //算法处理输入音频PCM raw文件
│   └── wnoise_48k_stereo_example_out.raw //算法处理后的输出音频PCM raw文件
├── eclipse //eclipse工程文件,当前基于Ubuntu环境编译,忽略
│   └── test_capi_v2_gain
│       ├── test_capi_v2_gain.launch
│       └── test_capi_v2_gain.qhut
├── hexagon_deps.min //makefile
├── hexagon.min //makefile
├── inc
│   └── capi_v2_gain.h  //gain算法头文件
├── Makefile //makefile

└── src
    ├── capi_v2_gain.c //gain module 源码
    └── capi_v2_gain_test.c //gain module测试单元源码
  • 设置环境变量

~/Qualcomm/Hexagon_SDK/3.5.4 source setup_sdk_env.source

  • 编译capi_v2_gain
cd examples/audio/capi_v2_gain

make tree V=hexagon_Debug_dynamic_toolv83_v66
  • 测试capi_v2_gain算法

~/Qualcomm/Hexagon_SDK/3.5.4/tools/HEXAGON_Tools/8.3.07/Tools/bin/hexagon-sim -mv66g_1024 --simulated_returnval --usefs hexagon_Debug_dynamic_toolv83_v66 --pmu_statsfile hexagon_Debug_dynamic_toolv83_v66/pmu_stats.txt hexagon_Debug_dynamic_toolv83_v66/capi_v2_gain_q

ls 3.5.4/examples/audio/capi_v2_gain/data 
gain.cfg input_wnoise_48k_stereo.raw wnoise_48k_stereo_example_out.raw

 核心算法如下

void pcm_gain(int16_t* primary_mic_ptr,
        int16_t* out_ptr,
        uint32_t gain_val,
        uint32_t num_samples)
{
    uint32_t i;
    uint32_t out;

    for (i = 0; i < num_samples; i++) {
        out = gain_val * primary_mic_ptr[i];
        out_ptr[i] = (out >> 13);
    }
}

static capi_v2_err_t capi_v2_gain_process(capi_v2_t* _pif,
        capi_v2_stream_data_t* input[],
        capi_v2_stream_data_t* output[])
{
...
 pcm_gain(in_pcm_ch_ptr, out_pcm_ch_ptr, me->gain_val, (in_buf_ptr->actual_data_len) / sizeof(int16_t));
...            
    return result;
}

猜你喜欢

转载自blog.csdn.net/Q_Lee/article/details/131219143