EVAL-ADAU1466Z Poor ANC on White Noise and Speech
Hello,
I am working on an ANC project for my internship, and I am having trouble getting the platform to cancel certain types of noise. With my current setup I am able to cancel tonal noise, multi-tonal noise, and sequences of tones, but on white noise and speech the performance degrades significantly. As far I know the Modified Filtered-x LMS algorithm implemented on the board should be able to handle white noise,. I do not expect great performance on speech noise because the literature says that Filtered-x LMS algorithm does not perform well on non-stationary signals. I thought the issue might be the latency, I found that on another thread that the analog-to analog latency when measured via scope was 1.3 ms, I tried to measure the time from reference signal recording to anti-noise output with the algorithm running and got a system latency of 1.47ms. Given this, I tried to increase the distance between the error and the reference microphone in order to give the platform enough time to process the audio data. I increased the distance to over 50 cm so that the propagation of sound in air would take longer than the system latency, but still the platform was unable to perform on white noise. I tried changing the frequency content, because of the limitation in the highest attenuable frequency imposed by the system latency, by feeding the system pink and Brownian noise, but still the system did not attenuate this noise but make it louder. My setup consists of a pair of headphones with the error microphones placed in the cups. There is a single reference microphone that is attached to the noise speaker at least 51 cm away. My workplace is strict about pictures being taken in the lab for intellectual property reasons, so I have provided a diagram of my setup below.
Is there a problem with my setup, or is this platform not capable of handling white noise, other coloured noise signals or speech? Attached are my SigmaStudio flowgraphs.
I also tried to implement the NLMS algorithm, because it should be better at handling signals like speech (it is very common in adaptive echo cancellation). I was unable to get this graph working, I am picking up sound from the reference and error microphones but I am not getting any anti-noise output. Is there something wrong with my graph or setup? The graph for testing NLMS algorithm is also provided, as well as the DSP project files.
Thank You.
FXLMS_test.dspproj
NLMS_test.dspproj
Audio Signal Processors
adau1452
Audio Products
hardware
ADAU1787
ad1938
ADUA1466
adau1466 eval board
Active Noise Cancelation
SigmaDSP Audio Processors
active noise control
adau1466
Show More
Hello MisterVictor,
White noise is actually one of the worst cases for noise cancellation because the noise is random. The cancellation routine needs time to adapt and a pattern to adapt to. The anti-noise signal needs to cancel out a signal and since it is not repetitive it has to get there right away! The platform you are using has converters that are not low latency and the DSP core is running at a slower sampling rate which is why you are getting around 1.3 to 1.4-ish ms of latency. This is far too long to cancel any higher frequencies. This is also why it is bad for speech. Even my high quality name brand ANC headphones do not do great with speech.
For ANC you really need a latency in the single digit micro-seconds. Look at the architecture of the ADAU1787. It has two DSP cores. One is a SigmaDSP core running slower but the other is a fast DSP. The FDSP is basically a filter engine that computes BiQuad filters VERY fast. The ADC and DAC converters are optimized for low latency so the out of band performance is not great but the latency is really low. So from analog input through the fast DSP core running at the highest rate of 768kHZ fs going to the DACs back to analog you have a latency of under 10us. I forget the exact number?... This is what is used in a alot of ANC products.
The SigmaDSP is used to do some basic volume control and mixing of external signals but also for tracking the signals and calculating new filter coefficients for the fast DSP filters. Some people use external microcontrollers to also compute coefficients. You can also do some basic limiting with the fast core.
In the coming months we will be working on some example projects for using the NLMS blocks on several different platforms. At the moment we do not have a good example.
Even those will have difficulty with white noise because it is random. You cannot calculate a filter that reduces random frequencies at random times. It would almost have to just lower everything!
It seems that you are actually learning a lot for your internship!
Dave T
Hello,
DaveThib has some very good points and you should study his detailed response.
Now, with your current setup, one quick think to try is is use an electrical reference instead of acoustic reference, i.e. use the signal to the noise speaker as the ref input. Also, since you have around 1.5mS of latency, move the noise speaker further away from the headphones, maybe 2 feet away is good. That way the acoustic delay from the noise speaker to the error mics will be longer that the latency from the ref input to antinoise output, so that you will have a causal system.
Hello,
Another thing, the error mic is only a fraction of an inch from the antinoise loudspeaker. At 48000, 1 sample = 0.3 inch acoustic path, so there isn't really enough time resolution to capture a good secondary path impulse response. You should run the DSP and codec at 192kHz sample rate. This also significantly reduces the latency through to around 160 uS. If you have a rev B 1466Z board it can be modified with some jumper wires to configure the codec for 192kHz sample rate. All this being said, I don't know if you'll get cancellation with this setup. I would look into the ADAU1787 as @DaveThib suggested.
Thank you for the advice. As a follow-up, will moving the setup further away from the noise source improve the performance on higher frequencies? Can the performance on higher frequencies be improved if the latency remains the same?
Thank you for the advice. I changed the setup so that the anti-noise speakers are further away from the error microphones. Hopefully, I will get better results.
bitmechanic Could you inform me on how to configure the codec with jumper wires? According to the user guide for the evaluation board the AD1938 is hardwired in standalone mode limiting the sampling rate to 44.1 kHz and 48 kHz. the user guide says that it is not possible to change this setting. Thank you in advance.
Hello MisterVictor,
Sorry Dave and bit for my interrupting reply.
Regarding CODEC programming, Dave has put a lot of efforts explaining how to modify the Eval board to program the CODEC using SPI to run at different sample rates. you should have a look at the ADAU1452 user guide, The same instructions apply to the ADAU1466Z eval board as well.
You can modify the ADAU1466Z board using the same instructions. They are the same hardware wise.
Below is the link. Please refer from page 26.
Link: https://www.analog.com/media/en/technical-documentation/user-guides/EVAL-ADAU1452REVBZ-UG-1662.pdf
Regards,
Harish
See this post:
How to run the AD1938 codec on the EVAL-ADAU1466Z at higher sample rates - Q&A - SigmaDSP Processors & SigmaStudio Dev. Tool - EngineerZone (analog.com)
Harishgowtham and bitmechanic . Thank you for referring me to the resource. I made the modifications to the board. I found that even with the increased sampling rate, the platform did not perform well on speech. But rather than the noise being several dB louder at the error mic, the error signal was often less than 1 dB louder with the ANC on. Is this consistent with what you would expect?
Please log in to reply.




