Hello everyone,

I’m working on my first audio plugin with Juce for a project which requires spectral weighting (comparable to a vocoder). My questions are rather of theoratical nature then about programming praxis. To perform spectral weighting, I want to implement and compare different types of filter banks with (near) perfect reconstruction. The resolution should be approximately 1/3 octave per band. My first approach was the implementation of a Linkwitz-Riley filter bank, which already works fairly good at the given frequency resolution. I calculate squared butterworth coefficients of even order for all crossovers by using the bilinear transform, where each pair of low pass and high pass should sum up to an all pass. The obtained IIR filters are used to split the signal into the desired frequency bands. At each crossover, it is necessary to apply the sums of all previous crossovers (= all passes) to ensure that the single band signals will remain in phase.

While in the analog case, the perfect reconstruction property holds, it seems, that the digital implementation is mathematically slightly different. For some bandwidths, the summed magnitude response is almost constantly one, which implies near perfect reconstruction. For other bandwidths, there are unacceptable cancellations at certain crossovers and the magnitude response is not constant at all. My first question is related to that problem:

(1) Why is it difficult to program a high resolution Linkwitz-Riley filter bank with the near perfect reconstruction property? I would suspect the phase of beeing problematic in some way. Maybe, it has to do with the frequency warping wich occurs while performing the bilinear transform? The magnitude errors tend to be larger with lower filter orders (at constant bandwidths).

Since I don’t want to be too narrow-minded, I’d like to try some different approaches. The fact, that there are lots of plugins with good performing filter banks implies, that there must be other efficient methods for band splitting. I’m currently looking at the implementation of zero-phase FIR filters as one possible alternative. Hence, my second question:

(2) Could someone recommend me other techniques for implementing such filter banks? Maybe someone can give me a hint, which solutions are beeing preferred for commercial purposes?

I hope, that these questions belong here since they are not directly related to Juce. I’ll appreciate any help!