ADI Sigma DSP for echo cancellation
Hi,
I am choosing a sigma DSP for echo cancellation project. Currently I am comparing ADAU1761 or ADAU1401A. May I know what is the
Acoustic echo tail length coverage for these 2 devices?
Thanks.
adau1401a
Audio Signal Processors
SigmaDSP Audio Processors
adau1761
SigmaDSP
Hi,
I have moved this discussion from the Processors and DSP community to the SigmaDSP Processors and SigmaStudio Development Tool community. Please continue the discussion here.
Regards,
Craig.
Hi,
For an NLMS time-domain algorithm, the tail length is defined as the impulse response or number of taps of the NLMS filter (?). This would then depend on the amount of coefficient/parameter memory and data memory.
The actual echo tail length can vary depending on your requirements. For the ADAU1761, the NLMS algorithm defauts to 256 TAPS but we have 4096 X Memory for audio data, and 1024 Y Memory for coefficients. The theoretical maximum for the NLMS algorithm would then be 1024 TAPS although for a typically application this would be reduced depending on what else is added to your signal flow.
-JT
Hi JT,
May I know is there any documentation or reference design for echo cancellation application with using any sigmaDSP?
Could you please kindly point me where could I get it?
Thanks.
Regards,
Tin Tin
Hi Tin Tin,
I searched around and it seems that we never documented the NLMS algorithm for SigmaStudio, or have any sample projects.
I did search a few threads and founds some use cases for AEC and echo cancellation which might help you set up a test for the algorithm.
NLMS block in sigma studio
NLMS block in sigmastudio
SigmaDSP Two Microphone Beamformer
Echo cancellation
I will ask some of the internal SigmaStudio developers to see if we have any other documented examples of using NLMS for echo cancellation.
-JT
Hi John, I'm curious about the NLMS algorithm as well. The ADAU1761 appears to be a good choice to play with, because its unmodified eval board can run at the 8 K sample rate often used in telephony. 512 taps is often enough down there.
Bob
Hi Bob,
Curious enough about the NLMS algorithm to cook up an example for us? :-] Otherwise I can try to come up with some small example that adds small delay into the system and tries to remove it with the NLMS algorithm.
I asked a few of our developers and it seems we do not have any SigmaStudio demonstration projects for Echo Cancellation (I can't seem to track down Brett's ANC example which used that block). I am told more rudimentary implementations can be done on the ADAU1761, but for more robust versions we would suggest the ADAU144x or ADAU1452. (There seems to be a bug with the ADAU145x implementation that we are looking into: https://ez.analog.com/thread/49502)
-JT
John,
I hope to play with it soon although it's OK if you beat me to it. If of course you're not busy digging out from something like six feet of snow.
I also have an immediate need for echo cancellation functionality. Playing around with the ADAU1761 eval board, but so far I can't get it to do much with eliminating live audio. It does a great job eliminating a solid tone, as well as white noise, but doesn't provide much attenuation for live audio.
It looks like based on the forum discussions this has been an ongoing topic for several years now, but not much traction has been made in terms of documentation of the NLMS block, or good examples on how to use it.
Any further insight on this topic from someone would be greatly appreciated, since this functionality within SigmaStudio is completely new to me!
Hello Byron,
I've built what I thought would be a good test project for the ADAU1761's NMLS filter but have not been able to get a useful response from it. Perhaps I could ask you to post the project (or fraction thereof) with which you have been able to cancel added tone or noise, as it would help me figure out how the filter is supposed to work. One bug I've found so far: my test project includes the NMLS filter of N taps, as well as a delay of about (0.8 x N) samples long, which I've been using to simulate an "echo". When N exceeds 608, the project still compiles without error but runs at half sample rate -- presumably because the program now overruns the available time between samples. This frequently happens with C programming, but I've never seen it before in Sigma-land.
Best regards,
Bob
Hello Bob. Attached is the sample project I have been working with on the ADAU1761 eval board. This one works well to eliminate a solid tone even when the amplitude of the simulated speaker audio is fairly high. I still have to find the project I had in which I thought is was doing a decent job of eliminating a white noise source in place of the solid tone, but even that one wasn't great.
It seems the moment I have a signal that is varying over time (like you would typically have in the speaker microphone application where the speaker audio is getting back into the microphone) it can't react to the signal fast enough to be useful.
For the lower mixer control, I'm taking a bit of a guess as to what level is appropriate to couple back into the music source. Not sure what is typical in a speaker phone application, but I realize the location of one with respect to the other will play a large role in this. These are typically located facing different directions, but I've never quantified what a typical amount would be.
I'm surprised that ADI hasn't developed this topic a bit further in terms of supporting documentation considering how long people have been interested in using this capability on the forum. Maybe they have and I just haven't found it yet??
I'd greatly appreciate any insight you can offer, or even a recommendation to a different part within the ADAU series of parts that could tackle this issue better.
Hello Bob,
I was searching the forum and ran across this old post and thought I would give you a reason why you saw the sample rate be half.
In the 1761, and the 1442 for that matter, the Sigma200 cores, the start of the frame is an interrupt generated by the serial port to mark the start of the frame. The core is designed so the interrupt is unmasked only when it is running the NOPs at the end of the code. It runs NOPS during the unused cycles. So when the code is running the interrupt is masked and so the core ignores it and keeps running the program until it is done. Then it waits for the interrupt which will happen on the next frame. So therefore the code is run every other frame and picks up every other sample etc. This is the way it manifests in the Sigma200 core. In the Sigma300 the interrupt does interrupt the code execution so you will have some portions of code that never runs and therefore stops working or never worked. There is a new feature for the Sigma300/350 that I just documented here:
You will like it. It allows you to see if your code is too long and the frame is overrunning.
Dave T
Hello Byron,
Your project effectively removes the sine wave source as you described. If I'm not mistaken, NLMS filters only work with echo delays up to their own length -- that is, with a 512-tap filter, the maximum echo time at 48K is 10.7 mS. Your example uses a much longer delay, but works with the 500 Hz source anyhow because the source is periodic (it repeats every 2 mS). I tried modifying your project to run at a sample rate of only 8 KHz, which is often used with a 512-tap NLMS filter in telephone applications. This allows for echo delays approaching 64 mS. I was hoping that the resulting project would work with more general inputs such as pink noise, but it still only worked with sine waves. Thus so far, no success with this NLMS filter.
Best regards,
Bob
Thanks for taking a look, and for your explanation. Are you or anyone else aware of a better part selection for acoustic echo cancellation than the 1761?
Please log in to reply.