Adaptive Loudness

Hi @ All

I found following Adaptive Loudness DSP configuration..

Im ondering if there is a more simple way to create something with the same effect?

I also use a rotary encoder vor volume control - could I also use this one for setting the loudness-effect?

Thanks in advance,

Lu



added a question
[edited by: TheLGMaster at 5:57 PM (GMT 0) on 4 Feb 2020]
Parents
  • 0
    •  Super User 
    on Feb 5, 2020 12:50 PM

         Hello Lu,

         By "simpler," do you mean, "fewer instructions?"  And is your DSP the ADAU1701?  If the answers are "Yes," the circuit below, while appearing more complex than the one you found, saves many instructions.  Here the necessary square-root and reciprocal calculations are preformed implicitly -- a technique taught in high school but soon forgotten since no creative use for it is ever presented.  I could go off on how math is taught generally (maybe write a blog post?), but for now -- to see how it works, see page 8 of the AD636 True RMS -- DC converter data sheet from which this idea came from.  Anyhow, this dynamic loudness thing operates very similarly to the one you have found.  It uses the ADI Loudness block to perform the actual loudness comp filtering.  Because this block also adjusts gain on its own, we must apply an inverse gain to keep the overall gain constant.  This fighting the gain changes ultimately limits the loudness comp's dynamic range to about 35 dB -- don't lower the Hard Clip's lower limit since it won't help.   BTW, the implicit circuit needs all three Feedback blocks as shown -- trying to save with a T junction won't work due to a glitch in the ADAU1701's compiler which hasn't been fixed as of SigmaStudio v. 4.5.

         Another way to provide dynamic loudness compensation is to have the audio level control two General Second-Order Index Selectable Filters.  It's more trouble to implement because you need to input a host of filter curves, but much less work for the DSP.  For an example, please see this post.

         Using the ADI Loudness block with a rotary encoder is actually quite straightforward -- just substitute it for your usual Slew External Volume Control block.  If you wish to make it switchable, place both blocks in your project and select the output of one or the other with a MUX.

         Best regards,

         Bob

    dynamic-1701Loudness-comp-implicit.zip

Reply
  • 0
    •  Super User 
    on Feb 5, 2020 12:50 PM

         Hello Lu,

         By "simpler," do you mean, "fewer instructions?"  And is your DSP the ADAU1701?  If the answers are "Yes," the circuit below, while appearing more complex than the one you found, saves many instructions.  Here the necessary square-root and reciprocal calculations are preformed implicitly -- a technique taught in high school but soon forgotten since no creative use for it is ever presented.  I could go off on how math is taught generally (maybe write a blog post?), but for now -- to see how it works, see page 8 of the AD636 True RMS -- DC converter data sheet from which this idea came from.  Anyhow, this dynamic loudness thing operates very similarly to the one you have found.  It uses the ADI Loudness block to perform the actual loudness comp filtering.  Because this block also adjusts gain on its own, we must apply an inverse gain to keep the overall gain constant.  This fighting the gain changes ultimately limits the loudness comp's dynamic range to about 35 dB -- don't lower the Hard Clip's lower limit since it won't help.   BTW, the implicit circuit needs all three Feedback blocks as shown -- trying to save with a T junction won't work due to a glitch in the ADAU1701's compiler which hasn't been fixed as of SigmaStudio v. 4.5.

         Another way to provide dynamic loudness compensation is to have the audio level control two General Second-Order Index Selectable Filters.  It's more trouble to implement because you need to input a host of filter curves, but much less work for the DSP.  For an example, please see this post.

         Using the ADI Loudness block with a rotary encoder is actually quite straightforward -- just substitute it for your usual Slew External Volume Control block.  If you wish to make it switchable, place both blocks in your project and select the output of one or the other with a MUX.

         Best regards,

         Bob

    dynamic-1701Loudness-comp-implicit.zip

Children