On Tue, Jun 10, 2008 at 10:29 AM, cyrille henry cyrille.henry@la-kitchen.fr wrote:
well, i think the tabread4~ interpolation is a lagrange interpolator (but i'm may be wrong). at least with tabread4~, the 1st derivative is not continuous, while it should be with a cubic interpolation.
The Lagrange interpolation scheme is not continuous, because it fits a polynomial through 4 points (-1, 0 ,1 , 2) and interpolates between 0 and 1. But when it goes to the next 4 points (0, 1, 2, 3), it fits another polynomial and interpolates between 1 and 2. So, the discontinuity in 1st derivative is at each sample.
i program a cubic interpolation, and the shape of the waveform is really different.
please compile the object and look at the help patch to see the difference.
i can also send waveforme picture if needed.
I'm having trouble compiling, due to the garray_getfloatwords symbol. Which version of Pd are you using?
I'd like to see the waveform and test it out. Here's my analysis of key points
(a=x[-1], b=x[0], c=x[1], d=x[2])
83 a0 = d - c - a + b; 84 a1 = a - b - a0; 85 a2 = c - a; 86 *out++ = ((a0*frac+a1)*frac+a2)*frac+b;
At frac=0, output should be b. Check!
At frac=1, output should be c
((a0*1+a1)*1+a2)*1+b =a0+a1+a2+b =d-c-a+b + a-b-(d-c-a+b) + c-a + b =d-c-a+b + a-b-d+c+a-b + c-a + b =d-c-a+b + 2a-2b+c-d + c-a + b =c
Check!
1st derivatives:
At frac=0, d/dx f(x) = c-a
(This quantity really ought to be (c-a)/2, but let's see how the rest comes out)
At frac=1,
d/dx f(x) = 3*(d-c-a+b) + 2*(a-b-d+c+a-b) + c-a =d-b
So, we've got 1st derivatives that match between samples. Check!
This looks like a really good plan. I might suggest some new coefficients to try:
a0=(3b-a-3c+d)/2 a1=a-5b/2+2c-d/2 a2=(c-a)/2
The only difference is the 1st derivatives are (c-a)/2 and (d-b)/2, respectively.
Maybe you could try a 5th-degree polynomial next and set the 2nd derivatives for continuity. This would involve 4-points as before, but it might introduce a ripple in the interpolation (cubic interpolation can't do that, since it only has two critical points).
I'm not keen on doing the spectral analysis, because it would take about 4 hours, to do it by hand.
There's something I would like to see (once I can compile it). I made a patch (attached) a while back to view the tabread4~ interpolation function (impulse response). Give it a try if you're inclined to do so, because it might surprise you.
Chuck
cyrille
Chuck
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list