Skip to main content
Skip table of contents

SbKalmanAEC4RefV1

Overview

Four reference frequency domain subband adaptive echo cancellation filter

Discussion

Subband Kalman based multi-reference echo canceler with support for multiple input channels.

I/O Pins

This module works in conjunction with the WOLA filterbank modules and accepts complex data. The default module has two input pins, and one output pin. The first input can have any number of microphone signals. The second input is for the reference channels, which can be any number depending on the module used.

For best performance, use the best fitting SbKalmanAEC module:

one reference: SbKalmanAECMonoV1
two references: SbKalmanAECStereoV1
three references: SbKalmanAEC3RefV1
four references: SbKalmanAEC4RefV1
five or more references: SbKalmanAECMCV1

The reference signals and states are shared among the microphones, saving memory and MIPS over using several instances. The error output pin will have one channel per microphone input.

User Parameters

At instantiation time the maximum number of taps must be defined. The number of taps actually used is runtime parameter numTaps, found in the module inspector or the module properties view. numTaps allows you to vary the filter length at runtime to verify performance and CPU load.

The module has optional residual noise suppression which is enabled via enableRNS. By default, residual noise suppression is on to help remove residual echo. Residual noise suppression is configured by a 7 element interpolation table. This table is identical to the Table X-Y module with configurable (X, Y) lookup points. The lookup table specifies values in dB for the input and output function.

The p0 variable is used to initialize the P and PXTerm arrays at startup time and during any triggered reset events. p0 defaults to 1.0. Changing this value during runtime will automatically reset P and PXTerm to the new value.

The smoothingTime variable, with units of seconds, is a state transition factor analogous to the leakage factor in a leaky lms algorithm. It defaults to 30, which has a convergence time roughly equivalent to a setting of 100 in the deprecated SbMultiAECV1 module.

The FFTSize parameter is set at instantiation and used to calculate an internal adaptation constant. This is normally the FFT size of the WOLA Analysis module upstream of this module. FFTSize is often (blocksize-1) * 2 unless sub bands are split to multiple AECs.

Optional Input Pins

Additional input pins can be enabled with resetPinsEn. These control pins can be used to modify the behavior of the module at runtime, as described below:

resetP: One INT32 value per microphone channel. Non-zero values will reset P and PxTerms for the appropriate mic channel to p0 on each pump.

masterReset: Single INT32 value and one channel input. A non-zero value will reset all internal states to their default values for all microphones.

freeze: This pin must have one INT32 value per microphone channel. A non-zero value will freeze adaptation of the filter weights for that channel. The existing frozen filter weights will continue to be applied, but the RNS weights will reset since they are highly dependent on reference levels.

Optional Output Pins

Three module arguments can be used to add rns weights and debug outputs.

outputRNSWeights: Enabling this will output the RNS weights (the W2 array) on an output pin. The output pin will have one channel per microphone. The W2 weights are real and there is one value per input bin. When enabled, the W2 weights are not applied to the output error signal.

outputAECWeights: This argument will output the AEC weights (the WW1 array) on an output pin if set to true. The pin will have numRefs * maxTaps channels per microphone input. The WW1 weights are complex, and channels are ordered [c1r1t1, c2r1t1 .. cCr1t1 .. c1rRt1, c2rRt1, c1r1t2 .. cCrRtT ], where c1 is mic channel 1, c2 is mic channel 2, C is number of mic channels, t# is tap number, T is maxTaps, r# is ref channel, and R is number of reference channels.

outputPVals: If set to true, this argument will enable two additional output pins - P array, and PXTerm array. Both output pins will have one channel per microphone input.

The P array is all real values, and is ordered per channel as [b1t1c1 b1t1c2 ... b1t1CC b1t2c1 b1t2c2 ... b1tTcC b2t1c1 b2t1c2 ... b2t1CC ... bBtTc1 bBtTc2 ... bBtTcC], where c1 is ref channel 1, C is number of reference channels, t# is tap number, T is maxTaps, b# is bin number, and B is number of input bins.

The PXTerm array is complex, and is ordered per channel as [b1t1x1 b1t1x2... b1t1xX b1t2x1 ... b1tTx1 ... bBtTxX], where t# is tap number, T is maxTaps, b# is bin number, B is number of input bins, x is the cross term number, and X is the number of cross terms.

Type Definition

