Difference between Resonz and BPF

Hi all,

Can anyone tell me the difference between Resonz and BPF? AFAICT they output nearly-but-not-quite identical signals. Just curious.

Eli

s.boot;

(
{
	var sig, bpf, rez;
	sig = PinkNoise.ar(1);
	bpf = BPF.ar(sig, 500, 0.2, 3);
	rez = Resonz.ar(sig, 500, 0.2, 3);
	[sig, bpf, rez, bpf - rez]
}.plot(0.1)
)

According to

K. Steiglitz, “A Note on Constant-Gain Digital Resonators”, Computer Music Journal, vol 18, no. 4, pp. 8-10, Winter 1994*.

The peak gain of the Smith-Angell resonator (Resonz) with zeros at ±1 is independent of resonant frequency if we consider the gain at the true peak, rather than at the pole angle. So is the power gain. Thus the resonator with zeros at ±1 is preferable to the one with zeros at ± √R in three respects: (1) it has truly constant gain as resonant frequency is changed with fixed bandwidth; (2) it has sharper notches in the gain curve at zero and Nyquist frequency; and (3) it requires one fewer multiply per sample.

I would also like to know in practice and sonically what difference this represents…

1 Like

The frequency depency seems to appear when ploting a sweep and toggle to fit the curve range (N)

(
{
	var sig, bpf, rez;
	sig = WhiteNoise.ar(0.5);
	bpf = BPF.ar(sig, XLine.ar(9000,15000,0.1), 0.2, 3);
	rez = Resonz.ar(sig, XLine.ar(9000,15000,0.1), 0.2, 3);
	[sig, bpf, rez, bpf - rez]
}.plot(0.1)
)

But sonically, I could not hear any critical difference (on headphones) between basic cases like:

{BPF.ar(WhiteNoise.ar(0.1), 5000, 0.5)!2}.play
{Resonz.ar(WhiteNoise.ar(0.1), 5000, 0.5)!2}.play

{BPF.ar(WhiteNoise.ar(0.1), SinOsc.ar(1).range(100,15000), 0.2)!2}.play
{Resonz.ar(WhiteNoise.ar(0.1), SinOsc.ar(1).range(100,15000), 0.2)!2}.play

{BPF.ar(WhiteNoise.ar(0.1), SinOsc.ar(1).range(9000,15000), 0.5)!2}.play
{Resonz.ar(WhiteNoise.ar(0.1), SinOsc.ar(1).range(9000,15000), 0.5)!2}.play

I am curious about it as well… maybe it was implemented in order to check practically what the article was proposing…

For the foreseeable future, I am satisfied with the imagined answer that these two UGens are identical for all practical intents and purposes, and that their differences, surely quite subtle, are buried in technical filter jargon which I am not equipped to understand.

1 Like