ADAU1701
Production
The ADAU1701 is a complete single-chip audio system with a 28-/56-bit audio DSP, ADCs, DACs, and microcontroller-like control interfaces. Signal processing...
Datasheet
ADAU1701 on Analog.com
Hello, I have a small set of speakers powered by a cheap WONDOM JAB4 board with an ADAU1701 DSP. I am trying to limit the bass on these speakers at higher volumes to prevent distortion and so I added the dynamic bass function. The problem I'm having is it's just not aggressive enough. At higher volumes, I still get distortion from the drivers bottoming out so I'm forced to turn the gain down and then the speakers don't get loud enough.
So how do I get it to roll off more aggressively so I can get more volume out of them? I read through the information on the Dynamic Bass Boost function in SigmaStudio and it was very vague. Here's a screenshot of what the program looks like right now.
Hello nakuldesai1,
This is a great question and there are so many ways to approach this problem. You hit on two things that I plan to address in videos when I get my head above the waterline and have time to make some new videos.
The first is details on how the Dynamic Bass block works by looking at it on the Audio Precision. For your use I suggest you try a more direct approach. I have a stereo crossover project where I constructed a loudness control in a more direct way by using an index selectable filter set.
This is what I did. First I summed the audio coming in to create a mono signal. I also added a battery level signal with the plan to be able to lower the bass levels if the battery charge gets low. The plan would be to stretch the battery time. You can remove this. Here is the first part of this project:
You can see that the audio is summed and then a volume trim to allow you to set the level of where the loudness starts taking effect.
This is fed into an RMS Table which measures the RMS level of the signal and outputs the value in the table at that level.
The table values will be used to select a filter so it needs to be an unsigned integer that is within the range of available filters.
The Loudness alias then goes here:
You can see I put in a switch so I could manually select a filter with a DC cell for testing. The switch and DC cell would not be needed in a final project.
I also setup the multipliers and Readback so I can see what filter is currently selected. This is good for troubleshooting and again, you could remove it for the final project.
So this gives you total control of what EQ you want in the low end at any level you choose.
You just have to make sure all the table values are within the range of the number of filters. In this case I have 19 filters so you have to keep the input in the range of 0 to 18.
I usually use an odd number of filters so I can have one exactly in the middle that is flat and then go up or down from there. Again, it is fully up to you how you do this. You may want to make filter 0 be flat and then filters above that would reduce the low end.
This is what I did in the project:
I wanted to be able to boost the low end when the volume is low, ( a true loudness feature) and then lower the low end when the battery is low or in your case you could do that when the volume it high. You can make it flat for the middle range of levels. The RMS table is a great feature.
Here is the project but keep in mind this is not a complete project. It is a work in progress.
1030.Stereo 2-way Speaker Project.dspproj
Here is a spreadsheet I did to help me develop the values for the RMS table.
column A is the RMS level input that will select that line in the table. Keep in mind that I placed a volume control before the table so I can adjust this range to be whatever I want but there will always be 3dB difference between each line. If the table input is -90dB then the first element will be selected but if you add gain of let's say 10dB then it will be -80dB that will select that line.
Then I have one column for 32.0 which is for the Sigma300 processors and one column for 28.0 which is the Sigma100 processors like the ADAU1701.
Have fun with all this!
Dave T
Thank you Dave! I'll give this a try.
Hi Dave, I'm still having a bit of trouble with this project. How did you end up finding the values that correspond to each filter? I added in the RMS table but by default, the values are at 1. I tried connecting a level detector to the table to see if it would fill in the values for me but it didn't. What am I missing here?