ANC

概述

ANC(Active Noise Cancellation,主动降噪)通过电子线路将原噪声的相位倒过来,以产生与外界相对的声波,从而将噪音中和,达到降噪的目的。

功能特性

ANC 模块支持:

  • 支持 16 个 biquad group, 1 个 biquad group 包含 4 个 biquad filter,最小使用单位为 1 个 bqiuad group。

  • 支持不同 biquad group 按照用户指定方式级联。

  • 支持 biquad group 输出或者输出设置增益。

  • 支持 2 个输出, 单个输出支持最多 8 个输入源, 多个输入源经过相加后输出。

  • 支持 10 个 DRC, 均包含增益、limiter、noise gating 功能,其中 8 个通用 DRC 的位置可由用户指定, 2 个 DRC 只能作用于ANC输出。

  • 支持不同通用 DRC 按照用户指定方式级联。

  • 每个 biquad group 和 通用 DRC 最多支持 3 个 输入源, 多个输入源经过相加后作为新的输入。

  • 支持两组 biqaud filter 参数切换。

  • 典型输入采样率: 192 kHz、200 kHz、384 kHz、400 kHz、768 kHz 和 800 kHz 等多种配置。

ANC 与其他模块的连接关系图如下所示。

../../_images/ANC_mode_connection.png

ANC 与其它模块连接示意图

结构图

ANC 的内部结构如下图所示。

../../_images/ANC_architecture.png

ANC 结构图

单个 biquad group 的内部结构如下图所示。

../../_images/ANC_biquad_group_architecture.png

ANC biquad group 结构图

API 介绍

Defines

WQ_ANC_TOTAL_BIQUID_GROUP_NUM
WQ_ANC_ONE_BIQ_GRP_COEFF_NUM
WQ_ANC_COEFF_SWITCH_MIN_CNT
WQ_ANC_DRC_DEFAULT_LM_ATTACK_TIME_US
WQ_ANC_DRC_DEFAULT_LM_RELEASE_TIME_US
WQ_ANC_DRC_DEFAULT_GM_ATTACK_TIME_US
WQ_ANC_DRC_DEFAULT_GM_RELEASE_TIME_US

Functions

WQ_RET wq_anc_drc_detect_min_ratio(WQ_ANC_DRC_ID id)

from the current moment on, enable drc min ratio detection

参数:

id -- anc drc id.

返回:

WQ_RET_OK - success, other - failed

WQ_RET wq_anc_drc_get_min_ratio(WQ_ANC_DRC_ID id, uint32_t *ratio)

get drc min ratio

参数:
  • id -- anc drc id.

  • ratio -- anc drc min ratio value pointer.

返回:

WQ_RET_OK - success, other - failed

WQ_RET wq_anc_out_drc_detect_min_ratio(WQ_ANC_OUT_DRC_ID id)

from the current moment on, enable out drc min ratio detection

参数:

id -- anc out drc id.

返回:

WQ_RET_OK - success, other - failed

WQ_RET wq_anc_out_drc_get_min_ratio(WQ_ANC_OUT_DRC_ID id, uint32_t *ratio)

get out drc min ratio

参数:
  • id -- anc out drc id.

  • ratio -- anc out drc min ratio value pointer.

返回:

WQ_RET_OK - success, other - failed

void wq_anc_out_drc_global_config(const wq_anc_drc_global_config_t *cfg)

This function is to set out drc global parameter, see wq_anc_drc_global_config_t.

参数:

cfg -- config parameter, see wq_anc_drc_global_config_t

void wq_anc_biquad_switch_time_set(WQ_ANC_BIQUAD_ID biquad_id, uint16_t switch_time_ms)

This function is to set anc biquad switch coeff time.

参数:
  • biquad_id -- biquad id

  • switch_time_ms -- switch time unit is ms

struct wq_anc_drc_config

Public Members

float make_up_db
float limiter_threshold_db
struct wq_anc_drc_global_config

Public Members

int32_t lm_attack_time

anc drc lm attack time us

int32_t lm_release_time

anc drc lm release time us

int32_t gm_attack_time

anc drc gm attack time us

int32_t gm_release_time

anc drc gm release time us

struct wq_anc_biquad

Public Members

WQ_ANC_BIQUAD_IN_MODULE biquad_src[WQ_ANC_BIQUAD_IN_SRC_ID_MAX]
struct wq_anc_drc

Public Members

WQ_ANC_DRC_IN_MODULE drc_src[WQ_ANC_DRC_IN_SRC_ID_MAX]
struct wq_anc_config

Public Members

WQ_ANC_SYNC_SRC src

anc select mic channel sync source.

uint16_t biquad_int_bitmap

the bit of the biquad that needs to generate an interrupt need to set 1, otherwise set 0

bool enable_irq

whether to enable switch coeff interruption