Stephane,

I wrote this email right after our short discussion on slack.com but
somehow I forgot to send it.

So I don't really know how to compare this filter with the existing
filters forms in filters.lib, but please see the simple, stupid and
"non-scientific" test below.

Note! all 3 band-pass filters bp(fi.tf2s, F,Q), bp(fi.tf2snp,F,Q) and
svf.bp(F,Q) have the same impulse responce for any F/Q.

However they differ if F or/and Q is modulated, this is what this test
tries to demonstrate, note that the 3rd output has a much more flat
envelope. See http://people.redhat.com/onestero/svf/output.png

Oleg.

-------------------------------------------------------------------------------
import("stdfaust.lib");

F = 1000 + 200*os.oscrs(50);
Q = 2;

process = os.oscrs(F)
        <: bp(fi.tf2s, F,Q), bp(fi.tf2snp,F,Q), svf.bp(F,Q)
        // separate the outputs to make the difference more clear
        : par(i, 3, -(5*i));

bp(t2s, F,Q) = t2s(b2,b1,b0,a1,a0,wc)
with {
        wc = 2*ma.PI*F;
        a1 = 1/Q;
        a0 = 1;
        b2 = 0;
        b1 = 1;
        b0 = 0;
};

svf = environment {
        svf(T,F,Q,G) = tick ~ (_,_) : !,!,si.dot(3, mix)
        with {
                tick(ic1eq, ic2eq, v0) =
                        2*v1 - ic1eq,
                        2*v2 - ic2eq,
                        v0, v1, v2
                with {
                        v1 = ic1eq + g *(v0-ic2eq) : /(1 + g*(g+k));
                        v2 = ic2eq + g * v1;
                };

                A = pow(10.0, G / 40.0);

                g = tan(F * ma.PI / ma.SR) : case {
                        (7) => /(sqrt(A));
                        (8) => *(sqrt(A));
                        (t) => _;
                } (T);

                k = case {
                        (6) => 1/(Q*A);
                        (t) => 1/Q;
                } (T);

                mix = case {
                        (0) => 0, 0, 1;
                        (1) => 0, 1, 0;
                        (2) => 1, -k, -1;
                        (3) => 1, -k, 0;
                        (4) => 1, -k, -2;
                        (5) => 1, -2*k, 0;
                        (6) => 1, k*(A*A-1), 0;
                        (7) => 1, k*(A-1), A*A-1;
                        (8) => A*A, k*(1-A)*A, 1-A*A;
                } (T);
        };

        lp(f,q)         = svf(0, f,q,0);
        bp(f,q)         = svf(1, f,q,0);
        hp(f,q)         = svf(2, f,q,0);
        notch(f,q)      = svf(3, f,q,0);
        peak(f,q)       = svf(4, f,q,0);
        ap(f,q)         = svf(5, f,q,0);
        bell(f,q,g)     = svf(6, f,q,g);
        ls(f,q,g)       = svf(7, f,q,g);
        hs(f,q,g)       = svf(8, f,q,g);
};



_______________________________________________
Faudiostream-users mailing list
Faudiostream-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/faudiostream-users

Reply via email to