> That definitely sounds like "numerical stress" when the cutoff frequency goes very low.
To be more clear, the numerical stress occurs in direct form when the poles get too close together, especially near the unit circle in the z plane. On Sat, Dec 19, 2020 at 1:13 AM Julius Smith <julius.sm...@gmail.com> wrote: > That definitely sounds like "numerical stress" when the cutoff frequency > goes very low. > This happens frequently with lowpass, highpass, and bandpass filters. > > fi.highpass is implemented using fi.tf2s, which uses a second-order > direct-form filter (fi.tf2 -> fi.iir). > My usual go-to in this situation (after trying double-precision) is > fi.tf2snp, which uses a normalized ladder filter. > It would be interesting to see if svf beats tf2snp! > Note that the normalized ladder requires more multiplies per sample than > direct form, which is why we don't use it until we need it. > I am not familiar with the svf contributions, other than to read the > derivation of them cited in the comments. Looks good! > > - Julius > > On Fri, Dec 18, 2020 at 10:36 PM Alik Rustamoff <alikthen...@gmail.com> > wrote: > >> Today I tested all three. With last two svf filters I don't see any >> difference (I use ardour's built in plugin analyser), no noise. >> The noisy fi.highpass (the first one) becomes closer to them as cutoff >> freq goes higher, but still has different phase characteristics in lowest >> part of it's spectrum (0 to ~20hz) >> >> declare name "nstest"; >> >> >> import("stdfaust.lib"); >> >> import("filtersEOC.lib"); // I put >> https://github.com/grame-cncm/faustlibraries/blob/master/filters.lib#L2611 >> part to this file (which is from EOC library) >> >> >> process(x,y) = x,y : nl(drive, offsetL, fb, f, filter), nl(drive, >> offsetR, fb, f, filter) with{ >> >> nl(drive, offset, fb, f, filter) = (+ : ef.cubicnl(drive, offset)) ~ * >> (fb): ( >> >> _<:(fi.highpass(2, f), f2.svf.hp(f, 1/sqrt(2)), ( f2.svf2blti(f, >> 1/sqrt(2), 1) :ba.selectn(10,1)) ) : ba.selectn(3,filter) >> >> ); >> >> filter = hslider("filter type",0, 0,3,0.5); >> >> f = hslider("HPF freq",50,10,10000,0.01): si.smoo; >> >> fb = hslider("feedback",0,-1,1,0.001); >> >> drive = hslider("drive",0,0,1,0.001); >> >> offsetL = hslider("offsetL",0,-1,1,0.001); >> >> offsetR = hslider("offsetR",0,-1,1,0.001); >> >> } ; >> >> >> >> On Fri, Dec 18, 2020 at 9:10 PM Oleg Nesterov <o...@redhat.com> wrote: >> >>> Hi Dario, >>> >>> this motivated me to look at your library again ;) >>> >>> On 12/18, Alik Rustamoff wrote: >>> > >>> > Hi, Dario, I, btw, ended up using blti filter from your edge of chaos >>> > library. Good collection. No noises just does the job. >>> >>> Then I think that fi.svf.hp() should work equally well. Can you try it? >>> See >>> https://github.com/grame-cncm/faustlibraries/blob/master/filters.lib#L2611 >>> >>> And this probably means that Dario was right, and the problem was caused >>> by quantisation. >>> >>> Because IIUC in theory (and unless you modulate HPFfreq) these 3 filters >>> >>> fi.highpass(2, f) >>> fi.svf.hp(f, 1/sqrt(2)) >>> svf2blti(f, 1/sqrt(2), 1) : ba.selectn(10,1) >>> >>> should have the same transfer function / impulse response. >>> >>> Oleg. >>> >>> _______________________________________________ >> Faudiostream-users mailing list >> Faudiostream-users@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/faudiostream-users >> > > > -- > "Anybody who knows all about nothing knows everything" -- Leonard Susskind > -- "Anybody who knows all about nothing knows everything" -- Leonard Susskind
_______________________________________________ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users