I'm working on implementing an active noise control algorithm. I am currently working on an ADSP-221489 EZKIT LITE, because we had one lying around. I am quite new to these things, but I am beginning to suspect that this board and the AD1939 codec on it are not quite suited to my application. I got the algorithm to work, but I feel the system is not working as well as it could be, mainly due to latency issues. I am wondering which hardware would be better for me. I hope you can help. Below I have listed some information about my application:
- Active noise control system with adaptive controller and adaptive plant model.
- Preferred sample frequency: 8 kHz.
- 2 ADCs/input ports.
- 2 DACs/output ports.
- Low latency (currently multiple ms's)
If you need more specific details to answer my question, please let me know.
Yes, the AD1939 has too much latency. I think it is in the order of hundreds of milliseconds, if I remember right.
If you want to use just a codec then use the ADAU1372. It is a very low-latency codec, around the order is 140us on the ADC side when you read the data at 48kHz. Then another 150us on the DAC side.
So you want to run at 8kHz fs, the issue with this slower rate is that it takes a long time for the data to be transferred via I2S. That is the most significant delay of the 140us is to serialize the data and transmit it.
This Codec operates a little differently from most codecs. The ADC and DAC sampling rates default to 192kHz and then there are ASRCs to convert the internal sampling rate to the serial port rates. So it will convert the internal sampling rate to 8kHz fs, but, as I said you will be adding significant delay with the serial transfer.
Another part you should loo into is the ADAU1772. It is the same low-latency converter as the 1372 but with a small DSP. It is designed more as a filter engine then a general purpose DSP. So it is designed to do noise cancelling. With that part the processing is all at 192kHz so it can convert from analog, process the audio through the core and then convert back to analog in about 38us total latency. If you need to do some adaptive filtering then you can calculate new coefficients using an external processor and then change the filters in the 1772 dynamically. There are two banks for filter coefficients so it can be done all at one time avoiding filter instabilities when updating coefficients.
So have a look and see if this might work for you.