CODE
typedef struct _ModuleSbKalmanAEC4RefV1
{
    ModuleInstanceDescriptor instance;            // Common Audio Weaver module instance structure
    INT32 maxTaps;                                // Maximum length of the filter
    INT32 numTaps;                                // Current length of the filter
    FLOAT32 V;                                    // Adaptation constant
    FLOAT32 smoothingTime;                        // Time constant of the smoothing process.
    FLOAT32 A;                                    // Smoothing factor
    FLOAT32 p0;                                   // Starting value for covariance estimate
    INT32 enableRNS;                              // Enable residual noise suppression
    INT32 firstRun;                               // First run for setting P from p0 on startup
    FLOAT32 FFTSize;                              // FFT Size used for WOLA (WOLA numBins)
    INT32 stateIndex;                             // Circular buffer index. [0 numTaps-1]
    INT32 logicInputsEnabled;                     // track if reset input pins are enabled
    INT32 enableW2Output;                         // tracker for rns weight output enable
    INT32 enableWOutput;                          // tracker for aec weight output enable
    INT32 enablePVOutput;                         // tracker for rns weight output enable
    INT32 scratchIndex;                           // tracker for which pin scratch is on
    INT32 RNS_numPoints;                          // Number of values in the lookup table. The total table size is [maxPoints 2].
    INT32 RNS_order;                              // Order of the interpolation. This can be either 2 (for linear) or 4 (for pchip).
    FLOAT32* WW1;                                 // Adaptive filter coefficients.
    FLOAT32* P;                                   // Real estimation error covariance matrix.
    FLOAT32* PXTerm;                              // Estimation error covariance matrix - the off-diagonal terms.
    FLOAT32* CC;                                  // Complex state variables (previous inputs).
    FLOAT32* corrC;                               // Stores all the correlation between reference signals per bin and tap - diagonal part. Real number.
    FLOAT32* corrCXTerm;                          // Correlation between ref channels - the off-diagonal terms.
    FLOAT32* W2;                                  // Residual noise suppression weights.
    FLOAT32* RNS_table;                           // Lookup table. The first row is the X values and the second row is the Y values.
    FLOAT32* RNS_polyCoeffs;                      // Interpolation coefficients returned by the grid control.
} ModuleSbKalmanAEC4RefV1Class;

Variables

Properties

Name

Type

Usage

isHidden

Default value

Range

Units

maxTaps

int

const

0

16

Unrestricted

samples

numTaps

int

parameter

0

16

1:1:16

samples

V

float

derived

0

0.97154

Unrestricted

smoothingTime

float

parameter

0

30

0.1:1000

sec

A

float

derived

0

1

0:1

p0

float

parameter

0

1

Unrestricted

enableRNS

int

parameter

0

1

0:1:1

firstRun

int

state

0

0

Unrestricted

FFTSize

float

derived

1

512

Unrestricted

stateIndex

int

state

1

0

Unrestricted

logicInputsEnabled

int

const

1

0

Unrestricted

enableW2Output

int

const

1

0

Unrestricted

enableWOutput

int

const

1

0

Unrestricted

enablePVOutput

int

const

1

0

Unrestricted

scratchIndex

int

const

1

3

Unrestricted

RNS_numPoints

int

const

1

7

4:1:1000

RNS_order

int

const

1

2

2:2:4

WW1

float*

state

0

[64 x 32]

Unrestricted

P

float*

state

0

[64 x 32]

Unrestricted

PXTerm

float*

state

0

[96 x 32]

Unrestricted

CC

float*

state

0

[64 x 32]

Unrestricted

corrC

float*

state

0

[64 x 32]

Unrestricted

corrCXTerm

float*

state

0

[96 x 32]

Unrestricted

W2

float*

state

0

[32 x 1]

Unrestricted

RNS_table

float*

parameter

1

[2 x 7]

Unrestricted

RNS_polyCoeffs

float*

state

1

[4 x 6]

Unrestricted

Pins

Input Pins

Name: dataIn

Description: Mic inputs

Data type: float

Channel range: Unrestricted

Block size range: Unrestricted

Sample rate range: Unrestricted

Complex support: Complex

Name: reference

Description: Reference input

Data type: float

Channel range: 4

Block size range: Unrestricted

Sample rate range: Unrestricted

Complex support: Complex

Output Pins

Name: errorSignal

Description: Error signal = difference between filter output and each channels data input

Data type: float

Scratch Pins

Channel count: 1

Block size: 24

Sample rate: 48000

MATLAB Usage

File Name: sb_kalman_aec_4ref_v1_module.m

CODE
 M = sb_kalman_aec_4ref_v1_module(NAME, MAXTAPS, FFTSIZE, RESETPINSENABLE, OUTPUTRNSWEIGHTS, OUTPUTAECWEIGHTS, OUTPUTPVALS))
 Frequency domain subband echo canceler using a Kalman filter based
 algorithm. four reference channels, multiple input channels.
 Arguments:
    NAME - name of the module.
    MAXTAPS - maximum length of each frequency domain complex adaptive filter
    FFTSIZE - fft size used for input data (typically (# WOLA
              subbands-1)*2
    RESETPINSENABLE - creates 3 optional input pins for controlling behavior of module. 
        - The resetP pin resets all P and PXTerm values to initial p0 value
        - The masterReset pin resets all internal states to initial values (including P) for all channels
        - The freeze pin can freeze the adaptation in the filter. Current weights are still applied
    OUTPUTRNSWEIGHTS - optional output pin for RNS weights
    OUTPUTAECWEIGHTS - optional output pin for AEC weights
    OUTPUTPVALS   - optional output pin for P values
 Copyright 2021.  DSP Concepts, Inc.  All Rights Reserved.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.