module Sound.SC3.Common.Math.Window where
type Window x = x -> x
type Table x = [x]
window_table :: (Integral n,Fractional a,Enum a) => n -> Window a -> Table a
window_table n f =
let k = 1 / (fromIntegral n - 1)
in map f [0,k..1]
square :: Num a => a -> a
square x = x * x
gaussian :: Floating a => a -> Window a
gaussian theta i = exp (- (0.5 * square ((i - 0.5) / (theta * 0.5))))
hann :: Floating a => Window a
hann i = 0.5 * (1 - cos (2 * pi * i))
hamming :: Floating a => Window a
hamming i = 0.54 - 0.46 * cos (2 * pi * i)
rectangular :: Window a
rectangular = id
sine :: Floating a => Window a
sine i = sin (i * pi)
triangular :: Fractional a => Window a
triangular i = 2 * (0.5 - abs (i - 0.5))
gaussian_table :: (Integral n, Floating b, Enum b) => n -> b -> [b]
gaussian_table n = window_table n . gaussian
hamming_table :: Int -> [Double]
hamming_table n = window_table n hamming
hann_table :: Int -> [Double]
hann_table n = window_table n hann
sine_table :: (Integral n, Floating b, Enum b) => n -> [b]
sine_table n = window_table n sine
triangular_table :: (Integral n, Fractional b, Enum b) => n -> [b]
triangular_table n = window_table n triangular