DSPRelated.com
Forums

Developing multiband compressor: where do I go wrong?

Started by mp_n...@yahoo.com May 5, 2008
Hi,

I'm currently developing a multiband compressor having three bands. I didn't find much info on the internet regarding multiband compressors implementation details, but this is what I did:
- feed signal into each band's FIR filter;
- the output of each filter goes into each band's singleband compressor;
- the three filtered/compressed signals mix together and go into a final singleband compressor that acts more like a limiter;

The good part is that no mater how much I pre-gain, the final output will not get distorted (less than 0.01% overall). The bad part is that if I pre-gain a lot, the output spectral image is highly altered.

Somehow, logically, this makes sense:
- suppose you pump in signal having boundaries from -100 to +100 in 64bit float (+20db);
- suppose each band's compressor is configured to act as limiters: threshold:0db, ratio:inf, attack:0ms, release:1000ms;
- obviously, no matter how much signal will cross through band compressors, the output of each will not exceed -1..+1 values (or will very rarely);
- now, when I mix again the signals from the three compressed bands, each band will have equal contribution in energy and this turns out to be a great problem; imagine how the output would sound if the high band would filter from 12khz to 20khz -> extremly boosted treble.

I tried to overcome this issue by applying an attenuation for each band's threshold. The attenuation factor is computed to be proportional with band width. This way a band that contributes with less width would also contribute less in the output signal. Pretty fair, but still didn't fix the problem completely.

Further I applied log scale to frequency. The results are better, but the problem still persists and it's quite noticeable.
So my questions are:
- did I miss something important about multiband compressors?
- is there something special about signal distribution in multiband compressors that I should know?
- did I go wrong anywhere in the whole picture described above?

Regards,
Alex
Hello Alex,

Maybe you should use the Fletcher-Munson curve and calcul a different
gain level to apply on each band separately. An easier way is to apply
that curve like an eq on your result when you mix bands together. This
should give you better sound.

I see you use a 12khz to 20khz filter for high frequencies. I think it
is to high just for one of the tree bands. A larger band like 4KHz to
20KHz should be better...

Generaly I use 0Hz->500Hz/500Hz->4KHz/4KHz->20KHz for a tree
multibands compressor. But can I suggest you to add possibility to
change that frequencies to be able to adjust frequencies with your
ears ;-)

Regards,

Matthieu
--- In a..., mp_nova_2004@... wrote:
>
> Hi,
>
> I'm currently developing a multiband compressor having three bands.
I didn't find much info on the internet regarding multiband
compressors implementation details, but this is what I did:
> - feed signal into each band's FIR filter;
> - the output of each filter goes into each band's singleband
compressor;
> - the three filtered/compressed signals mix together and go into a
final singleband compressor that acts more like a limiter;
>
> The good part is that no mater how much I pre-gain, the final output
will not get distorted (less than 0.01% overall). The bad part is that
if I pre-gain a lot, the output spectral image is highly altered.
>
> Somehow, logically, this makes sense:
> - suppose you pump in signal having boundaries from -100 to +100
in 64bit float (+20db);
> - suppose each band's compressor is configured to act as limiters:
threshold:0db, ratio:inf, attack:0ms, release:1000ms;
> - obviously, no matter how much signal will cross through band
compressors, the output of each will not exceed -1..+1 values (or will
very rarely);
> - now, when I mix again the signals from the three compressed
bands, each band will have equal contribution in energy and this turns
out to be a great problem; imagine how the output would sound if the
high band would filter from 12khz to 20khz -> extremly boosted treble.
>
> I tried to overcome this issue by applying an attenuation for each
band's threshold. The attenuation factor is computed to be
proportional with band width. This way a band that contributes with
less width would also contribute less in the output signal. Pretty
fair, but still didn't fix the problem completely.
>
> Further I applied log scale to frequency. The results are better,
but the problem still persists and it's quite noticeable.
> So my questions are:
> - did I miss something important about multiband compressors?
> - is there something special about signal distribution in
multiband compressors that I should know?
> - did I go wrong anywhere in the whole picture described above?
>
> Regards,
> Alex
>
Hi,

No, I didn't say I use a 12khz to 20khz filter for high frequencies. I said "imagine how the output would sound if the high band would filter from 12khz to 20khz" - it was just an example to emphasize my problem. And yes, I have floating cross-points for bands. In the beginning I wanted to apply the Fletcher-Munson curve, but at that time I didn't think it was a good ideea. There was also the problem that I didn't find a way to generate the curve.. Do you know how to do it? Use interpolation points? And besides that, the curve is not 1-dimensional, as it has different shapes at different intensities. Any ideea how to deal with this?

