Maybe clearer now? See latest filter.lib. I decided pospass() is a better name than ssbf(). It fits better along with lowpass and highpass, etc.
I presently vote against a scaling by 2, but I am open to arguments. Right now, pospass simply passes only positive frequencies, and hilbert is the imaginary part of pospass. To me this is the simplest view. None of these filters is ideal. By considering lowpass, pospass, hilbert, etc., in Faust, you are considering practical filters, nothing ideal. You can of course compare to ideal when evaluating error and deciding on filter order, etc. - Julius On Sat, Jun 22, 2019 at 4:59 PM Julius Smith <j...@ccrma.stanford.edu> wrote: > > Hi Oleg, > > Yes, I should have addressed Dario - sloppy email reply on my part! > > I will make a pass on the doc, and think about your factor of 2. > > - Julius > > On Sat, Jun 22, 2019 at 9:34 AM Oleg Nesterov <o...@redhat.com> wrote: > > > > Hi Julius, > > > > sorry for late reply, I was busy and didn't read emails from this list. > > > > On 06/17, Julius Smith wrote: > > > > > > Hi Oleg, > > > > > > I just now added a hilbert filter to filters.lib, and (probably what > > > you really want) ssbf > > > > Me? ;) > > > > Heh. I know almost nothing about digital filters, to the point I don't even > > know the terminology. Plus I forgot all the math I studied a long ago. > > > > So it was not easy to me to understand what fi.ssbf does and how it works. > > But what I absolutely fail to understand is the new fi.hilbert filter. It > > simply makes no sense to me, could you please explain? > > > > ------------------------------------------------------------------------- > > So iiuc we have the "complex" (c,s) osscillator running at ma.SR/4 frequency > > and > > > > ssbf = _,0 > > : si.cmul(c,-s) // *conj(c,s), shift the spectrum by -SR/4 > > : LPF(SR/4) // remove the negative part > > : si.cmul(c,s); // shift it back by SR/4 > > > > OK, but how this > > > > // The Hilbert transform creates the imaginary part of an > > // "analytic signal" $x(n)+j y(n)$ from its real part $x(n)$. > > // > > hilbert = ssbf : !,_; > > > > can work? > > > > Unless LPF above is ideal. And even if it was ideal, I think the correct > > definition would be > > > > hilbert = ssbf : !,*(2); > > > > no? > > > > But it is not ideal, so I simply can't understand how/why this "hilbert" can > > be used. > > > > Suppose that LPF above has FR(f) frequency response. To simplify, suppose > > that > > FR(f) = 0 if f > SR/4. Then afaics > > > > cos(2*pi*F * t) : hilbert; > > > > will output > > > > abs(FR(SR/4 - F))/2 * sin(2*pi*F*t - arg(FR(SR/4 - F))); > > > > even if LPF is "flat", how can we avoid the phase error == arg(FR(SR/4 - > > F)) ? > > > > Thanks, > > > > Oleg. > > > > > > > -- > > Julius O. Smith III <j...@ccrma.stanford.edu> > Professor of Music and, by courtesy, Electrical Engineering > CCRMA, Stanford University > http://ccrma.stanford.edu/~jos/ -- Julius O. Smith III <j...@ccrma.stanford.edu> Professor of Music and, by courtesy, Electrical Engineering CCRMA, Stanford University http://ccrma.stanford.edu/~jos/ _______________________________________________ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users