LMS

LMS component to estimate transfer function of an unknown channel, based on an input (source) and output (observation), similar to the functionality described in the document “ANC Adaptation by block”.

Specifically, the component implements the structure seen in this diagram:

../../../../../../_images/lms_diagram.png

This specific implementation receives downsampled input signals from SFU. The LMS estimates a FIR filter, which is the interpolated to the SFU samplerate and converted to fixed point (including shift factors) ready for sfu reconfiguration.

Inputs/Outputs

input
2 channel input buffer containing floating observation data, _y_ (channel 0), and source data, _x_ (channel 1).
Note that the data is non-interleaved!
Type: audio_buffer, float
output
1 channel fixed point upsampled filter coefficients in SFU format, including shifts. Length is
(filter_order`+ 1)*`downsampling_ratio + 1 and data is organised as:
- 1st byte = Input Shift
- 2nd byte = Output Shift
- the rest: Coefficients
Type: audio_buffer, int32_t

IMPORTANT LIMITATIONS

  • Settings are currently hardcoded in header file - this will be fixed in next version!

  • Input will only accept non-interleaved data!

  • PC model is not included - this will be added in a later version

Tests

Both nonreg.py and gaptest are supported and can be run as usual.

Parameters

  • filter_order
    Number of delay elements (N) in the adaptive FIR filter (in the Audio domain) . Number of taps is therefore N + 1.
    Type: Integer
    Range: [1, 254]
  • downsampling_ratio
    Decimation factor between High Sampling Rate domain and Audio domain where LMS is performed.
    Type: Integer
    Range: [1, 16]
  • compens_filter_order
    Number of delay elements (M) in the IIR compensation filter. Number of taps is therefore M + 1 for the numerator, and M for the denominator.
    Type: Integer
    Range: [1, 14]
  • compens_filter_coefficients
    IIR filter coefficients, stored in following order: B0, B1, ..., BM, A1, ..., AM.
    Type: Array of floats of size 2 * M + 1
  • lagrange_order
    Order of polynom (L) for Lagrange interpolation of the Farrow structure.
    Type: Integer
    Range: [1, 7]
  • lagrange_coefficients
    Coefficients of the transfer matrix of the Farrow structure, stored in the following order: C0.0, C0.1, ..., C0.L, C1.0, C1.1, ..., CL.L.
    Type: Array of floats of size ( L + 1 ) * ( L + 1 )
  • num_of_cores
    Number of cores for the parallelisation on the cluster.
    Type: Integer
    Range: [1, 8]