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
_______________________________________________
Faudiostream-users mailing list
Faudiostream-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/faudiostream-users

Reply via email to