What does RQ do in RLPF

What does the RQ in a RLPF does? I know what it means in a Band filter (BPF or BRF), but I have no intuition for a RQ in RLPF. Any explanation is very much appreciated!

I can answer this question in general terms, I think. The overall shape of the RLPF response curve is generally the same regardless of the value of rq: minimal gain change below the cutoff frequency, a progressive rolloff above the cutoff frequency. But, by varying the value of rq, you can emphasize content at (or sufficiently near) the cutoff frequency.

When rq is 1, the behavior of RLPF is essentially the same as LPF. As rq approaches zero, you’ll see/hear an increasing gain spike at the cutoff frequency, and an increased sense of resonance at that frequency. Some people will describe the sound of a resonant low pass filter with a high quality (rq close to zero) as “wet” — in part, it’s what helps gives low-pass filtered signals the “wah wah” flavor that you’ll find in dubstep, for example.

Unlike BPF, pushing rq closer to zero actually increases signal gain of RLPF (with BPF, content at the center frequency remains relatively constant as rq moves between 1 and 0), so clipping/distortion can be a common issue. You may need to scale the level down by adjusting mul, using a limiter, etc.

s.boot;

FreqScope.new;

(
{
	var sig, cutoff, rq;
	// mouse near top edge of screen: rq = 0.01
	// mouse near bottom edge of screen: rq = 1
	rq = MouseY.kr(1, 0.01);
	cutoff = LFTri.kr(0.2, 3).exprange(200, 2000);
	sig = Saw.ar(40!2, 0.1);
	sig = RLPF.ar(sig, cutoff, rq);
}.play;
)
1 Like

If you have the wslib quark, it’s possible to plot it interactively for BLowPass (though not for RLPF).

(
var label = { |text, width = 80|
	StaticText().string_(text).fixedWidth_(width)
};
var hslider = { Slider().orientation_(\horizontal) };

var freq, rq, fnum, rqnum, graph, update;

var fspec = \freq.asSpec;
var rqspec = [1.414, 0.01, \exp].asSpec;

w = Window("rq", Rect(800, 200, 500, 400)).front;

w.layout = VLayout(
	HLayout(
		label.("freq"),
		freq = hslider.(),
		fnum = label.("")
	),
	HLayout(
		label.("rq"),
		rq = hslider.(),
		rqnum = label.("")
	),
	graph = MultiSliderView()
);

graph.drawLines_(true).drawRects_(false).elasticMode_(true);

update = {
	var f = fspec.map(freq.value),
	r = rqspec.map(rq.value);

	graph.value = BLowPass.magResponse(512, 44100, f, r) * 0.4;
	fnum.string = f.round(0.01).asString;
	rqnum.string = r.round(0.01).asString;
};

freq.action = update;
rq.action = update;

freq.value = 0.5;
update.value;
)

(One small correction – with rq = 1, there is a slight amount of resonance. It’s actually when Q = 1/sqrt(2) = sqrt(1/2), and rq then = sqrt(2) ~= 1.414, that there is no resonance, matching LPF.)

hjh

1 Like