rhine-0.6.0: Functional Reactive Programming with type-level clocks

FRP.Rhine.ResamplingBuffer.Interpolation

Description

Interpolation buffers.

Synopsis

# Documentation

Arguments

 :: (Monad m, Clock m cl1, Clock m cl2, VectorSpace v s, s ~ Diff (Time cl1), s ~ Diff (Time cl2)) => v The initial velocity (derivative of the signal) -> v The initial position -> ResamplingBuffer m cl1 cl2 v v

A simple linear interpolation based on the last calculated position and velocity.

Arguments

 :: (Monad m, Clock m cl1, Clock m cl2, VectorSpace v s, Ord s, Floating s, s ~ Diff (Time cl1), s ~ Diff (Time cl2)) => s The size of the interpolation window (for how long in the past to remember incoming values) -> ResamplingBuffer m cl1 cl2 v v

sinc-Interpolation, or Whittaker-Shannon-Interpolation.

The incoming signal is strictly bandlimited by the frequency at which cl1 ticks. Each incoming value is hulled in a sinc function, these are added and sampled at cl2's ticks. In order not to produce a space leak, the buffer only remembers the past values within a given window, which should be chosen much larger than the average time between cl1's ticks.

cubic :: (Monad m, VectorSpace v s, Floating v, Eq v, s ~ Diff (Time cl1), s ~ Diff (Time cl2)) => ResamplingBuffer m cl1 cl2 v v Source #

Interpolates the signal with Hermite splines, using threePointDerivative.

Caution: In order to calculate the derivatives of the incoming signal, it has to be delayed by two ticks of cl1. In a non-realtime situation, a higher quality is achieved if the ticks of cl2 are delayed by two ticks of cl1.