Overview
Stereo Frequency domain subband adaptive filter
Discussion
Subband based stereo 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 while the second is a stereo reference signal.
...
The module also has an optional output pin that is enabled by the module argument RNSPIN. When this pin exists, the module outputs the RNS weights on the second pin. The RNS output data is real and of dimension 1 x numBins, where numBins is the number of FFT bins.
Type Definition
Code Block |
---|
typedef struct _ModuleSbStereoAECRNSOut { 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 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* Wplus; // Intermediate result (complex scratch). FLOAT32* P; // Real estimation error covariance matrix. FLOAT32* PXTerm; // Estimation error covariance matrix - the off-diagonal terms. FLOAT32* Pplus; // Intermediate result of the diagonals(real scratch). FLOAT32* PplusXTerm; // 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* mu; // Intermediate result (real scratch). FLOAT32* mumu; // Intermediate result (real scratch). FLOAT32* muXTerm; // Intermediate result (imag scratch) - the off-diagonal terms. FLOAT32* mumuXTerm; // Intermediate result (imag scratch) - the off-diagonal terms. FLOAT32* K; // Intermediate K value (imaginary scratch). FLOAT32* KK; // Intermediate K value (imaginary 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. } ModuleSbStereoAECRNSOutClass; |
Variables
Properties
Name | Type | Usage | isHidden | Default value | Range | Units |
maxTaps | int | const | 0 | 8 | Unrestricted | samples |
numTaps | int | parameter | 0 | 8 | 1:1:8 | 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 | |
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 | |
Wplus | float* | state | 0 | [16 x 1] | Unrestricted | |
P | float* | state | 0 | [16 x 32] | Unrestricted | |
PXTerm | float* | state | 0 | [8 x 32] | Unrestricted | |
Pplus | float* | state | 0 | [16 x 1] | Unrestricted | |
PplusXTerm | float* | state | 0 | [8 x 1] | Unrestricted | |
CC | float* | state | 0 | [16 x 32] | Unrestricted | |
corrC | float* | state | 0 | [16 x 32] | Unrestricted | |
corrCXTerm | float* | state | 0 | [8 x 32] | Unrestricted | |
mu | float* | state | 0 | [16 x 1] | Unrestricted | |
mumu | float* | state | 0 | [16 x 1] | Unrestricted | |
muXTerm | float* | state | 0 | [8 x 1] | Unrestricted | |
mumuXTerm | float* | state | 0 | [8 x 1] | Unrestricted | |
K | float* | state | 0 | [16 x 1] | Unrestricted | |
KK | float* | state | 0 | [16 x 1] | Unrestricted | |
W2 | float* | state | 0 | [32 x 1] | Unrestricted | |
RNS_table | float* | parameter | 0 | [2 x 7] | Unrestricted | |
RNS_polyCoeffs | float* | state | 1 | [4 x 6] | Unrestricted |
Pins
Input Pins
Name: dataIn
Description: Micro input
...
Sample rate range: Unrestricted
Complex support: Complex
Output Pins
Name: errorSignal
Description: Error signal = difference between filter output and dataIn
...
Description: Weights from the residual noise suppressor
Data type: float
MATLAB Usage
File Name: sb_stereo_aec_rns_out_module.m
...