Regards,
Alex.

Hi,
>
>I'm currently developing a multiband compressor having three bands. I didn't find much info on the internet regarding multiband compressors implementation details, but this is what I did:
> - feed signal into each band's FIR filter;
> - the output of each filter goes into each band's singleband compressor;
> - the three filtered/compressed signals mix together and go into a final singleband compressor that acts more like a limiter;
>
>The good part is that no mater how much I pre-gain, the final output will not get distorted (less than 0.01% overall). The bad part is that if I pre-gain a lot, the output spectral image is highly altered.
>
>Somehow, logically, this makes sense:
> - suppose you pump in signal having boundaries from -100 to +100 in 64bit float (+20db);
> - suppose each band's compressor is configured to act as limiters: threshold:0db, ratio:inf, attack:0ms, release:1000ms;
> - obviously, no matter how much signal will cross through band compressors, the output of each will not exceed -1..+1 values (or will very rarely);
> - now, when I mix again the signals from the three compressed bands, each band will have equal contribution in energy and this turns out to be a great problem; imagine how the output would sound if the high band would filter from 12khz to 20khz -> extremly boosted treble.
>
>I tried to overcome this issue by applying an attenuation for each band's threshold. The attenuation factor is computed to be proportional with band width. This way a band that contributes with less width would also contribute less in the output signal. Pretty fair, but still didn't fix the problem completely.
>
>Further I applied log scale to frequency. The results are better, but the problem still persists and it's quite noticeable.
>So my questions are:
> - did I miss something important about multiband compressors?
> - is there something special about signal distribution in multiband compressors that I should know?
> - did I go wrong anywhere in the whole picture described above?
>
>Regards,
> Alex
>
Hi,

I am not a specialist, but I suppose you can easily find or create a reference 2d tab with the "main" curve points, and I'm sure you can interpolate points if you need.
But finally, it is just similar to apply some frequencies filtering/eq on signal for each band of compression with that tab as reference.
Maybe you should simply add an eq on each compressor band output?

[reference tab for gain/frenquency]
|
|
v
|->1st band comp -> bass eq |
input signal-> |->2d band comp -> middle eq | -> output signal
|->3d band comp -> treeble eq |

Another way is to apply gain reduction or amplification on frequencies, with the invert of the Fletcher-Munson curve. (For each comp band)

[reference tab for gain/frequency]
|
|
v
|-> bass eq^-1 ->1st band comp |
input signal-> |-> middle eq^-1 ->2d band comp | -> output signal
|-> treeble eq^-1 ->3d band comp |

I hope it can help you ;-)
Regards,
Matthieu

Hi,
>
>I'm currently developing a multiband compressor having three bands. I didn't find much info on the internet regarding multiband compressors implementation details, but this is what I did:
> - feed signal into each band's FIR filter;
> - the output of each filter goes into each band's singleband compressor;
> - the three filtered/compressed signals mix together and go into a final singleband compressor that acts more like a limiter;
>
>The good part is that no mater how much I pre-gain, the final output will not get distorted (less than 0.01% overall). The bad part is that if I pre-gain a lot, the output spectral image is highly altered.
>
>Somehow, logically, this makes sense:
> - suppose you pump in signal having boundaries from -100 to +100 in 64bit float (+20db);
> - suppose each band's compressor is configured to act as limiters: threshold:0db, ratio:inf, attack:0ms, release:1000ms;
> - obviously, no matter how much signal will cross through band compressors, the output of each will not exceed -1..+1 values (or will very rarely);
> - now, when I mix again the signals from the three compressed bands, each band will have equal contribution in energy and this turns out to be a great problem; imagine how the output would sound if the high band would filter from 12khz to 20khz -> extremly boosted treble.
>
>I tried to overcome this issue by applying an attenuation for each band's threshold. The attenuation factor is computed to be proportional with band width. This way a band that contributes with less width would also contribute less in the output signal. Pretty fair, but still didn't fix the problem completely.
>
>Further I applied log scale to frequency. The results are better, but the problem still persists and it's quite noticeable.
>So my questions are:
> - did I miss something important about multiband compressors?
> - is there something special about signal distribution in multiband compressors that I should know?
> - did I go wrong anywhere in the whole picture described above?
>
>Regards,
> Alex
>