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…

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…