[PAID] Seeking DSP Engineer for Custom IIR Allpass Oversampling (C++/JUCE/MATLAB)

DSP, Plugin and Host development discussion.
Post Reply New Topic
RELATED
PRODUCTS
JC-303

Post

I am looking for an experienced DSP engineer to collaborate on the oversampling engine for a personal EQ plugin project of mine (JUCE/C++).

The task: Implement a IIR Allpass Polyphase Oversampling engine for the current EQ.

Project info:

Architecture: Cascaded IIR Allpass Polyphase structure (minimum-phase behaviour, no pre-ringing).

Factors: Support for 2x, 4x, 8x, and 16x (via cascading).

Quality: I need custom coefficient design (not just standard library values | MATLAB/SciPy verified). Aim around >140dB stopband attenuation and <0.001dB passband ripple.

Verification: Coefficients must be verified via MATLAB/SciPy scripts (which should be provided/documented).

Integration: Must be delivered as clean, modern C++20 compatible with a JUCE project. Potentially (to evaluate) SIMD optimization (SSE/AVX/NEON) as well.

Context: The plugin is inspired by discrete Class-A mastering equalizers: we are hence avoiding linear-phase FIR oversampling to preserve the natural transient response (no pre-ringing).

If you have experience designing high-order polyphase IIR filters and/or can deliver such an implementation, please DM me, thank you

Post

rick22 wrote: Thu Nov 27, 2025 4:15 pm please DM me
Fyi: the private messaging feature is only open to members with 5 posts or more...

Good luck!
We are the KVR collective. Resistance is futile. You will be assimilated. Image
My MusicCalc is served over https!!

Post

thank you, good to know

Post

If I recall correctly there's a pretty straight-forward algorithm for computing these in some appnote(?) somewhere on the web, though I can't for the life of me remember what it might be called exactly.

Personally busy with other stuff, but just want to make two observations:

1. you can also convert FIRs into minimum-phase; whether it's a better design choice "depends" but it's not like FIRs need to necessarily be linear-phase only

2. it is actually minimum-phase designs that will smear transients, because what we hear as "transient" is the relative phase of different frequencies (which minimum-phase filters mess with even at fairly "low" frequencies) and not the pre-ringing that happens very close to Nyquist rate which is supposed to be inaudible anyway (and if it's not, then you got bigger problems)

Now, the minimum-phase smearing might not be audible if you just do a single pass of oversampling, but if I recall correct (having tested this a few years back) it's somewhere around 10-20 passes with a typical filter where it start to be somewhat obvious (well "obvious" might be pushing it, but point is you can pick it in ABX fairly reliably if you know what to listen to) as long as you've got decent studio monitors or headphones (and probably a lot faster in a mastering studio)... where as this is just not an issue with linear-phase at all as long as your ripple and transition specs are tight enough not to spoil an ABX.

ps. For things like EQs where the filter rings at audible frequencies, linear-phase pre-ringing is absolutely a thing to consider.. and "smearing" the phase with minimum-phase can even sound nicer too, but when it comes to transparent oversampling, linear-phase wins the context every time if latency isn't a concern.

Post

I agree with mystan here.
Architecture: Cascaded IIR Allpass Polyphase structure...
Aim around >140dB stopband attenuation and <0.001dB passband ripple.
This will result in audible artefacts. Too many cascaded IIR allpass filters get audible. Clicky sounds will transform to a laser-style "zapp" sound. Not sure if this is intended.

FIR filters are quite efficient when cutoff is close to Nyquist. You can use the minimum phase version. This avoids pre-ringing and reduces latency.
https://www.tone2.com
Our award-winning synthesizers offer true high-end sound quality.

Post

rick22 wrote: Thu Nov 27, 2025 4:15 pm I am looking for an experienced DSP engineer to collaborate on the oversampling engine for a personal EQ plugin project of mine (JUCE/C++).

The task: Implement a IIR Allpass Polyphase Oversampling engine for the current ...
I have to ask, why aren't you using JUCE's inbuilt oversampling classes? I've used them in several commercial products. They're pretty reasonable.

Post

I've just been looking at the Juce one, the cutoff is perfect. It is battle-tested, and the polyphase IIR isn't all that bad with 16x oversampling either, and very minimal latency and phase mess. You probably should just use Juce's.
*edit* although from simple looking at an impulse, the best settings a FIR is factor 2 which is 4 times oversampling. The other factors seem wrong to me, I'd be very surprised if they are incorrect though, I suppose.

Code: Select all

juceOversampler = std::make_unique <juce::dsp::Oversampling<float>>(2,2, juce::dsp::Oversampling<float>::filterHalfBandFIREquiripple, true, false);

Post

+1 on the JUCE built-in oversampling classes. Although, without relaxing the requirements you specified, the phase artefacts will probably be noticeable, and the transients likely won't be preserved.

Post Reply

Return to “DSP and Plugin Development”