Document toolboxDocument toolbox

(8.D.2.7) SbAECReset

Overview

Frequency domain subband adaptive filter

Discussion

Subband based mono echo canceler. This module works in conjunction with the WOLA filterbank modules. The module has two input pins. The first input is a single channel microphone signal and the second is a mono reference signal.

At instantiation time you specify the length of each subband filter. Then at run time, you specify the number of taps currently used. This allows you to easily vary the filter length at run time and verify performance and CPU load.

The module has optional residual noise suppression which is enabled via the enableRNS variable. By default, residual noise suppression is on and the output of the echo canceler (the error signal) is further reduced in level. The residual noise suppression is configured by a 7 element interpolation table. This table operates just like the Table X-Y module with configurable (X, Y) lookup points. The lookup table specifies values in dB for the input and output function

Type Definition

typedef struct _ModuleSbAECReset { 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 numIter; // Number of iterations of adaptive loop INT32 enableRNS; // Enable residual noise suppression FLOAT32 bypassTime; // Time in millisecond that it takes the system to reconverge after it is bypassed INT32 bypassBlocks; // Number of processing blocks that we count up as we time the bypass operation INT32 bypassCount; // Internal counter while AEC is bypassed INT32 bypassOn; // Indicates when the module is in bypass mode FLOAT32 PResetValue; // P matrix is set to this value after reset INT32 stateIndex; // Circular buffer index. [0 numTaps-1] 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* CC; // Complex state variables (previous inputs). FLOAT32* Pplus; // Intermediate result (real scratch). FLOAT32* Wplus; // Intermediate result (complex scratch). FLOAT32* energyC; // Intermediate result (real scratch). FLOAT32* mu; // Intermediate result (real scratch). 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. } ModuleSbAECResetClass;

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

const

0

0.5

Unrestricted

 

smoothingTime

float

parameter

0

10

0.1:1000

sec

A

float

derived

0

1

0:1

 

p0

float

parameter

0

1

Unrestricted

 

numIter

int

parameter

0

1

1:20

 

enableRNS

int

parameter

0

1

0:1:1

 

bypassTime

float

parameter

0

2000

Unrestricted

 

bypassBlocks

int

derived

0

96000

Unrestricted

 

bypassCount

int

state

0

0

Unrestricted

 

bypassOn

int

state

0

0

Unrestricted

 

PResetValue

float

parameter

0

0.001

Unrestricted

 

stateIndex

int

state

1

0

Unrestricted

 

RNS_numPoints

int

const

1

7

4:1:1000

 

RNS_order

int

const

1

2

2:2:4

 

WW1

float*

state

0

[16 x 32]

Unrestricted

 

P

float*

state

0

[16 x 32]

Unrestricted

 

CC

float*

state

0

[16 x 32]

Unrestricted

 

Pplus

float*

state

0

[1 x 16]

Unrestricted

 

Wplus

float*

state

0

[1 x 16]

Unrestricted

 

energyC

float*

state

0

[16 x 32]

Unrestricted

 

mu

float*

state

0

[1 x 16]

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: reset

Description: Resets internal state

Data type: int

Channel range: 1

Block size range: 1

Sample rate range: Unrestricted

Complex support: Real

 

Name: dataIn

Description: Micro input

Data type: float

Channel range: 1

Block size range: Unrestricted

Sample rate range: Unrestricted

Complex support: Complex

 

Name: reference

Description: Reference input

Data type: float

Channel range: 1

Block size range: Unrestricted

Sample rate range: Unrestricted

Complex support: Complex

Output Pins

Name: errorSignal

Description: Error signal = difference between filter output and dataIn

Data type: float

MATLAB Usage

File Name: sb_aec_reset_module.m

M = sb_aec_reset_module(NAME, MAXTAPS) Frequency domain subband echo canceler using a Kalman filter based algorithm. This version includes a reset pin allowing the internal module state variables to be reset in case they lock up. Arguments: NAME - name of the module. MAXTAPS - maximum length of each frequency domain complex adaptive filter

Â