This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320C5535:AEC-AER 库

Guru**** 2984790 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/664533/tms320c5535-aec-aer-library

器件型号:TMS320C5535

您好!

我们希望使用 AEC-aer 库通过单个麦克风在 eZdsp5535上消除回声。 我编码了一个框架、该框架通过 DMA 执行 I2S 音频数据 IO 并使用 DSP BIOS。 作为示例代码、我使用 了 http://processors.wiki.ti.com/index.php/C55x_CSL_Audio_Pre-Processing。 现在、我想集成更回波消除算法、但我找不到一个简单的示例。

我有一些问题:

提到 C55上的每个算法调用都必须刷新缓存、但 C55没有数据缓存?!

2. http://processors.wiki.ti.com/index.php/C55x_CSL_Audio_Pre-Processing 可与 xDAIS 配合使用。 这只是一个用于 aer 算法的 xDAIS 包装程序吗? 我们还需要实施 xDAIS 吗?  

3.我认为调用 lib 的接口函数(aerCreate()、aerNew()、 aerOpen()、 aerReceiveIn()、 aerSendIn())应该足够了。 但是、aer lib 包中的示例仿真代码非常大、我无法获取应用真正需要哪些器件?!

提前感谢

Marc

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Marc:

    我已通知软件团队。 他们将直接在此处发布反馈。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    马克

    我们将深入研究您的问题、并将与您联系。

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我们已经通过 I2S 连接了2个 eZdsp5535电路板并 同步了时钟。 软件从 ADC 编解码器(麦克风)读取 I2S 音频数据、并通过 I2S 将其传输到另一个电路板。 另一个板通过 I2S 读取数据并将其写入 DAC 编解码器(扬声器)。 另一方面、我们有相同的过程。 目前,我们有2个内部通信单元,它们可以在免提模式下进行全双工通信。

    在软件中、所有数据传输都是通过 DMA 完成的。 我们使用 DSP BIOS 并具有算法任务。 作为模板、我们使用了此示例 http://processors.wiki.ti.com/index.php/C55x_CSL_Audio_Pre-Processing。

    现在、我们要集成回波消除算法(AER/AEC 库)。 作为模板、我们使用 aer 库文件夹中的 aertest_c55l 项目。 现在、我们遇到了通过链接器命令文件将 Aer 缓冲区放入存储器的问题。  aertest_c55l 项目有一个链接器命令文件、但由于我们在应用中使用 DSP BIOS、因此无法使用此文件。 在我们的.tcf 文件 SARAM 中、将创建 DARAM 和 VECT。 您能否帮助我们将缓冲区放入内存中、以便满足集成指南中提到的所有要求? 第一步、我们要使用不带 AGC 或 DRC 的 AER。 所有缓冲区都应静态分配、如在 aertest_c55l 项目中。

    1.我们如何定义存储器段中存储器缓冲区的位置(使用 DSP BIOS!)? 如何将缓冲器放置在不同的块中? 应满足 Aer 集成指南第15页的要求。

    2.我们如何定义存储器段中存储器代码的位置? 内部 RAM 中的汇编器代码、外部 RAM 中的 C 代码。

    感谢您的帮助

    Marc

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    马克

    对我上次答复后的长时间拖延表示歉意。 由于我们没有可在 e2e 上共享的工作示例、因此很难支持您的 AEC 用例。 您是否与当地的 TI 销售代表合作?
    自上次通信以来、您是否取得了任何进展?

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的回复。 我目前正在从事其他项目。 我仍然不知道如何在 BIOS 应用程序中放置缓冲区。 也许我可以在 DSP BIOS 论坛上发布这个问题。

    我编码了一个音频框架并嵌入了 aer/AEC 算法。 应用程序运行、并且算法会消除回波。 到目前为止、我没有调整参数。 我只是想看看是否一切都在运行。 当算法处于活动状态时、声音会在一个方向上被打乱。 这可能是由于缓冲区映射不正确或参数错误造成的?!  在另一个方向上、声音很好。 当算法被关闭时、两个方向的声音都很好。

    作为参数集、我使用了从 Aer 演示应用复制的以下内容。

    bool aerAlgo 配置参数(void * insts)
    {
    aerControl_t aer_ctl;
    TINT ERROR_CODE;

    /*有效位字段0 */
    AER_ctl.VALID_BitFIELD_0 = AER_CTL_VALID0_MODES_CTL0
    | AER_CTL_VALID0_MODES_CTL1
    | AER_CTL_VALID0_MODES_CTL2
    | AER_CTL_VALID0_Y2X_DELAY
    | AER_CTL_VALID0_SAMPLING_RARates
    | aer_CTL_VALID0_tail_length
    | aer_CTL_VALID0_TX_AG_CHG_DELAY
    | AER_CTL_VALID0_RX_AG_CHG_DELAY
    | AER_CTL_VALID0_TX_AG_CHG_INTERP
    | AER_CTL_VALID0_PHY_MODE
    | AER_CTL_VALID0_RX_ANALOG
    | aer_CTL_VALID0_TX_ANALOG
    | AER_CTL_VALID0_RX_DIGITAL
    | aer_CTL_VALID0_TX_digital
    | AER_CTL_VALID0_RX_EQ_Params
    | aer_CTL_VALID0_TX_EQ_Params;

    /*
    AER_ctl.MODES_0.MASK = 0xFFFF;
    AER_ctl.MODES_0.VALUE = 0x188f;
    AER_ctl.MODES_1.MASK = 0xFFFF;
    aer_ctl.modes_1.value = 0xc1ce;
    AER_ctl.MODES_2.MASK = 0xFFFF;
    AER_ctl.MODES_2.value = 0x001d;
    *

    AER_ctl.MODES_0.MASK = 0xFFFF;
    AER_ctl.MODES_0.VALUE = 0x0007;
    AER_ctl.MODES_1.MASK = 0xFFFF;
    AER_ctl.MODES_1.VALUE = 0x0000;
    AER_ctl.MODES_2.MASK = 0xFFFF;
    AER_ctl.MODES_2.value = 0x0000;

    AER_ctl.y2x_delay = AER_SIM_PIU_DEL_RX + AER_SIM_PIU_DEL_TX - AER_SIM_SIU_Y2x_DEL_ADJ - 1;
    AER_ctl.sRATE 位字段= 7;
    AER_ctl.tail_length = 800;/* 800 = 100msec/125usec *
    aer_ctl.delay_tx_ag_chg = AER_SIM_PIU_DEL_TX + 1;
    aer_ctl.delay_rx_ag_chg = AER_SIM_PIU_DEL_RX + 1;
    AER_ctl.num_SAMP_interp = 5;
    aer_ctl.phone_mode = aer_phm_HF;
    AER_ctl.GAIN_RX_ANALOG = 0;//AER_SIM_HF_MICGAIN_0dB - 16;
    AER_ctl.GAIN_TX_ANALOG = 0;//AER_SIM_HF_SPKGAIN_0dB - 32;
    AER_ctl.GAIN_Rx_DIGITAL = 0;//16;
    AER_ctl.GAIN_TX_DIGITAL = 0;//32;
    AER_ctl.rxeq_params =(aerEqConfig_t *)&sampleEqBqParamsRx;
    AER_ctl.txeq_params =(aerEqConfig_t *)&sampleEqBqParamsTx;

    /*有效位字段1 */
    AER_ctl.valid_bitfield_1 = aer_CTL_VALID1_NLP_CLOSS_target
    | aer_CTL_VALID1_NLP_TX_CLIPAGG
    | aer_CTL_VALID1_NLP_LINATTN_MAX_ERLE
    | aer_CTL_VALID1_NLP_Clipper_MAX_ERLE
    | aer_CTL_VALID1_NLP_TOTAL_LINATTN_MIN
    | aer_CTL_VALID1_NLP_RX_LINATTN_MIN
    | aer_CTL_VALID1_NLP_RX_LINATTN_MAX
    | aer_CTL_VALID1_NLP_TX_LINATTN_MIN
    | aer_CTL_VALID1_NLP_TX_LINATTN_MAX
    | aer_CTL_VALID1_NLP_TX_IN_TC
    | aer_CTL_VALID1_NLP_TX_OUT_TC
    | aer_CTL_VALID1_NLP_RX_IN_TC
    | AER_CTL_VALID1_NLP_RX_OUT_TC
    | AER_CTL_VALID1_GAIN_SPLIT_TC
    | AER_CTL_VALID1_CNG_RX_LEVEL
    | aer_CTL_VALID1_CNG_TX_LEVEL;
    aer_ctl.nlp_combloss_target = 900;
    aer_ctl.nlp_clip_agg_l2 = 6;
    aer_ctl.nlp_linattn_max_erle = 27;
    aer_ctl.nlp_clipper_max_erle = 27;
    aer_ctl.nlp_total_linattn_min = 2;
    aer_ctl.nlp_rx_linattn_min = 1;
    aer_ctl.nlp_rx_linattn_max = 12;
    aer_ctl.nlp_tx_linattn_min = 1;
    aer_ctl.nlp_tx_linattn_max = 12;
    aer_ctl.nlp_tx_in_tc = 5;
    aer_ctl.nlp_tx_out_tc = 5;
    aer_ctl.nlp_rx_in_tc = 5;
    aer_ctl.nlp_rx_out_tc = 5;
    AER_ctl.GAIN_SPLIT_tc = 5;
    AER_ctl.CNG_Rx_LEVEL =-60;
    AER_ctl.CNG_TX_LEVEL =-60;


    /*有效位字段2 */
    AER_ctL.VALIDE_BIT_FIELD_2 = AER_CTL_VALID2_TX_FDNLP_msec_DELAY
    | aer_CTL_VALID2_TX_FDNLP_BIN_LO1
    | aer_CTL_VALID2_TX_FDNLP_BIN_LO2
    | aer_CTL_VALID2_TX_FDNLP_BIN_HI1
    | aer_CTL_VALID2_TX_FDNLP_BIN_HI2
    | aer_CTL_VALID2_TX_FDNLP_CNG_MAX
    | AER_CTL_VALID2_NR_FBIN1_LIM
    | AER_CTL_VALID2_NR_FBIN2_LIM
    | AER_CTL_VALID2_NR_FBAND1_MAX_ATTEN
    | AER_CTL_VALID2_NR_FBAND2_MAX_ATTEN
    | AER_CTL_VALID2_NR_FBAND3_MAX_ATTEN
    | aer_CTL_VALID2_NR_SIG_UPD_RATE _MAX
    | aer_CTL_VALID2_NR_SIG_UPD_RATCH_MIN
    | AER_CTL_VALID2_NR_Noise_THRESH
    | aer_CTL_VALID2_NR_Noise_hangover;

    AER_ctl.txfdnlp_msec_delay = 6;
    AER_ctl.txfdnlp_bin_LO1 = 2;
    AER_ctl.txfdnlp_bin_Lo2 = 5;
    AER_ctl.txfdnlp_bin_HI1 = 60;
    AER_ctl.txfdnlp_bin_hi2 = 62;
    AER_ctl.txfdnlp_CNG_max =-62;
    AER_ctl.nr_fbin1_lim = 12;
    aer_ctl.nr_fbin2_lim = 40;
    AER_ctl.nr_fband1_max_atten = 12;
    AER_ctl.nr_fband2_max_atten = 12;
    AER_ctl.nr_fband3_max_atten = 12;
    aer_ctl.nr_sig_upd_rate_max = 32000;
    aer_ctl.nr_sig_upd_rate_min = 30000;
    aer_ctl.nr_noise_thresh =-70;
    aer_ctl.nr_noise_hangover = 100;

    /*有效位字段3 */
    aer_ctl.valid_bitfield_3 = aer_CTL_VALID3_COH_hangover
    | AER_CTL_VALID3_COH_Ratio_THRESH
    | AER_CTL_VALID3_COH_CNT_THRESH
    | aer_CTL_VALID3_HLC_THRESHOLD
    | aer_CTL_VALID3_HLC_RAMP_OUT_TC
    | aer_CTL_VALID3_HLC_POWER_TC
    | aer_CTL_VALID3_THRESH_RX_NLD
    | AER_CTL_VALID3_THRESH_Noise_RX
    | AER_CTL_VALID3_THRESH_Noise_TX
    | aer_CTL_VALID3_hangove_RXTOTX
    | aer_CTL_VALID3_hangove_TXTORX
    | aer_CTL_VALID3_TX_slim_MODE
    | aer_CTL_VALID3_RX_slim_MODE
    | aer_CTL_VALID3_NG_hangover
    | aer_CTL_VALID3_NG_RAMPIN_PERIOD
    | aer_CTL_VALID3_NG_Noise_level;
    AER_ctl.CoH_hangover = 500;
    AER_ctl.CoH_Ratio_THRESH = 7000;
    AER_ctl.CoH_cnt_thresh = 25;
    AER_ctl.THRESH_HLC =-12;
    AER_ctl.ram_out_tc_hlc = 500;
    aer_ctl.power_tc_hlc = 2;
    AER_ctl.THRESH_Rx_NLD = 32500;
    AER_ctl.THRESH_Rx_Noise = 6000;
    AER_ctl.THRESH_TX_Noise = 6000;
    AER_ctl.hangove_Rx_TO_TX = 20;
    AER_ctl.hangove_TX_TO_Rx = 20;
    AER_ctl.TX_slim_mode = 1;
    aer_ctl.rx_slim_mode = 1;
    aer_ctl.hangove_ng = 500;
    aer_ctl.rampin_period_ng = 700;
    aer_ctl.noise_level_ng =-65;

    /*=AER 有效位字段4=*/
    AER_ctl.VALIDE_BITFIELD_4 = AER_CTL_VALID4_DT_THRESH
    | aer_CTL_VALID4_CLIP_SCALE
    | aer_CTL_VALID4_DT_hangover;
    AER_ctl.dt_thresh = 80;
    AER_ctl.clip_scale_curve = 0x30405060;
    AER_ctl.dt_hangover = 10;

    error_code = aerControl (inst_aer_ctl);

    if (error_code!= aer_noerr){
    printf ("aer_sim_test_api()!\n"\}中的 AER 参数配置错误;
    返回 false;
    }

    返回 true;

    }/* aer_sim_test_API */

    在我们的内部通信硬件设备中,扬声器和麦克风安装在一个立方体中,它们的方向是相同的。 您是否为此应用设置了参数作为调优的起点?  必须设置许多参数、我们不知道哪些值对我们有效。 我们也不知道哪些参数必须通过 aerControl()显式设置,哪些参数具有内部默认值。  

    谢谢、祝您愉快

    Marc

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Marc:

    当您说"声音朝一个方向被打乱。  在另一个方向、声音是好的"、哪个方向是好的、哪个是坏的? 我们将扬声器播放称为接收方向、将麦克风输入称为发送方向。  

    一些其他信息可能会帮助您:

    docs 文件夹中的 AER_Quick_Tuning_Guide.pdf 可指导您进行基本调整

    2. docs 文件夹中的 AER_Integration_Guide.pdf 可帮助您放置内存。 此外、还有一个使用链接器命令文件 packages/ti\mas\aer\test\lnkr\c55l\aertest_c55l.cmd 的仿真测试、此测试可被用作内存缓冲区放置的参考。  

    此致、

    _________