Is it possible to create an adaptive filter from discrete blocks in Sigma Studio?
I'm using the EVAL-ADAU170XEBZ evaluation board to try and produce an acoustic echo canceller for a project I am working on. I've read on the forums the existence of a Normalized Least Mean Squares(NLMS) algorithm block in Sigma Studio but it doesn't appear to be available using my particular evaluation board and Sigma Studio v3.6.
I've been trying to build one from discrete blocks but have had little success. I've attached my project file if anyone would like to have a look. I wonder if there are any others out there tackling the same issue.
I have two channels of audio:
Channel 0: Direct Speech + Sinewave echo
Channel 1: Direct Sinewave
I wish to remove the sinewave from the output. My filter is currently a 40-tap FIR and its coefficients are calculated by taking the output of my filter and subtracting it from Channel 0. This is based on: New Coeff = Current Coeff + mu*e(n)*x(n)
Any assistance would be gratefully appreciated.
canceller
adau170xebz
filter
sigma
nlms
studio
echo
fir
adaptive
lms
acoustic
Show More
Hello GatsbyDSP
There is a ready to use block in sigma studio. I dit some experiments with it. But the control of the learning mechanism was a bit a challenging… then I cot an other project with higher priority. So I stopped. As far as I can tell it is not necessary to build the complete NLMS algorithm with discrete parts.
See topic: https://ez.analog.com/thread/10096
Succes!
Hi LsH. Thanks for the response. Unfortunately the NLMS block is not available for the EVAL-ADAU170XEBZ evaluation board I am using. Which means I'm forced to try and build one myself from discrete parts.
Hi GatsbyDSP,
Wow I'm impressed with your effort to make an otherwise-unavailable algorithm for the -170x. Not knowing much about LMS, I can only offer an observation: With a 16KHz sample rate, the lowest frequency that completely fits within your 40-step FIR filter is 400 Hz. Assuming that your application is strictly voice, perhaps you could try using a two-sample delay for each step in the filter, along with a 80-sample overall delay. Finally, add a 3KHz or so anti-aliasing filter in front. This gives your LMS a working range from 200 Hz -- 3 KHz.
Oops! I just noticed something else -- the coefficients for every tap in the FIR filter are presently the same. That would appear to produce a moving-average low-pass filter, not a LMS filter. The math I see in Wikipedia for LMS goes over my head, but I'm wondering if in the relevant equations the FIR's filter kernel (coefficients or impulse response) is not a single number but a vector or matrix quantity, with a separate number for each tap.
Bob
Message was edited by: Robert Blowsky
Thanks to Bob and LsH for their replies.
You were totally right Bob, my coefficients were all the same and it couldn't have worked. My new revision should take care of that.
I've tried taking a slightly different approach implementing the adaptive algorithm but it is still refusing to work. I'm using a slightly simpler algorithm this time too: New Coeff = Old Coeff - (Sample * error) This is carried out for each individual tap.
Any thoughts would be gratefully appreciated.
This question has been assumed as answered either offline via email or with a multi-part answer. This question has now been closed out. If you have an inquiry related to this topic please post a new question in the applicable product forum.
Thank you,
EZ Admin
Please log in to reply.