hsignal 0.1.3 → 0.1.3.2
raw patch · 3 files changed
+26/−22 lines, 3 filesdep −base-unicode-symbolsdep ~basePVP ok
version bump matches the API change (PVP)
Dependencies removed: base-unicode-symbols
Dependency ranges changed: base
API changes (from Hackage documentation)
Files
- CHANGES +6/−0
- hsignal.cabal +2/−3
- lib/Numeric/Signal.hs +18/−19
CHANGES view
@@ -51,3 +51,9 @@ 0.1.3: Add Float versions of some functions++0.1.3.1:+ change base to >= 4++0.1.3.2:+ remove unicode symbols
hsignal.cabal view
@@ -1,5 +1,5 @@ Name: hsignal-Version: 0.1.3+Version: 0.1.3.2 License: BSD3 License-file: LICENSE Author: Vivian McPhail@@ -32,11 +32,10 @@ library - Build-Depends: base >= 3 && < 5,+ Build-Depends: base >= 4 && < 5, mtl, array, bytestring, storable-complex, binary,- base-unicode-symbols, hmatrix >= 0.10.0.0, hmatrix-gsl-stats >= 0.1.2.6, hstatistics >= 0.2.2.5
lib/Numeric/Signal.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE UnicodeSyntax #-} ----------------------------------------------------------------------------- -- | -- Module : Numeric.Signal@@ -59,7 +58,7 @@ -- | filters the signal filter :: (S.Filterable a) - ⇒ Vector a -- ^ zero coefficients+ => Vector a -- ^ zero coefficients -> Vector a -- ^ pole coefficients -> Int -- ^ sampling rate -> Vector a -- ^ input signal@@ -89,7 +88,7 @@ ----------------------------------------------------------------------------- -- | a broadband FIR-broadband_fir :: (S.Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) ⇒+broadband_fir :: (S.Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) => Int -- ^ sampling rate -> (Int,Int) -- ^ (lower,upper) frequency cutoff -> Vector a -- ^ filter coefficients @@ -104,7 +103,7 @@ -- | a broadband filter broadband_filter :: (S.Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) - ⇒ Int -- ^ sampling rate+ => Int -- ^ sampling rate -> (Int,Int) -- ^ (lower,upper) frequency cutoff -> Vector a -- ^ input signal -> Vector a -- ^ output signal@@ -115,7 +114,7 @@ -- | standard FIR filter -- | FIR filter with grid a power of 2 greater than the order, ramp = grid/16, hamming window-standard_fir :: (S.Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) ⇒ +standard_fir :: (S.Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) => Int -> [(a,a)] -> Vector a standard_fir o be = let grid = calc_grid o trans = grid `div` 16@@ -128,7 +127,7 @@ -- | produce an FIR filter fir :: (S.Filterable a- , Container Vector (Complex a), Convert (Complex a), Double ~ DoubleOf a) ⇒+ , Container Vector (Complex a), Convert (Complex a), Double ~ DoubleOf a) => Int -- ^ order (one less than the length of the filter) -> [(a,a)] -- ^ band edge frequency, nondecreasing, [0, f1, ..., f(n-1), 1] -- ^ band edge magnitude@@ -154,24 +153,24 @@ | x > 1.0 = 1.0 | otherwise = x -diff :: S.Filterable a ⇒ a -> [a] -> [a]+diff :: S.Filterable a => a -> [a] -> [a] diff _ [] = [] diff _ [x] = [x] diff inc (x1:x2:xs) | x1 == x2 = (floor_zero $ x1-inc):x1:(ceil_one $ x1+inc):(diff inc (L.filter (/= x2) xs)) | otherwise = x1:(diff inc (x2:xs)) -interpolate :: S.Filterable a ⇒ [a] -> [a] -> [a] -> [a]+interpolate :: S.Filterable a => [a] -> [a] -> [a] -> [a] interpolate _ _ [] = [] interpolate x y (xp:xs) = if xp == 1.0 then ((interpolate'' ((length x)-1) x y xp):(interpolate x y xs)) else ((interpolate' x y xp):(interpolate x y xs)) -interpolate' :: S.Filterable a ⇒ [a] -> [a] -> a -> a+interpolate' :: S.Filterable a => [a] -> [a] -> a -> a interpolate' x y xp = let Just j = L.findIndex (> xp) x in (interpolate'' j x y xp) -interpolate'' :: S.Filterable a ⇒ Int -> [a] -> [a] -> a -> a+interpolate'' :: S.Filterable a => Int -> [a] -> [a] -> a -> a interpolate'' j x y xp = let x0 = x !! (j-1) y0 = y !! (j-1) x1 = x !! j@@ -181,7 +180,7 @@ ----------------------------------------------------------------------------- -- | determine the frequency response of a filter, given a vector of frequencies-freqzF :: (S.Filterable a, Double ~ DoubleOf a, S.Filterable (DoubleOf a)) ⇒ +freqzF :: (S.Filterable a, Double ~ DoubleOf a, S.Filterable (DoubleOf a)) => Vector a -- ^ zero coefficients -> Vector a -- ^ pole coefficients -> Int -- ^ sampling rate @@ -190,7 +189,7 @@ freqzF b a s f = S.freqz b a ((2*pi/(fromIntegral s)) * f) -- | determine the frequency response of a filter, given a number of points and sampling rate-freqzN :: (S.Filterable a, Enum a, Double ~ DoubleOf a) ⇒ +freqzN :: (S.Filterable a, Enum a, Double ~ DoubleOf a) => Vector a -- ^ zero coefficients -> Vector a -- ^ pole coefficients -> Int -- ^ sampling rate@@ -207,12 +206,12 @@ analytic_signal = S.hilbert -- | the power (amplitude^2 = v * (conj c)) of an analytic signal-analytic_power :: S.Filterable a ⇒ Vector (Complex Double) -> Vector a+analytic_power :: S.Filterable a => Vector (Complex Double) -> Vector a analytic_power = S.complex_power_ -- | the phase of an analytic signal analytic_phase :: (S.Filterable a, Container Vector a- ,Double ~ DoubleOf a) ⇒ + ,Double ~ DoubleOf a) => Vector (Complex a) -> Vector a analytic_phase = (uncurry arctan2) . fromComplex @@ -237,27 +236,27 @@ ----------------------------------------------------------------------------- -- | resize the vector to length n by resampling-resize :: S.Filterable a ⇒ Int -> Vector a -> Vector a+resize :: S.Filterable a => Int -> Vector a -> Vector a resize n v = S.downsample_ (dim v `div` n) v ----------------------------------------------------------------------------- -- | coefficients of a Hamming window-hamming :: S.Filterable a ⇒+hamming :: S.Filterable a => Int -- ^ length -> Vector a -- ^ the Hamming coeffficents hamming = S.hamming_ -- | resample, take one sample every n samples in the original-downsample :: S.Filterable a ⇒ Int -> Vector a -> Vector a+downsample :: S.Filterable a => Int -> Vector a -> Vector a downsample = S.downsample_ -- | the difference between consecutive elements of a vector-deriv :: S.Filterable a ⇒ Vector a -> Vector a+deriv :: S.Filterable a => Vector a -> Vector a deriv = S.deriv_ -- | unwrap the phase of signal (input expected to be within (-pi,pi)-unwrap :: S.Filterable a ⇒ Vector a -> Vector a+unwrap :: S.Filterable a => Vector a -> Vector a unwrap = S.unwrap_ -----------------------------------------------------------------------------