module DSP.Basic where
import DSP.Source.Basic (zeros)
import Data.Array (Array, Ix, listArray, elems)
linspace :: Double -> Double -> Int -> [Double]
linspace :: Double -> Double -> Int -> [Double]
linspace Double
a Double
b Int
n =
forall a b. (a -> b) -> [a] -> [b]
map (\ Int
i -> Double
a forall a. Num a => a -> a -> a
+ (forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
i) forall a. Num a => a -> a -> a
* Double
inc) [(Int
0::Int) .. (Int
n forall a. Num a => a -> a -> a
- Int
1)]
where
inc :: Double
inc = (Double
b forall a. Num a => a -> a -> a
- Double
a) forall a. Fractional a => a -> a -> a
/ (forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int
n forall a. Num a => a -> a -> a
- Int
1))
logspace :: Double -> Double -> Int -> [Double]
logspace :: Double -> Double -> Int -> [Double]
logspace Double
a Double
b Int
n =
forall a b. (a -> b) -> [a] -> [b]
map (\ Double
x -> Double
10.0 forall a. Floating a => a -> a -> a
** Double
x) forall a b. (a -> b) -> a -> b
$ Double -> Double -> Int -> [Double]
linspace Double
a Double
b Int
n
delay1 :: (Num a) => [a] -> [a]
delay1 :: forall a. Num a => [a] -> [a]
delay1 [a]
a = a
0 forall a. a -> [a] -> [a]
: [a]
a
delay :: (Num a) => Int -> [a] -> [a]
delay :: forall a. Num a => Int -> [a] -> [a]
delay Int
n [a]
a = forall a. Int -> a -> [a]
replicate Int
n a
0 forall a. [a] -> [a] -> [a]
++ [a]
a
downsample :: Int -> [a] -> [a]
downsample :: forall a. Int -> [a] -> [a]
downsample Int
n =
forall a b. (a -> b) -> [a] -> [b]
map forall a. [a] -> a
head forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
takeWhile (Bool -> Bool
not forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) a. Foldable t => t a -> Bool
null) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> a) -> a -> [a]
iterate (forall a. Int -> [a] -> [a]
drop Int
n)
downsampleRec :: Int -> [a] -> [a]
downsampleRec :: forall a. Int -> [a] -> [a]
downsampleRec Int
_ [] = []
downsampleRec Int
n (a
x:[a]
xs) = a
x forall a. a -> [a] -> [a]
: forall a. Int -> [a] -> [a]
downsample Int
n (forall a. Int -> [a] -> [a]
drop (Int
n forall a. Num a => a -> a -> a
- Int
1) [a]
xs)
upsample :: (Num a) => Int -> [a] -> [a]
upsample :: forall a. Num a => Int -> [a] -> [a]
upsample Int
n = forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap (forall a. a -> [a] -> [a]
: forall a. Int -> a -> [a]
replicate (Int
nforall a. Num a => a -> a -> a
-Int
1) a
0)
upsampleRec :: (Num a) => Int -> [a] -> [a]
upsampleRec :: forall a. Num a => Int -> [a] -> [a]
upsampleRec Int
_ [] = []
upsampleRec Int
n (a
x:[a]
xs) = a
x forall a. a -> [a] -> [a]
: forall {t} {a}. (Eq t, Num t, Num a) => t -> [a] -> [a]
zero Int
n [a]
xs
where zero :: t -> [a] -> [a]
zero t
1 [a]
ys = forall a. Num a => Int -> [a] -> [a]
upsample Int
n [a]
ys
zero t
i [a]
ys = a
0 forall a. a -> [a] -> [a]
: t -> [a] -> [a]
zero (t
iforall a. Num a => a -> a -> a
-t
1) [a]
ys
upsampleAndHold :: Int -> [a] -> [a]
upsampleAndHold :: forall a. Int -> [a] -> [a]
upsampleAndHold Int
n = forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap (forall a. Int -> a -> [a]
replicate Int
n)
interleave :: [a] -> [a] -> [a]
interleave :: forall a. [a] -> [a] -> [a]
interleave (a
e:[a]
es) (a
o:[a]
os) = a
e forall a. a -> [a] -> [a]
: a
o forall a. a -> [a] -> [a]
: forall a. [a] -> [a] -> [a]
interleave [a]
es [a]
os
interleave [a]
_ [a]
_ = []
uninterleave :: [a] -> ([a],[a])
uninterleave :: forall a. [a] -> ([a], [a])
uninterleave = forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\a
x ~([a]
xs,[a]
ys) -> (a
xforall a. a -> [a] -> [a]
:[a]
ys,[a]
xs)) ([],[])
pad :: (Ix a, Integral a, Num b) => Array a b -> a -> Array a b
pad :: forall a b.
(Ix a, Integral a, Num b) =>
Array a b -> a -> Array a b
pad Array a b
x a
n = forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (a
0,a
nforall a. Num a => a -> a -> a
-a
1) forall a b. (a -> b) -> a -> b
$ forall i e. Array i e -> [e]
elems Array a b
x forall a. [a] -> [a] -> [a]
++ forall a. Num a => [a]
zeros
toMaybe :: Bool -> a -> Maybe a
toMaybe :: forall a. Bool -> a -> Maybe a
toMaybe Bool
False a
_ = forall a. Maybe a
Nothing
toMaybe Bool
True a
x = forall a. a -> Maybe a
Just a
x
norm2sqr :: Num a => (a,a) -> a
norm2sqr :: forall a. Num a => (a, a) -> a
norm2sqr (a
x,a
y) = a
xforall a. Num a => a -> Int -> a
^!Int
2 forall a. Num a => a -> a -> a
+ a
yforall a. Num a => a -> Int -> a
^!Int
2
infixr 8 ^!
(^!) :: Num a => a -> Int -> a
^! :: forall a. Num a => a -> Int -> a
(^!) a
x Int
n = a
xforall a b. (Num a, Integral b) => a -> b -> a
^Int
n