Post Go back to editing

ADAU1467 MFxLMS training procedure question

Category: Software
Product Number: ADAU1467
Software Version: Version 4.7. Build 0, Rev 1831

We are trying to use the ADAU1463 to perform adaptive noise cancellation using the MFxLMS block in SigmaStudio.  We are also using the ADUA1777 for the codec.  The noise bandwidth we’re trying to cancel is 100Hz-1kHz.  I’m having problems getting the error signal to minimize to zero in the MFxLMS training mode. 

 The eval board setup is as follows:

 1 – The ADAU1777 provides the master clock to the ADAU1463

2 – I2S data flows from the ADAU1777 to the ADAU1463’s SDATA_IN3 port

3 – I2S data is sent to the ADAU1777 from the ADAU1463’s SDATAIO1 port

4 – The I2S BLCK_IN3 and LRCLK_IN3 are set as masters

5 – 192 kHz serial port rate

6 – The sample rate of the ADCs, DACs and core fs of the ADAU1777 are set to 768kHz (to minimize latency)

7 – The sample rate of the ADAU11467 core fs is set to 8kHz (to increase the anc frequency resulution)

 

Below is the clock control and I2S setup between the two eval boards:

 

 

I have the secondary path filter length set to 256.  When I start the training, I can hear the generated white noise at the speaker output.  But the mean square error output on the ReadBack block usually just bounces around some value which increases or decreasing when I increase or decrease the output of the anti-noise signal (using the volume control slider).  The error output never converges to or something near zero.  The secondary path coefficients it outputs are all negative values, usually between 0.1 and .001. 

Here is a screen shot of my ADAU1463 setup in SigmaStudio:

 I’m wondering if my sampling frequencies are set up correctly (I attached the project files I’m using in the zip file below)

2867.ADAU1463-17777_ANC.zip

 Also, how long should the training process usually take?  I’ve been running it for a few minutes at different step sizes but not sure if it needs to run longer.

 

Any help or advice is greatly appreciated!

TK

  • Hello TK,

    Thanks for the well detailed post and the project file. This will need a little more study on my part. 

    I did just take a quick look at your project and one thing stood out. 

    You did setup clock generator 1 to have the X1 output be an 8kHz fs. So that was properly setup assuming you are using a 12.288MHz master clock input. 

    In your project you are using serial input port 3, channels 40 and 41. In the register settings you have that serial port setup for a X1 rate of 193kHz and then you are using the /3 setting which will give you a 64kHz sampling rate. So that is what should be coming out of the serial port to go to the 1777. The DSP core start pulse is set to use clock generator 1 nominal X1 output so the core is running at 8kHz but the serial input port is running at 64kHz. So it is picking up 8 samples for every one that the core actually picks up. So seven samples are thrown away every frame. 

    for the serial output ports you are using port 3 and it is also running at the 64kHz rate. So this means that every sample the core produces is being output eight times. The other strange thing is that you are using output ports numbers 44 and 45. Those are in the middle of the eight possible channels for this port. You have the port setup for two channel operation. These are the first two channels of the second half of the frame and with a 50/50 duty cycle. You should not be seeing any data out of this part or if the LTCLK polarity is flipped it might work because of it being the second half of the frame. 

    You are somewhat negating the low latency of the 1777 by running things this low. If you were to setup the serial ports to run at 8kHz then it will take a LONG time for the data to be transmitted and the ASRC will also take some time. I really do not see a reason for running the sigmaDSP core at 8kHz. I would run it at 48kHz or maybe even 96kHz and that would make the transmission time less and the ASRC would have less latency and the conversion should be faster. Right now I think you have so much distortion from all the zero order holds going on with the serial ports that it is getting in the way of the filter conversion. 

    By the way, I also see you are basically using the 1777 as a codec and not doing the ANC there. I guess this is fine and you put some filters there. That is good. 

    These are my initial thoughts...

    Dave T

  • Hi Dave,

    thank you for the fast reply and initial guidance! 

    Actually the external master input clock is 3.072MHz (provided by the ADAU1777).  But I assumed this would give me a 8kHz fs according to my clock register settings: 

    =>  3.702MHz  /1  x96  /1024  x1/36  =  8kHz  at CLK Gen1 output.  Please let me know if my settings are not correct.

    My plan was to run the 1467 core fs at 8kHz to get a better frequency resolution (8kHz/256 filter length).  This way I wouldn’t need to up and down convert in the dsp core.  And then have the output restructure filter in the 1777 take care of the resulting distortion. My input and output serial rate was still planned to be 192kHz.

    I do realize now that my serial clock settings are not correct.  I will start making your suggested changes when I’m back in the office and will let you know my results.

     

    Thanks again!

    TK