On Sat, Jul 19, 2008 at 10:33 PM, Matt Barber brbrofsvl@gmail.com wrote:
Right -- wouldn't this be equivalent to doing the (defined) interpolation and the anti-aliasing as a filter in one step? You're modulating the interpolating function to include the effects of the appropriate anti-aliasing filter -- like a one-step sample rate converter. Except, the ratio between the source and target rates is variable. Is this an inappropriate way to be thinking about it?
Yes, that's it.
I guess one problem is how "speed" is measured -- do you just use absolute value of the index delta from one sample to the next (what happens when the index is not a linear function of time)? Or could you fill something like a delay line with past index positions and then use those to find speed as a three- or five-point approximation of the first derivative -- this would add a few samples of delay but might give a better estimate of "speed." Sorry to be dense with the questions, but I want to keep up the best I can. =o)
Yes, that's exactly right, also. The input is a sequence of table indexes, so the speed is the first derivative of the input. There is something problematic, when the user wants to jump between different positions in the table. Those instances shouldn't be treated as playing at high speed--it would just be glitchy. I would suggest a look-ahead method to figure out the speed, when there are rapid changes, to avoid having an error.
I've got two basic ideas that I'm playing with. The first is to modify the interpolation function continuously adding a series of "bumps" that are spaced exponentially outward from the original function. If there's some good spectral properties, there could be a way to make a smooth transition and hold the number of calculations to O(log(speed)) instead of O(speed)
My second idea is to replace the points and their derivatives, with filters (low-pass filters for the points and band-pass filters for the derivatives). Then, fit a polynomial as before and interpolate. Like existing schemes, this could be turned into continuous functions for impulse response, which vary as functions of speed.
Any ideas?
Can you give a quick example of the form of each idea?
Not particularly... I'm only working with intuition for the idea so far. It's going to take some insight or inspiration. Do you have any ideas?
In the first, are you adding "bumps" to the interpolator's impulse response? In the second are you saying you would replace a point with the impulse response of a low-pass filter (e.g. in a 5th-degree polynomial with coefficients a0 a1 a2 a3 a4 and a5, instead of matching a0+a1+a2+a3+a4+a5 with y[1] you'd match it with an impulse response centered on y[1])? Would the algebra still be such that you could keep the form for derivatives of the polynomials (in the last example, 2*a2+6*a3+12*a4+20*a5 as the 2nd derivative at y[1]) even though you're matching them with something other than an approximation?
Feeling my way through,
Matt