Custom Linux board with ADAU1701: ANC + Capture + Playback
Hello all,
Currently, we are working on a custom Linux board with ADAU1701 and NXP i.MX6SLL series processor.
One of the functionalities of this board will be to apply ANC to the user's voice streamings/recordings and to deliver this "noise reduced" signal through the serial output ports of ADAU1701 in I2S format to the processor. Our aim is to capture and combine this captured "noise reduced" voice data with the video that is recorded from the onboard camera and stream this video+audio to another remote WiFi node that is connected to our onboard WiFi module.
Another functionality is to playback an audio stream, that is received from another remote WiFi node that is connected to our onboard WiFi module. We are aiming to deliver this audio streaming from the processor to the ADAU1701 through serial input ports in I2S format and playback this audio stream.
So we come up with the system diagram given below. Since this is our first design with ADAU1701, I would be more than happy to hear comments from the community on the system diagram and the following questions.
Can ADAU1701 be programmed through SigmaStudio to deliver both of the mentioned functionalities parallelly?
Can we achieve our aims without any modification to the current Linux device driver adau1701.c?
Any recommendation is very appreciated.
Best regards,
Torehan
Audio Signal Processors
anc
software
SigmaDSP Audio Processors
linux
adau1701
Show More
Hello Torehan,
I can start to answer some of your questions.
The DSP in this core is not designed to do ANC. It also does not have many instructions per sample period. So it will not be able to do a full ANC application. You can do a simpler form of noise reduction by splitting up the audio into many bands and then noise gating the bands that do not have any audio above a threshold. Several people have used this approach with some success. It is not perfect but for voice recordings it should offer some improvement.
The part certainly can take the audio from the ADCs, process it and send it out of the serial port. Then it can take data in from the serial port and send it out of the DACs. So you can do this basic application of using it as a smart codec.
You will need to supply a master clock to the 1701 that is 256x fs. The PLL can be programmed for a different factor but the 256x is common. That clock must be synchronous with the LRCLK and the BCLK. If it is not then the part will mute all the converters.
I cannot answer the question about the Linux capabilities. I do not know what it changes and if it requires a certain DSP program.
I could look at the C code but I am not a Linux expert. You could ask this on the Linux space on the forum. If anyone else knows this answer please respond.
Dave T
Hello Dave,
Thanks for the reply.
Well, what we actually need here in this project is to remove unwanted background noise up to some extent, and make the user's voice more hearable during recording/streaming. And for now, we want to keep it as simple as possible as we have a target price tag. Also currently it's not easy to find ICs in the market as you know and looks like ADAU1701 is available in stock from a couple of suppliers these days.
Let me ask you follow-up questions.
What would be your choice to make a full ANC? We can consider it for an improved version of the product in the next production runs.
So, we've noted that we can use ADAU1701 for noise reduction, of course with some reasonable amount of effort on SigmaStudio. Do you think this is achievable for a beginner in audio processing and DSPs or would it turn out to be a big project?
With your recommendation, I'll post my concerns about drivers in the Linux space also.
Regards, Torehan.
Hello Torehan,
I created this project that takes the audio and splits it up into four bands. Then I setup a compressor to act as a noise gate for low level signals and obviously compress any really high level signals.
In the project I used a pink noise source and tones to act as a signal with noise and it works pretty good. I could not find a good file with someone speaking along with background noise to see how well it worked with that input. I also arbitrarily chose the frequencies keeping in mind that voice is the primary application and not music. So this project is a good start and will need to be modified to work better for your application. It is an interesting problem.
It uses 908 instructions so it is not light but there is a lot of extra with the noise sources and the ability to add noise to a signal coming into the ADCs as well. So trimming that down will free up some instructions.
Dave T
ADAU1701 Noise Reduction with 3-bands.dspproj
( I got the file name wrong, it says three bands but it actually is four bands. )
Please log in to reply.
