Hide navigation sidebar
Hide table of contents sidebar
Back to top
Toggle table of contents sidebar

# ADEC Data Structure and Enum definitions

group adec_types

  Enums

  enum adec_mode_t

    Values:

    enumerator ADEC_NORMAL_AEC_MODE

      ADEC processing mode where it monitors AEC performance and requests small delay correction.

    enumerator ADEC_DELAY_ESTIMATOR_MODE

      ADEC processing mode for bulk delay correction in which it measures for a new delay offset.

  struct adec_config_t
    #include <adec_state.h>

    ADEC configuration structure.

    This is used to provide configuration when initialising ADEC at startup. A copy of this structure is present in the ADEC state structure and available to be modified by the application for run time control of ADEC configuration.

    Public Members

    int32_t bypass

      Bypass ADEC decision making process. When set to 1, ADEC evaluates the current input frame metrics but doesn’t make any delay correction or aec reset and reconfiguration requests

    int32_t force_de_cycle_trigger

      Force trigger a delay estimation cycle. When set to 1, ADEC bypasses the ADEC monitoring process and transitions to delay estimation mode for measuring delay offset.

  struct de_output_t
    #include <adec_state.h>

    Delay estimator output structure.

    Public Members

    int32_t measured_delay_samples

      Estimated microphone delay in time domain samples.

    int32_t peak_power_phase_index

      Phase index of peak energy AEC filter phase.

    float_s32_t peak_phase_power

      Maximum per phase energy across all AEC filter phases.

    float_s32_t sum_phase_powers

      Sum of filter energy across all filter phases.

    float_s32_t peak_to_average_ratio

      Ratio of peak filter phase energy to average filter phase energy. Used to evaluate how well the filter has converged.

    float_s32_t phase_power[AEC_LIB_MAX_PHASES]

      Phase energy of all AEC filter phases.

  struct adec_output_t
    #include <adec_state.h>

    ADEC output structure.

    Public Members

    int32_t delay_change_request_flag

      Flag indicating if ADEC is requesting an input delay correction

    int32_t requested_mic_delay_samples

      Mic delay in samples requested by ADEC. Relevant when delay_change_request_flag is 1. Note that this value is a signed integer. A positive `requested_mic_delay_samples` requires the microphone to be delayed so the application needs to delay the input mic signal by `requested_mic_delay_samples` samples. A negative `requested_mic_delay_samples` means ADEC is requesting the input mic signal to be moved earlier in time. This, the application should do my delaying the input reference signal by `abs(requested_mic_delay_samples)` samples.

    int32_t reset_aec_flag

      flag indicating ADEC’s request for a reset of part of the AEC state to get AEC filter to start adapting from a 0 filter. ADEC requests this when a small delay correction needs to be applied that doesn’t require a full reset of the AEC.

    int32_t delay_estimator_enabled_flag

      Flag indicating if AEC needs to be run configured in delay estimation mode.

    int32_t requested_delay_samples_debug

      Requested delay samples without clamping to +- MAX_DELAY_SAMPLES. Used only for debugging.

  struct aec_to_adec_t
    #include <adec_state.h>

    Input structure containing current frame’s information from AEC.

    Public Members

    float_s32_t y_ema_energy_ch0

      EWMA energy of AEC input mic signal channel 0

    float_s32_t error_ema_energy_ch0

      EWMA energy of AEC filter error output signal channel 0

    int32_t shadow_flag_ch0

      shadow_flag value for the current frame computed within the AEC

  struct adec_input_t
    #include <adec_state.h>

    ADEC input structure.

    Public Members

    de_output_t from_de

      ADEC input from the delay estimator

    aec_to_adec_t from_aec

      ADEC input from AEC

    int32_t far_end_active_flag

      Flag indicating if there is activity on reference input channels.

  struct adec_state_t
    #include <adec_state.h>

    ADEC state structure.

    This structure holds the current state of the ADEC instance and members are updated each time that `adec_process_frame()` runs. Many of these members are statistics from tracking the AEC performance. The user should not directly modify any of these members, except the config.

    Public Members

    float_s32_t max_peak_to_average_ratio_since_reset

      Maximum peak to average AEC filter phase energy ratio seen since a delay correction was last requested.

    float_s32_t peak_to_average_ratio_history[ADEC_PEAK_TO_AVERAGE_HISTORY_DEPTH + 1]

      Last ADEC_PEAK_TO_AVERAGE_HISTORY_DEPTH frames peak_to_average_ratio of phase energies.

    float_s32_t peak_power_history[ADEC_PEAK_LINREG_HISTORY_SIZE]

      Last ADEC_PEAK_LINREG_HISTORY_SIZE frames peak phase power.

    float_s32_t aec_peak_to_average_good_aec_threshold

      Threshold was considering peak to average ratio as good.

    q8_24 agm_q24

      AEC goodness metric indicating a measure of how well AEC filter is performing.

    q8_24 erle_bad_bits_q24

      log2 of threshold below which AEC output’s measured ERLE is considered bad

    q8_24 erle_good_bits_q24

      log2 of threshold above which AEC output’s measured ERLE is considered good

    q8_24 peak_phase_energy_trend_gain_q24

      Multiplier used for scaling agm’s sensitivity to peak phase energy trend.

    q8_24 erle_bad_gain_q24

      Multiplier determining how steeply we reduce aec’s goodness when measured erle falls below the bad erle threshold.

    adec_mode_t mode

      ADEC’s mode of operation. Can be operating in normal AEC or delay estimation mode.

    int32_t gated_milliseconds_since_mode_change

      milliseconds elapsed since a delay change was last requested. Used to ensure that delay corrections are not requested too early without allowing enough time for aec filter to converge.

    int32_t last_measured_delay

      Last measured delay.

    int32_t peak_power_history_idx

      index storing the head of the peak_power_history circular buffer

    int32_t peak_power_history_valid

      Flag indicating whether the peak_power_history buffer has been filled at least once.

    int32_t sf_copy_flag

      Flag indicating if shadow to main filter copy has happened at least once in the AEC.

    int32_t convergence_counter

      Counter indicating number of frames the AEC shadow filter has been attempting to converge.

    int32_t shadow_flag_counter

      Counter indicating number of frame the AEC shadow filter has been better than the main filter.

    adec_config_t adec_config

      ADEC configuration parameters structure. Can be modified by application at run-time to reconfigure ADEC.