Hi, Oleg. On Sat, 19 Dec 2020 at 18:58, Oleg Nesterov <o...@redhat.com> wrote:
> On 12/19, Dario Sanfilippo wrote: > > > > > 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. > > > > > > > The IR of the filters with -double is the following, with a 20 Hz CF: > > > > Darios-MBP:edgeofchaos dariosanfilippo1$ ./test_hp -sr 96000 -s 9600 -n 1 > > > > channel 1, channel 2, channel 3 > > -1.4107325142354377e-11, -1.4107325144178732e-11, -1.4107325144183914e-11 > > > > I thought that our SVF filters might have had exactly the same > > calculations, > > Why?? No, the math obviously differs. > Sorry, I was convinced that they were both zero-delay feedback topologies and that they were the same but I was wrong. I was following this text: http://www.willpirkle.com/Downloads/AN-4VirtualAnalogFilters.pdf. With fi.highpass(2, F) I get the following faustbench result: Best value is : 2217.66 with -double -vec -lv 0 -vs 128 But the noise mentioned by Alik seems to be gone with double precision. Julius, would you have a function to calculate the coefficients for fi.tf2snp? Ciao, Dario > > but there's still some difference in the response. > > Of course they differ! although I guess the numbers should be close... > > Let me repeat, IIUC they should be equivalent _IN THEORY_. OK, let me > inspect your implementation of bp filter. maxima code: > > (%i1) E: [ > bp = s1/z + v1, > v1 = hp * g, > v2 = bp * g, > hp = (in - 2 * (1/(2*q)) * s1/z - g * s1/z - s2/z)/(1 + 2 > * (1/(2*q)) * g + g * g), > > lp = s2/z + v2, > > s1 = v1 + bp, > s2 = v2 + lp]$ > > (%i2) solve(E, [bp,v1,v2,hp,lp,s1,s2])$ > > (%i3) facsum(ratsimp(%[1][1])/in,z); > 2 > bp g q z - g q > (%o3) ── = > ──────────────────────────────────────────────────────── > in 2 2 2 > (g q + q + g) z + 2 (g - 1) (g + 1) q z + g q + q > - g > > > Now, lets do the same with svf.bp: > > > (%i1) S1: ic1eq = 2*v1 - ic1eq/z $ > (%i2) S2: ic2eq = 2*v2 - ic2eq/z $ > (%i3) V1: v1 = (ic1eq/z + g *(v0-ic2eq/z)) / gk $ > (%i4) V2: v2 = ic2eq/z + g * v1 $ > (%i5) solve([V1,V2,S1,S2], [v1,v2, ic1eq,ic2eq])$ > (%i6) %[1][1]/v0, gk = (1 + g*(g+1/q))$ > (%i7) facsum(ratsimp(%),z); > 2 > v1 g q z - g q > (%o7) ── = > ──────────────────────────────────────────────────────── > v0 2 2 2 > (g q + q + g) z + 2 (g - 1) (g + 1) q z + g q + q > - g > > See? Both have the _same_ transfer function. But of course, this does > NOT mean that the numerical output should be the same. > > > I used > > Pirkle, > > where can I read it? > > > which text did you use? > > See the comments above svf() in filters.lib: > > https://cytomic.com/files/dsp/SvfLinearTrapOptimised2.pdf > > > If I run faustbench -double on your filter and mine, I get the following > > results: > > > > yours: Best value is : 1176.06 with -double -vec -fun -lv 0 -vs 128 > > mine: Best value is : 1324.58 with -double -vec -fun -lv 0 -vs 64 > > > > If I'm not wrong, a higher value indicates a faster DSP, but that's for > > some specific settings. > > Cough ;) I never used faustbench and I don't know what does it do. > > So I used "faust -a bench.cpp" to compare > > F = 50; > process = svf.hp(F, 1/sqrt(2)); > > with > > F = 50; > process = (svf2blti(F, 1/sqrt(2), 1) : ba.selectn(10,1)); > > svf-bench, 3 runs: > > 66.2247 264.899 MB/s inputs 264.899 MB/s outputs 65.3919 > 38.1911 > 66.1178 264.471 MB/s inputs 264.471 MB/s outputs 65.5512 > 52.7835 > 66.2247 264.899 MB/s inputs 264.899 MB/s outputs 65.5196 > 52.4456 > > blti-bench, 3 runs: > > 56.3024 225.21 MB/s inputs 225.21 MB/s outputs 55.845 > 31.9875 > 56.3799 225.52 MB/s inputs 225.52 MB/s outputs 55.89 > 51.3927 > 56.3799 225.52 MB/s inputs 225.52 MB/s outputs 55.8713 > 30.0734 > > svf looks a bit faster, but I do not know if we can trust the numbers > above. > In any case, I bet they should be close performance-wise. > > Oleg. > > -- Dr Dario Sanfilippo http://dariosanfilippo.com
_______________________________________________ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users