Sorry for all the noise; the app Numbers was only displaying a limited number of values in the file.
These are the plots with the frequency going up to ~2k, ~5k, and 10k: https://www.dropbox.com/s/oipdannk3e1vqs9/analytic_plot_chirp2244.png?dl=0 https://www.dropbox.com/s/b0ye9amaxbpoej6/analytic_plot_chirp5087.png?dl=0 https://www.dropbox.com/s/0ol7mq8sxt35ihy/analytic_plot_chirp10827.png?dl=0 It seems to be fine until about 2k and then it deviates quite a bit. Cheers, Dario On Fri, 5 Jul 2019 at 15:16, Dario Sanfilippo <sanfilippo.da...@gmail.com> wrote: > I'm sorry, a couple of things are not working in my test. First of all, > the reference signal would be different so I don't it's a good way to test > it. Then it looks like the binary generated with faust2csvplot can output a > limited number of samples: if I run it ./test_hilbert -n 1000000 > > test_hilbert.csv, only about 2^16 samples are written to the file. > > I guess that I could just use the chirp and plot the outputs of the > analytic filter to see how much it deviates from a circle as the frequency > increases. > > Dario > > <http://dariosanfilippo.tumblr.com> > > > On Fri, 5 Jul 2019 at 09:35, Dario Sanfilippo <sanfilippo.da...@gmail.com> > wrote: > >> With that, it's not looking great. I'm cascading two analytic filters >> feeding the first one with the chirp and the second one with the imaginary >> part of the first filter. Then I'm summing the real part of the first >> filter and the imaginary part of the second one. Shouldn't they be shifted >> by 180 degrees? I changed the octaves per second to .5 to having an even >> slower test signal. >> >> This is the error: >> https://www.dropbox.com/s/xtqwvk4ar0daz8c/analytic_plot.png?dl=0. >> >> How else would you test the accuracy? >> >> Dario >> >> >> On Fri, 5 Jul 2019 at 03:14, Julius Smith <j...@ccrma.stanford.edu> wrote: >> >>> Thanks! A more complete test is to feed it a slow chirp: >>> f0 = 20.0; >>> fMax = 0.5 * ma.SR; >>> octavesPerSecond = 1.0; >>> fRatio = 2.0^(octavesPerSecond/ma.SR); >>> chirpFreq = 1-1' : *(f0) : + ~ *(fRatio); >>> freq = min(fMax, chirpFreq); >>> process = os.osccos(freq) : analytic; >>> >>> On Thu, Jul 4, 2019 at 5:13 PM Dario Sanfilippo >>> <sanfilippo.da...@gmail.com> wrote: >>> > >>> > Hello, everybody. >>> > >>> > Here's yet another design to obtain analytic signals, taken from >>> Olli's post: >>> https://dsp.stackexchange.com/questions/37411/iir-hilbert-transformer/59157#59157 >>> . >>> > >>> > analytic(x) = real, >>> > >>> > imaginary >>> > >>> > with { >>> > >>> > re_c = (0.47944111608296202665, 0.87624358989504858020, >>> 0.97660296916871658368, 0.99749940412203375040); >>> > >>> > im_c = (0.16177741706363166219, 0.73306690130335572242, >>> 0.94536301966806279840, 0.99060051416704042460); >>> > >>> > tf(c, y, x) = c*(x+y')-x''; >>> > >>> > real = mem(x) : seq(i, 4, tf(ba.take(i+1, re_c)) >>> > >>> > ~ _); >>> > >>> > imaginary = x : seq(i, 4, tf(ba.take(i+1, im_c)) >>> > >>> > ~ _); >>> > >>> > }; >>> > >>> > >>> > process = os.osccos(1000) : analytic; >>> > >>> > >>> > Attached the outputs plotted as coordinates. It is fairly close to a >>> circle, at least with a 1k cosine. Eventually, I'll try to make a >>> comparison between all the designs. >>> > >>> > Cheers, >>> > Dario >>> > >>> > >>> > >>> > On Sun, 23 Jun 2019 at 23:52, Julius Smith <j...@ccrma.stanford.edu> >>> wrote: >>> >> >>> >> > I interpreted your email as if the new fi.ssbf is always "better" >>> than hilbert = _ <: H(a1)', H(a2) with ... >>> >> >>> >> I did not mean to imply that. You can use whatever bandpass filter >>> >> you want, and that choice should of course be adapted to your >>> >> anticipated input signal(s). If you know the input is a sinusoid at a >>> >> known frequency, for example, then you can get by (perfectly) with a >>> >> quarter-cycle delay at that frequency. Many people use this >>> >> approximation for narrowband signals (such as in microwave >>> >> engineering). >>> >> >>> >> I would strongly object to the name "hilbert" as defined, however, >>> >> because it has two outputs instead of one. >>> >> >>> >> - Julius >>> >> >>> >> On Sun, Jun 23, 2019 at 2:34 PM Julius Smith <j...@ccrma.stanford.edu> >>> wrote: >>> >> > >>> >> > > Agreed, but I was talking about fi.hilbert. Ideally it should >>> turn cos() into sin(), at least according to its name/documentation, not >>> into sin/2. >>> >> > >>> >> > I suppose a name change such as "half_hilbert" could be helpful to >>> >> > avoid confusing "engineering" and "mathematics" definitions of >>> >> > "hilbert". However, I cannot think of a good name. >>> >> > Instead, I suggest we move "hilbert" into a comment in the pospass() >>> >> > doc (see latest filters.lib). >>> >> > >>> >> > As you pointed out earlier, no finite-order filter can be The >>> Hilbert >>> >> > Transform. Even being sampled in time makes that impossible. >>> >> > Therefore, avoiding the name entirely makes good sense. However, >>> note >>> >> > that there are few complaints about "Fast Fourier Transform", which >>> is >>> >> > not the Fourier Transform, and FFTs are similarly (un)scaled >>> according >>> >> > to engineering principles (avoid gain terms until they are required >>> in >>> >> > the application). >>> >> > >>> >> > - Julius >>> >> > >>> >> > On Sun, Jun 23, 2019 at 8:30 AM Oleg Nesterov <o...@redhat.com> >>> wrote: >>> >> > > >>> >> > > On 06/22, Julius Smith wrote: >>> >> > > > >>> >> > > > Maybe clearer now? See latest filter.lib. >>> >> > > >>> >> > > Thanks, the new doc matches my understanding ;) >>> >> > > >>> >> > > > 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. >>> >> > > >>> >> > > Agreed, but I was talking about fi.hilbert. Ideally it should >>> turn cos() >>> >> > > into sin(), at least according to its name/documentation, not >>> into sin/2. >>> >> > > >>> >> > > > None of these filters is ideal. By considering lowpass, >>> pospass, >>> >> > > > hilbert, etc., in Faust, you are considering practical filters, >>> >> > > > nothing ideal. >>> >> > > >>> >> > > Of course. But as for fi.hilbert, I simply can't imagine any >>> practical >>> >> > > usage of it... >>> >> > > >>> >> > > >>> >> > > And in fact there was another reason why I was confused. I >>> interpreted >>> >> > > your email as if the new fi.ssbf is always "better" than >>> >> > > >>> >> > > hilbert = _ <: H(a1)', H(a2) with { >>> >> > > a1 = 0.6923878, 0.9360654322959, 0.9882295226860 >>> , 0.9987488452737; >>> >> > > a2 = 0.4021921162426, 0.8561710882420, >>> 0.9722909545651, 0.9952884791278; >>> >> > > H_sect(a) = f ~ _ with { f(y, x) = a^2 * (x + y') >>> - x''; }; >>> >> > > H(as) = seq(i, outputs(as), H_sect(ba.take(i+1, >>> as))); >>> >> > > }; >>> >> > > >>> >> > > I showed to Dario, at least for frequency shifting. AFAICS, this >>> is not >>> >> > > necessarily true, this depends. Consider the naive >>> implementations, >>> >> > > >>> >> > > freq_shift_yehar(f) = hilbert : *(os.oscrc(f)) - >>> *(os.oscrs(f)); >>> >> > > >>> >> > > and >>> >> > > >>> >> > > freq_shift_ssbf(f) = fi.ssbf(8) : *(os.oscrc(f)) - >>> *(os.oscrs(f)); >>> >> > > >>> >> > > iiuc the first one will work "better" unless the input frequency >>> is "close" >>> >> > > to SR/4. >>> >> > > >>> >> > > Right? >>> >> > > >>> >> > > 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/ >>> >>> >>> >>> -- >>> >>> 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