Sigma Dynamic Bass compression table
Hi All,
I am trying to use the dynamic bass feature, having it programmed by an MCU. Calculations are pretty clear due to KJBob magic calculation sheet for this particular function, however this sheet have been built to calculate 32 values (-96db to 0db, 128bytes?), but using this feature with ADAU1466, it have 160 bytes to write to table which means i have about 120db spectrum((160/4)*3), right? Instead of the 96db spectrum in the calculation sheet.
Now editing the schema is fairly easy to do, but, i do not know the lower limit and/or upper limit of the table.. Either would do, does any one else know the answer of this?
Other compressors usually reveals theyre upper and lower limit in xml sheet generated which is perfect.
Greetings,
Stian
Audio Signal Processors
bass
sigmastudio
SigmaDSP Audio Processors
dynamic
adau1466
Show More
Hello Stian,
I found my earlier post with the spreadsheet and unfortunately, I can't remember how I had figured it. However, from experimenting with the Capture Window once more, it appears that for the Sigma 300/350 DSPs, the table runs from -100 dB to +20 dB. You'll need to do some experimenting to see if this works for you.
It would surely be great if ADI could document the parameters for uC control of all blocks instead of having us reverse-engineering them one at a time.
Best regards,
Bob
Hello,
There are 40 values in the table from -96 to +21 in 3 dB steps. The Matlab below calculates the table values:
GaindB = 6;
ThreshHi = -5;
ThreshLo = -25;
Ratio = 3;
min_linear = 10^(ThreshHi/20);
for i = 1:40
db(i) = 3 * (i-1) - 96;
gain_db(i) = -GaindB;
if (db(i) > ThreshLo)
gain_db(i) = -GaindB + (Ratio - 1.0) * (db(i) - ThreshLo);
end
if (gain_db(i) > 20.0)
gain_db(i) = 20.0;
end
table_linear(i) = 10^(gain_db(i)/20);
if (table_linear(i) > (1.0 / min_linear))
table_linear(i) = (1.0 / min_linear);
end
end
Thanks for your responses, KJBob and bitmechanic
In my application, i use c++, so incase anyone else in future are doing the same, the calculations i have now used are following;
struct bb{
uint16_t tableLen;
double compRatio; // Compressor Ratio
double boost; // Compressor Boost
int highThreshold; // Compressor High Threshold
int lowThreshold; // Compressor Low Threshold
int lowerLimit = -96; // Compressor Lower Limit
float* table; // Generated Compression Table
} pbb[8];
double corner1 = pow( 10.0, -pbb[idx].boost / 20.0 );
double corner2 = pow( 10.0, -pbb[idx].highThreshold / 20.0 );
double cornerEffect = (pbb[idx].compRatio-1)/6;
for( int kk = 0; kk < pbb[idx].tableLen; kk++ )
pbb[idx].table[kk] = pbb[idx].lowerLimit + (kk*3) < pbb[idx].lowThreshold ? corner1 : min(corner2, corner1*pow(2, cornerEffect*(pbb[idx].lowerLimit + (kk*3)-pbb[idx].lowThreshold)));
Please log in to reply.