This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Convergence failing integrating TI AER on OMAP4

We've integrated the AER version 16.0.0.1 (aer_gcarmv7a_obj_16_0_0_1_Linux) on OMAP4 based video communication device. We are finding the convergence test failing on our device in a typical room environment. We are seeing the adaptive filter diverging more often for all kinds of signals, white noise, CSS and even for typical speech signals.  
 
We have been able to reproduce the issue on the aer simulation environment also by feeding in the send in signal (mic signal) captured on the real device.  For the test, we are using the default tail length of 200ms,  CSS signal (css_16k_-18dBFS.pcm) as receive in input and enabling only "AER enable" and "AER update enable". 
 
We've modified the aersim.c file in order take the send in signal from a file. We've made sure that the system is causal by setting y2x delay to 0, planning to optimize it later for the correct value. 
 
The output signals receive out and send out signals are stored in the files receiveout.pcm and sendout.pcm, both are in little endian format. 

Can you please help us in finding out the root cause of this issue? 

Attached tar.gz file containing all the files. 


Build Steps

Use the below modified files to build the aer simulation environment.
  • aersim.c - to input the send in signal captured on the device
  • aersim_setup.c - set he y2x delay to 0 just to make sure the system is hundred percent causal for this experiment, later we will set the optimal delay. 
  • aersimcfg.txt - disabled everything except AER enable and AER update enable (required on the target)

Execution steps

1) copy css_16k_-18dBFS.pcm ../../vectors/inp/ directory on the target

2) copy the aersimcfg.txt to the test directory

2) run the executable 

# ./aertest_cortexA8.xv7A

More details on the Usage - 

# ./aertest_cortexA8.xv7A -h
Usage:
  ./aertest_cortexA8.xv7A 
    -p Use real device send in signal 
        1 - enable <default> 
        0 - disable 
      if 1 then the program takes send in signal from the file sendin.pcm 
                and writes receive out and send out signals to receiveout.pcm and sendout.pcm files, near end signal is discarded 
      All these three files are in the little endian format 

     The far end signal is always from a file specified in the aersimcfg.txt' and for this test it is ne_pink_16k.pcm (big endian format only) 
    -h - print this message

Thanks in advance.

srcPcmFiles.tar.gz
  • There was a typo in the usage text in the previous post, please find below the corrected text.

    # ./aertest_cortexA8.xv7A -h
    Usage:
      ./aertest_cortexA8.xv7A
        -p Use real device send in signal
            1 - enable <default>
            0 - disable
          if 1 then the program takes send in signal from the file sendin.pcm
                    and writes receive out and send out signals to receiveout.pcm and sendout.pcm files, near end signal is discarded
          All these three files are in the little endian format

         The far end signal is always from a file specified in the aersimcfg.txt' and for this test it is css_16k_-18dBFS.pcm (big endian format only)
        -h - print this message


    Thanks in advance.

  • Any inputs on this question? 

    Thanks,

    Prateek

  • Prateek,

    Sorry for my late response. I just saw your posts today.

    I believe that the root cause was varying delay between Rx out and Tx in. I did some simple analysis on your signal sendin.pcm, and believe the delay changed by about 6msec when the divergence happens.  Please see the attached plot. It is the cross correlation between Rx input and Tx input. The blue curve is obtained using data from 1.5 seconds to 3.9 seconds, and the red one using data from 4.3 seconds to 6.7 seconds. The difference between the peaks is about 93 samples, ie. about 6msec. Another way to analyze the delay is to dump the first 20msec of the filter coefficients before divergence and after reconvergence. Then use the provided tools optdl_tool to convert the coefficients to time domain and locate the peak coefficient. You will see the peak moves.

    Regards,

    Jianzhong