rhine-1.0: Functional Reactive Programming with type-level clocks
Safe HaskellSafe-Inferred
LanguageHaskell2010

FRP.Rhine.ResamplingBuffer.Interpolation

Description

Interpolation buffers.

Synopsis

Documentation

linear Source #

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.

sinc Source #

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.