Low Latency ANC Implementation
Hello,
I'm looking to find a board suitable for an ANC project I've been working on. I've currently implemented my one channel ANC system using a FIR filter with 1024 taps, however everything is currently in simulation and I want to deploy it in real time to check the effectiveness. The ADAU1787 caught my eye because of the low latency (5us between analogin and analogout), but I see that is has to go through the FastDSP chip which only allows 64 instructions per sample. Does this mean that it wouldn't be able to support my FIR filter with 1024 taps? Are all the ANC algorithms implemented using IIR filters instead? How does this scale to multi-channel ANC (multiple reference mics, 1 error mic)? Thanks in advance for all the help!
hardware
ADAU1787
Integrated/Special Purpose A/D Converters
Noise cancellation
Audio CODECs
Hello fliu123,
The filters in the FastDSP core are IIR filters and that core cannot do an FIR filter.
fliu123 said:
Are all the ANC algorithms implemented using IIR filters instead?
The NLMS filter in SigmaDSP is mostly used for building the ANC system.
what is your system sample rate?
This thread may give you some idea. You can also search the forum for some inputs, just search with the key word '1787 ANC' you will get a lot of posts with good contents.
Regards,
Harish
Hello fliu123,
I will add to what Harish wrote by pointing out that by definition, a 1024 tap FIR filter will require collecting 1024 samples and then doing the calculations. So the latency is unacceptable. You cannot use an FIR filter for any kind of ANC application. This is why the FastDSP is basically an IIR filter engine. This DSP also has a second DSP core that is a Sigma200 architecture and runs at a lower sample rate. This is used for things like calculating slower moving parameters or for control function and GPIO etc. It can do an FIR filter but is limited in memory.
Dave T
Hi Dave and Harish,
Thank you both for the answers. In my project I'm also looking to use a Raspberry Pi to help estimate filter parameters from time to time (like when a user moves around or changes environment). Would I be able to transfer the parameter data from the Pi to the ADAU1787 evaluation board via the GPIO pins? Thanks again for the help!
Hello fliu123,
No!! You cannot use a GPIO pin to change a parameter unless it is super simple like one bit. Anything like filter parameters is far too complex to do using GPIO. You must use the comms port. Then you write directly to the address for the parameter.
For things like filters you have to be careful to mute the audio because part way through updating you may end up with an unstable set of coefficients for the filter so you want to avoid that. There are filters in the library that allow you to choose between different filters. So you can set that up so you write to the inactive one then change it over to be the active filter.
Dave T
Please log in to reply.