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.

Acoustic Echo Cancellation for omap4430

Other Parts Discussed in Thread: TELECOMLIB

What is the support available for Acoustic Echo Cancellation on omap4430 platform?

  • We will get back on this.

    regards

    Yashwat

  • The omap4430 has Cortex-A9 dual core as far as I remember. You could try using our Acoustic EC for Cortex-A8. I think it should work. There could be only some minor reduction in performance based on the optimization done for Cortex-A8 vs. Cortex-A9. If you search for TELECOMLIB and AEC-AER product you will get to the page where you can request the download of AER component for Cortex-A8. (AER is the Acoustic Echo Removal component that has Acoustic EC and a few other modules that go along with it).

    Give it a try and let us know if you had any problems executing this on Cortex-A9.

    Regards,
    Bogdan

  • Thanks Bogdan for your reply.

    yes, omap4430 has Cortex-A9 dual core. I will try this on omap4430 board and let you know the results.

     

  • Hi Bogdan,

    I am able to run and compile the AEC application on omap4. After executing the aertest_cortexA8.xv7A binary, rxOut.pcm and TxOut.pcm files are generated in test/lnkr/gcarmv7a path.

    when I am playing these file only disturbance sound is coming. we are not able to perceive the echo cancellation effect.I have also checked with reference files given in test/vectors/refOut. both are looks same.

    I am attaching both files.

    6175.txOut.pcm.txt

    7180.rxOut.pcm.txt

     

     

  • Ashwani said:

    Hi Bogdan,

    I am able to run and compile the AEC application on omap4. After executing the aertest_cortexA8.xv7A binary, rxOut.pcm and TxOut.pcm files are generated in test/lnkr/gcarmv7a path.

    when I am playing these file only disturbance sound is coming. we are not able to perceive the echo cancellation effect.I have also checked with reference files given in test/vectors/refOut. both are looks same.

    I am attaching both files.

    ...

    Hello Ashwani,

    I picked up the files and I checked them out. They are OK. So, it is most likely the problem in how you load/play the files. Before we get to that I have one question:

    1. Did you execute the original executable that was provided with the release (for Cortex-A8) or the one you generated for Cortex-A9?

    Now back to the files you got. They are in binary format:

    • 16-bit linear samples, 16kHz sampling rate
    • Big-Endian byte ordering [MSB,LSB] a.k.a. "16-bit Motorola PCM" in Adobe Audition software

    You need to load these files into a program that can read binary audio. Adobe Audition (formerly Cool Edit Pro) is one such application that can be used. You may also load it in MATLAB by writing a small function that can read the binary file with 16-bit words in a Big Endian byte ordering. When you play out in MATLAB, just make sure you scale the values so that 32768 integer value corresponds to +1. Otherwise it would be completely distorted. Use 16000Hz sampling rate as well.

    Once you successfully load the files in some audio software, you will find out that the Rx file has the female voice which is the reference signal and Tx file has the output of the Acoustic Echo canceller. You will hear the male voice and very high artificial background noise (it was intentionally mixed and made artificial and loud so you may hear better places where the EC would operate on the echo). You may hear a few places where echo leaked a bit and for short periods of time.

    The test itself has very intensive double-talk period which starts at 0:34 time mark (34s into the file) and goes all the way to the end of the file. During the double talk you may hear initially a bit of distortion for a very brief instant. It would quickly go away and you would hear pretty good output quality without much of any disturbance from the echo. Please keep in mind that the example was intentionally made to be extremely hard. In real life you would not have this type of double talk and this type of noise.

    About the test:

    The test code was using the female reference speech to create echo using Acoustic Echo Path simulation function. The echo was mixed with the "near" end male speech and additional noise was added as explained above. That signal was passed to the AER component which removed the echo and provided the output in the Tx file you got. You may also go ahead and try to disable AER and see how the output would look like in that case...

    Have fun, and let us know if you have any more questions.

    Regards,
    Bogdan

  • Thank  you Bogdan,

    yes both files are OK.

    bogdan said:

    1. Did you execute the original executable that was provided with the release (for Cortex-A8) or the one you generated for Cortex-A9?

    I executed the original executable that was provided with the release for Cortex-A8.

    bogdan said:

    About the test:

    The test code was using the female reference speech to create echo using Acoustic Echo Path simulation function. The echo was mixed with the "near" end male speech and additional noise was added as explained above. That signal was passed to the AER component which removed the echo and provided the output in the Tx file you got. You may also go ahead and try to disable AER and see how the output would look like in that case...

    I have one doubt:

    fe_16k.pcm : file has female reference speech

    ne_pink_16k.pcm : file has near end male speech+additional noise+female speech OR  near end male speech+additional noise?


  • Ashwani said:

    ...

    About the test:

    The test code was using the female reference speech to create echo using Acoustic Echo Path simulation function. The echo was mixed with the "near" end male speech and additional noise was added as explained above. That signal was passed to the AER component which removed the echo and provided the output in the Tx file you got. You may also go ahead and try to disable AER and see how the output would look like in that case...

    I have one doubt:

    fe_16k.pcm : file has female reference speech

    ne_pink_16k.pcm : file has near end male speech+additional noise+female speech OR  near end male speech+additional noise?


    [/quote]

    The ne_pink_16k.pcm has only the near end male speech and noise. It does not have any echo. The echo is generated during the execution of the code by taking the reference signal passing it through the acoustic echo path simulation function and mixing it with the near end signal.

    If you are looking to hear how double-talk would really sound, you should load Tx/Rx output files into Adobe Audition mixer into separate tracks and play them together, panning one file to the left channel and the other to the right so you can listen to it in stereo.

    The actual near end input to the acoustic EC could also be traced out into a file. Or, you could disable AEC and capture the TxOut again to hear how would it sound without the AEC.

    Regards,
    Bogdan

  • if  possible can you send me AEC simulation block diagram?

  • Ashwani said:

    if  possible can you send me AEC simulation block diagram?

    I sent you a message with the block diagram.
    Bogdan

     

  • Thanks Bogdan.

  • Hi Bogdan,

    I have following queries:

    1. I tried to disable AEC module as follows:
    a) AER Control bitfield 0 (0x9887) to 0x9886 in aersimcfg.txt
    b) aer_CTL0_ENABLE_ECHO_CANCELLER 0x0000 in aer.h

    but txOut.pcm file does not change.

    2. Is it possible to change AEC/AER input and output to little-endian?

  • Ashwani said:

    2. Is it possible to change AEC/AER input and output to little-endian?

    I believe we provided source code for the test code. You may go ahead and add the option to generate little-endian instead of big-endian.

    I'll get someone to answer your question #1.

    Regards,
    Bogdan

  • Ashwani,

    For question #1, you only need to do a), but not b). Macro aer_CTL0_ENABLE_ECHO_CANCELLER defined in aer.h is a bit mask that you may use in your integration code to enable or disable AER. It is not supposed to be changed by users. 

    For question #2, as Bogdan said, you can change the AER simulation source code to have little endian format. Please go to aer/test/aersim/aersim_fileIO.c, and change function aerSimFwrite() to the following:

    void aerSimFwrite(tint *buf, tint buf_size, FILE *file)

    {

      tint  i, j;

     

      if(file == NULL){

        return;

      }

     

      for (i = 0, j = 0; i < buf_size; i++, j+=2)

      {

        tempIoBuf[j] = (buf[i])      & 0x00ff;

        tempIoBuf[j+1]   = (buf[i] >> 8) & 0x00ff;

      }

      fwrite(tempIoBuf, buf_size, AERSIM_FIO_SIZEOF_WORD, file);

    }

     

    Regards,
    Jianzhong

     

     

  • Thanks jianzhongxu and Bogdan.

    AER sample application working fine on omap4 board for different scenarios as given in aersimcfg.txt file. Its drastically reduces noise level by half.

    Is it possible to reduce more noise level or this is maximum reduce noise by AER?

     

    Regards

    Ashwani

  • Ashwani,

    Yes, it is possible. The default configuration reduces noise by 6dB. You can configure it to reduce as much as you want. However, we don't recommend more than 12dB. 

    Here is how to configure the noise reduction. Go to aer/test/aersim/aersim_setup.c. Find function aer_sim_param_config() and the following code:

        aerCtl.ctl_code          = aer_CTL_NR_NOISE_THRESH;
        aerCtl.u.nr_noise_thresh = -65; 
        aerControl (aerInst,(aerControl_t *)&aerCtl);

    Just put the following new code below the above mentioned code:
        aerCtl.ctl_code          = aer_CTL_NR_FBAND1_MAX_ATTEN;
        aerCtl.u.nr_fband1_max_atten = 12; /* 12dB or change to 18 for 18dB */
        aerControl (aerInst,(aerControl_t *)&aerCtl);
        aerCtl.ctl_code          = aer_CTL_NR_FBAND2_MAX_ATTEN;
        aerCtl.u.nr_fband2_max_atten = 12; /* 12dB or change to 18 for 18dB */
        aerControl (aerInst,(aerControl_t *)&aerCtl);
        aerCtl.ctl_code          = aer_CTL_NR_FBAND3_MAX_ATTEN;
        aerCtl.u.nr_fband3_max_atten = 12; /* 12dB or change to 18 for 18dB */
        aerControl (aerInst,(aerControl_t *)&aerCtl);
    Please read aer.h for more information.
    Regards,
    Jianzhong Xu

  • Hi Ashwani,

    Do you have AER test application integrated with OMAP4 ALSA drivers and if so, can you share the changes you did to make it to work? Thanks.

    Prateek

     

  • Hi Ashwani,

    Support for AER through this forum is limited to the functionalities of AER module as well as the integration of AER, but does not include framework on a specific platform such as OMAP4430.

    Regards,

    Jianzhong