[PD] fractional delay for PD
Charles Henry
czhenry at gmail.com
Sun Mar 1 07:25:14 CET 2009
On Sat, Feb 28, 2009 at 8:25 PM, David Doukhan <david.doukhan at gmail.com> wrote:
> I don't even know what method have been used in vd~ ...
> The only thing I've read in the corresponding help patch, is that the
> interpolation method used by that component does an interpolation over
> 4 values.
> Does anyone know the name of the method used by that component? It
> would allow me get better clues on its theoretical efficiency, and to
> know if spending some time to program/test some alternative method
> would be usefull...
vd~ appears to use the same 4-point interpolation method as tabread4~,
which is just a cubic polynomial fit through 4 points. Other methods
of finding interpolation polynomials for improved response were
discussed a few months ago in the thread on different tabread4's. Let
me know if you need anything.
Chuck
http://lists.puredata.info/pipermail/pd-list/2008-06/062878.html
http://lists.puredata.info/pipermail/pd-list/2008-06/063256.html
http://lists.puredata.info/pipermail/pd-list/2008-06/063303.html
I did a lot of analysis on the functions, involved.
big math lecture is here:
http://lists.puredata.info/pipermail/pd-list/2008-07/063601.html
tables and transforms:
http://lists.puredata.info/pipermail/pd-list/2008-07/063489.html
Algorithm is here in d_delay.c:
262 while (n--)
263 {
264 t_sample delsamps = x->x_sr * *in++ - zerodel, frac;
265 int idelsamps;
266 t_sample a, b, c, d, cminusb;
267 if (delsamps < 1.00001f) delsamps = 1.00001f;
268 if (delsamps > limit) delsamps = limit;
269 delsamps += fn;
270 fn = fn - 1.0f;
271 idelsamps = delsamps;
272 frac = delsamps - (t_sample)idelsamps;
273 bp = wp - idelsamps;
274 if (bp < vp + 4) bp += nsamps;
275 d = bp[-3];
276 c = bp[-2];
277 b = bp[-1];
278 a = bp[0];
279 cminusb = c-b;
280 *out++ = b + frac * (
281 cminusb - 0.1666667f * (1.-frac) * (
282 (d - a - 3.0f * cminusb) * frac + (d + 2.0f*a - 3.0f*b)
283 )
284 );
285 }
More information about the Pd-list
mailing list