IIR (Peak) - JUCE vs Nigel Implementation


trying to compare IIR filter of JUCE vs the one by Nigel (i.e. earlevel implementation).

Peak filter.
JUCE with q = 1.0, peak = juce::Decibels::decibelsToGain(40.0):

They looks pretty the same. But when I reduce the gain (value 21.5, same q) here’s the result:

Very different, keeping the same q.
Both use Transposed Direct Form II, so I don’t understand where is the difference.

Can you help me to understand why they differs changing the gain, using the same form?


There are a couple of different typical design methods for peak EQs that differ in how the actual Q of the filter scales with gain.

There’s basically three types (omitting the asymmetrical flavor for simplicity):

  • “Engineering Q”: Q factor is constant, leading to a constant “bandwidth” around the peak
  • “Proportional Q”: Q factor increases proportionally with gain, leading to a constant BW around the “skirt”
  • “Hybrid”: a mixture of both, where Q factor increases with half gain

The first one looks like engineering Q, the second one is likely proportional Q.

Edit: there’s a nice overview in the Sonnox Oxford EQ manual:

1 Like

First one is JUCE, the later is Nigel.

I see, so its a different method on Peak, even if they are on the same form.

I don’t think I can compensate with q, its just a different beast, that need to be re-implemented (in case you prefer one instead of the other).


Here’s a good read to understand the differences in definition of Q:

In addition, all of these designs will suffer from cramping at high frequencies as a result of the use of the bilinear transform; if you are serious about IIR EQs that’s another thing to look at.

And lastly; be aware that changing IIR filter coefficients over time can cause unstable filters. There are various papers around that describe under what conditions this happens.

EDIT: First one is Nigel, the later is JUCE :slight_smile: