AEC Data Structure and Enum Definitions#
- group aec_types
Enums
-
enum aec_adaption_e#
Values:
-
enumerator AEC_ADAPTION_AUTO#
Compute filter adaption config every frame.
-
enumerator AEC_ADAPTION_FORCE_ON#
Filter adaption always ON.
-
enumerator AEC_ADAPTION_FORCE_OFF#
Filter adaption always OFF.
-
enumerator AEC_ADAPTION_AUTO#
-
enum shadow_state_e#
Values:
-
enumerator LOW_REF#
Not much reference so no point in acting on AEC filter logic.
-
enumerator ERROR#
something has gone wrong, zero shadow filter
-
enumerator ZERO#
shadow filter has been reset multiple times, zero shadow filter
-
enumerator RESET#
copy main filter to shadow filter
-
enumerator EQUAL#
main filter and shadow filter are similar
-
enumerator SIGMA#
shadow filter bit better than main, reset sigma_xx for faster convergence
-
enumerator COPY#
shadow filter much better, copy to main
-
enumerator LOW_REF#
-
struct coherence_mu_config_params_t#
Public Members
-
float_s32_t coh_alpha#
Update rate of
coh
.
-
float_s32_t coh_slow_alpha#
Update rate of
coh_slow
.
-
float_s32_t coh_thresh_slow#
Adaption frozen if coh below (coh_thresh_slow*coh_slow)
-
float_s32_t coh_thresh_abs#
Adaption frozen if coh below coh_thresh_abs.
-
float_s32_t mu_scalar#
Scalefactor for scaling the calculated mu.
-
float_s32_t eps#
Parameter to avoid divide by 0 in coh calculation.
-
float_s32_t thresh_minus20dB#
-20dB threshold
-
float_s32_t x_energy_thresh#
X_energy threshold used for determining if the signal has enough reference energy for sensible coherence mu calculation
-
unsigned mu_coh_time#
Number of frames after low coherence, adaption frozen for.
-
unsigned mu_shad_time#
Number of frames after shadow filter use, the adaption is fast for
-
aec_adaption_e adaption_config#
Filter adaption mode. Auto, force ON or force OFF
-
int32_t force_adaption_mu_q30#
Fixed mu value used when filter adaption is forced ON
-
float_s32_t coh_alpha#
-
struct shadow_filt_config_params_t#
Public Members
-
float_s32_t shadow_sigma_thresh#
threshold for resetting sigma_XX.
-
float_s32_t shadow_copy_thresh#
threshold for copying shadow filter.
-
float_s32_t shadow_reset_thresh#
threshold for resetting shadow filter.
-
float_s32_t shadow_delay_thresh#
threshold for turning off shadow filter reset if reference delay is large
-
float_s32_t x_energy_thresh#
X energy threshold used for deciding whether the system has enough reference energy for main and shadow filter comparison to make sense
-
float_s32_t shadow_mu#
fixed mu value used during shadow filter adaption.
-
int32_t shadow_better_thresh#
Number of times shadow filter needs to be better before it gets copied to main filter.
-
int32_t shadow_zero_thresh#
Number of times shadow filter is reset by copying the main filter to it before it gets zeroed.
-
int32_t shadow_reset_timer#
Number of frames between zeroing resets of shadow filter.
-
float_s32_t shadow_sigma_thresh#
-
struct aec_core_config_params_t#
Public Members
-
int bypass#
bypass AEC flag.
-
int gamma_log2#
parameter for deriving the gamma value that used in normalisation spectrum calculation. gamma is calculated as 2^gamma_log2
-
uint32_t sigma_xx_shift#
parameter used for deriving the alpha value used while calculating EMA of X_energy to calculate sigma_XX.
-
float_s32_t delta_adaption_force_on#
delta value used in normalisation spectrum computation when adaption is forced as always ON.
-
float_s32_t delta_min#
Lower limit of delta computed using fractional regularisation.
-
uint32_t coeff_index#
coefficient index used to track H_hat index when sending H_hat values over the host control interface.
-
int bypass#
-
struct aec_config_params_t#
- #include <aec_state.h>
AEC control parameters.
This structure contains control parameters that the user can modify at run time.
Public Members
-
coherence_mu_config_params_t coh_mu_conf#
Coherence mu related control params.
-
shadow_filt_config_params_t shadow_filt_conf#
Shadow filter related control params.
-
aec_core_config_params_t aec_core_conf#
All AEC control params except those for coherence mu and shadow filter.
-
coherence_mu_config_params_t coh_mu_conf#
-
struct coherence_mu_params_t#
Public Members
-
float_s32_t coh#
Moving average coherence.
-
float_s32_t coh_slow#
Slow moving average coherence.
-
int32_t mu_coh_count#
Counter for tracking number of frames coherence has been low for.
-
int32_t mu_shad_count#
Counter for tracking number of frames shadow filter has been used in.
-
float_s32_t coh_mu[AEC_LIB_MAX_X_CHANNELS]#
Coherence mu.
-
float_s32_t coh#
-
struct shadow_filter_params_t#
Public Members
-
int32_t shadow_flag[AEC_LIB_MAX_Y_CHANNELS]#
shadow_state_e enum indicating shadow filter status
-
int shadow_reset_count[AEC_LIB_MAX_Y_CHANNELS]#
counter for tracking shadow filter resets
-
int shadow_better_count[AEC_LIB_MAX_Y_CHANNELS]#
counter for tracking shadow filter copy to main filter
-
int32_t shadow_flag[AEC_LIB_MAX_Y_CHANNELS]#
- #include <aec_state.h>
AEC shared state structure.
Data structures holding AEC persistent state that is common between main filter and shadow filter. aec_state_t::shared_state for both main and shadow filter point to the common aec_shared_t structure. [aec_shared_state_t]
Public Members
BFP array pointing to the reference input spectrum phases. The term phase refers to the spectrum data for a frame. Multiple phases means multiple frames of data.
For example, 10 phases would mean the 10 most recent frames of data. Each phase spectrum, pointed to by X_fifo[i][j]->data is stored as a length AEC_FD_FRAME_LENGTH, complex 32bit array.
The phases are ordered from most recent to least recent in the X_fifo. For example, for an AEC configuration of 2 x-channels and 10 phases per x channel, 10 frames of X data spectrum is stored in the X_fifo. For a given x channel, say x channel 0, X_fifo[0][0] points to the most recent frame’s X spectrum and X_fifo[0][9] points to the last phase, i.e the least recent frame’s X spectrum.
BFP array pointing to reference input signal spectrum. The X data values are stored as a length AEC_FD_FRAME_LENGTH complex 32bit array per x channel.
BFP array pointing to mic input signal spectrum. The Y data values are stored as a length AEC_FD_FRAME_LENGTH complex 32bit array per y channel.
BFP array pointing to time domain mic input processing block. The y data values are stored as length AEC_PROC_FRAME_LENGTH, 32bit integer array per y channel.
BFP array pointing to time domain reference input processing block. The x data values are stored as length AEC_PROC_FRAME_LENGTH, 32bit integer array per x channel.
BFP array pointing to time domain mic input values from the previous frame. These are put together with the new samples received in the current frame to make a AEC_PROC_FRAME_LENGTH processing block. The prev_y data values are stored as length (AEC_PROC_FRAME_LENGTH - AEC_FRAME_ADVANCE), 32bit integer array per y channel.
BFP array pointing to time domain reference input values from the previous frame. These are put together with the new samples received in the current frame to make a AEC_PROC_FRAME_LENGTH processing block. The prev_x data values are stored as length (AEC_PROC_FRAME_LENGTH - AEC_FRAME_ADVANCE), 32bit integer array per x channel.
BFP array pointing to sigma_XX values which are the weighted average of the X_energy signal. The sigma_XX data is stored as 32bit integer array of length AEC_FD_FRAME_LENGTH
Exponential moving average of the time domain mic signal energy. This is calculated by calculating energy per sample and summing across all samples. Stored in a y channels array with every value stored as a 32bit integer mantissa and exponent.
Exponential moving average of the time domain reference signal energy. This is calculated by calculating energy per sample and summing across all samples. Stored in a x channels array with every value stored as a 32bit integer mantissa and exponent.
Energy of the mic input spectrum. This is calculated by calculating the energy per bin and summing across all bins. Stored in a y channels array with every value stored as a 32bit integer mantissa and exponent.
Sum of the X_energy across all bins for a given x channel. Stored in a x channels array with every value stored as a 32bit integer mantissa and exponent.
Structure containing coherence mu calculation related parameters.
Structure containing shadow filter related parameters.
Structure containing AEC control parameters. These are initialised to the default values and can be changed at runtime by the user.
Number of mic input channels that the AEC is configured for. This is the input parameter num_y_channels that aec_init() gets called with.
Number of reference input channels that the AEC is configured for. This is the input parameter num_x_channels that aec_init() gets called with.
-
struct aec_state_t#
- #include <aec_state.h>
AEC state structure.
Data structures holding AEC persistent state. There are 2 instances of aec_state_t maintained within AEC; one for main filter and one for shadow filter specific state. [aec_state_t]
Public Members
-
bfp_complex_s32_t Y_hat[AEC_LIB_MAX_Y_CHANNELS]#
BFP array pointing to estimated mic signal spectrum. The Y_data data values are stored as length AEC_FD_FRAME_LENGTH, complex 32bit array per y channel.
-
bfp_complex_s32_t Error[AEC_LIB_MAX_Y_CHANNELS]#
BFP array pointing to adaptive filter error signal spectrum. The Error data is stored as length AEC_FD_FRAME_LENGTH, complex 32bit array per y channel.
-
bfp_complex_s32_t H_hat[AEC_LIB_MAX_Y_CHANNELS][AEC_LIB_MAX_PHASES]#
BFP array pointing to the adaptive filter spectrum. The filter spectrum is stored as a num_y_channels x total_phases_across_all_x_channels array where each H_hat[i][j] entry points to the spectrum of a single phase.
Number of phases in the filter refers to its tail length. A filter with more phases would be able to model a longer echo thereby causing better echo cancellation.
For example, for a 2 y-channels, 3 x-channels, 10 phases per x channel configuration, the filter spectrum phases are stored in a 2x30 array. For a given y channel, say y channel 0, H_hat[0][0] to H_hat[0][9] points to 10 phases of H_haty0x0, H_hat[0][10] to H_hat[0][19] points to 10 phases of H_haty0x1 and H_hat[0][20] to H_hat[0][29] points to 10 phases of H_haty0x2.
Each filter phase data which is pointed to by H_hat[i][j].data is stored as AEC_FD_FRAME_LENGTH complex 32bit array.
-
bfp_complex_s32_t X_fifo_1d[AEC_LIB_MAX_PHASES]#
BFP array pointing to all phases of reference input spectrum across all x channels. Here, the reference input spectrum is saved in a 1 dimensional array of phases, with x channel 0 phases followed by x channel 1 phases and so on. For example, for a 2 x-channels, 10 phases per x channel configuration, X_fifo_1d[0] to X_fifo_1d[9] points to the 10 phases for channel 0 and X_fifo[10] to X_fifo[19] points to the 10 phases for channel 1.
Each X data spectrum phase pointed to by X_fifo_1d[i][j].data is stored as length AEC_FD_FRAME_LENGTH complex 32bit array.
-
bfp_complex_s32_t T[AEC_LIB_MAX_X_CHANNELS]#
BFP array pointing to T values which are stored as a length AEC_FD_FRAME_LENGTH, complex array per x channel.
-
bfp_s32_t inv_X_energy[AEC_LIB_MAX_X_CHANNELS]#
BFP array pointing to the normalisation spectrum which are stored as a length AEC_FD_FRAME_LENGTH, 32bit integer array per x channel.
-
bfp_s32_t X_energy[AEC_LIB_MAX_X_CHANNELS]#
BFP array pointing to the X_energy data which is the energy per bin of the X spectrum summed over all phases of the X data. X_energy data is stored as a length AEC_FD_FRAME_LENGTH, integer 32bit array per x channel.
-
bfp_s32_t overlap[AEC_LIB_MAX_Y_CHANNELS]#
BFP array pointing to time domain overlap data values which are used in the overlap add operation done while calculating the echo canceller time domain output. Stored as a length 32, 32 bit integer array per y channel.
-
bfp_s32_t y_hat[AEC_LIB_MAX_Y_CHANNELS]#
BFP array pointing to the time domain estimated mic signal. Stored as length AEC_PROC_FRAME_LENGTH, 32 bit integer array per y channel.
-
bfp_s32_t error[AEC_LIB_MAX_Y_CHANNELS]#
BFP array pointing to the time domain adaptive filter error signal. Stored as length AEC_PROC_FRAME_LENGTH, 32 bit integer array per y channel.
-
float_s32_t mu[AEC_LIB_MAX_Y_CHANNELS][AEC_LIB_MAX_X_CHANNELS]#
mu values for every x-y pair stored as 32 bit integer mantissa and 32 bit integer exponent
-
float_s32_t error_ema_energy[AEC_LIB_MAX_Y_CHANNELS]#
Exponential moving average of the time domain adaptive filter error signal energy. Stored in an x channels array with every value stored as a 32bit integer mantissa and exponent.
-
float_s32_t overall_Error[AEC_LIB_MAX_Y_CHANNELS]#
Energy of the adaptive filter error spectrum. Stored in a y channels array with every value stored as a 32bit integer mantissa and exponent.
-
float_s32_t max_X_energy[AEC_LIB_MAX_X_CHANNELS]#
Maximum X energy across all values of X_energy for a given x channel. Stored in an x channels array with every value stored as a 32bit integer mantissa and exponent.
-
float_s32_t delta_scale#
fractional regularisation scalefactor.
-
float_s32_t delta#
delta parameter used in the normalisation spectrum calculation.
pointer to the state data shared between main and shadow filter.
-
unsigned num_phases#
Number of filter phases per x-y pair that AEC filter is configured for. This is the input argument num_main_filter_phases or num_shadow_filter_phases, depending on which filter the aec_state_t is instantiated for, passed in aec_init() call.
-
bfp_complex_s32_t Y_hat[AEC_LIB_MAX_Y_CHANNELS]#
-
enum aec_adaption_e#