hsignal 0.2.7.4 → 0.2.7.5
raw patch · 5 files changed
+44/−42 lines, 5 filesdep ~hmatrixdep ~hmatrix-gsldep ~hmatrix-gsl-statsPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: hmatrix, hmatrix-gsl, hmatrix-gsl-stats, hstatistics
API changes (from Hackage documentation)
- Numeric.Signal: analytic_phase :: (Filterable a, Container Vector a, Double ~ DoubleOf a) => Vector (Complex a) -> Vector a
+ Numeric.Signal: analytic_phase :: (Filterable a) => Vector (Complex a) -> Vector a
- Numeric.Signal: broadband_filter :: (Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) => Int -> (Int, Int) -> Vector a -> Vector a
+ Numeric.Signal: broadband_filter :: (Filterable a, Double ~ DoubleOf a) => Int -> (Int, Int) -> Vector a -> Vector a
- Numeric.Signal: broadband_fir :: (Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) => Int -> (Int, Int) -> Vector a
+ Numeric.Signal: broadband_fir :: (Filterable a, Double ~ DoubleOf a, Convert (Complex a)) => Int -> (Int, Int) -> Vector a
- Numeric.Signal: fir :: (Filterable a, Container Vector (Complex a), Convert (Complex a), Double ~ DoubleOf a) => Int -> [(a, a)] -> Int -> Int -> Vector a -> Vector a
+ Numeric.Signal: fir :: (Filterable a, Convert (Complex a), Double ~ DoubleOf a) => Int -> [(a, a)] -> Int -> Int -> Vector a -> Vector a
- Numeric.Signal: freqzN :: (Filterable a, Enum a, Double ~ DoubleOf a) => Vector a -> Vector a -> Int -> Int -> (Vector a, Vector a)
+ Numeric.Signal: freqzN :: (Filterable a, Double ~ DoubleOf a) => Vector a -> Vector a -> Int -> Int -> (Vector a, Vector a)
- Numeric.Signal: standard_fir :: (Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) => Int -> [(a, a)] -> Vector a
+ Numeric.Signal: standard_fir :: (Filterable a, Double ~ DoubleOf a, Convert (Complex a)) => Int -> [(a, a)] -> Vector a
- Numeric.Signal.Multichannel: filter :: (Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) => (Int, Int) -> Multichannel a -> Multichannel a
+ Numeric.Signal.Multichannel: filter :: (Filterable a, Double ~ DoubleOf a) => (Int, Int) -> Multichannel a -> Multichannel a
Files
- CHANGES +3/−0
- hsignal.cabal +7/−7
- lib/Numeric/Signal.hs +7/−8
- lib/Numeric/Signal/Internal.hs +25/−25
- lib/Numeric/Signal/Multichannel.hs +2/−2
CHANGES view
@@ -142,3 +142,6 @@ 0.2.7.4: Reduce Setup.lhs++0.2.7.5:+ update for hmatrix 0.18
hsignal.cabal view
@@ -1,8 +1,8 @@ Name: hsignal-Version: 0.2.7.4+Version: 0.2.7.5 License: BSD3 License-file: LICENSE-Copyright: (c) A.V.H. McPhail 2010, 2011, 2014, 2015+Copyright: (c) A.V.H. McPhail 2010, 2011, 2014, 2015, 2016 Author: Vivian McPhail Maintainer: haskell.vivian.mcphail <at> gmail <dot> com Stability: provisional@@ -17,7 +17,7 @@ . Feature requests, suggestions, and bug fixes welcome. Category: Math-tested-with: GHC ==7.10.1+tested-with: GHC ==8.0.1 cabal-version: >=1.8 @@ -41,10 +41,10 @@ array, vector, bytestring, storable-complex, binary,- hmatrix >= 0.17,- hmatrix-gsl >= 0.17,- hmatrix-gsl-stats >= 0.4,- hstatistics >= 0.2.5.3+ hmatrix >= 0.18,+ hmatrix-gsl >= 0.18,+ hmatrix-gsl-stats >= 0.4.1.6,+ hstatistics >= 0.2.5.4 Extensions: ForeignFunctionInterface
lib/Numeric/Signal.hs view
@@ -3,7 +3,7 @@ ----------------------------------------------------------------------------- -- | -- Module : Numeric.Signal--- Copyright : (c) Alexander Vivian Hugh McPhail 2010, 2014, 2015+-- Copyright : (c) Alexander Vivian Hugh McPhail 2010, 2014, 2015, 2016 -- License : BSD3 -- -- Maintainer : haskell.vivian.mcphail <at> gmail <dot> com@@ -94,7 +94,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, Convert (Complex a)) => Int -- ^ sampling rate -> (Int,Int) -- ^ (lower,upper) frequency cutoff -> Vector a -- ^ filter coefficients @@ -108,7 +108,7 @@ in standard_fir o be -- | a broadband filter-broadband_filter :: (S.Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) +broadband_filter :: (S.Filterable a, Double ~ DoubleOf a) => Int -- ^ sampling rate -> (Int,Int) -- ^ (lower,upper) frequency cutoff -> Vector a -- ^ input signal@@ -120,7 +120,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, Convert (Complex a)) => Int -> [(a,a)] -> Vector a standard_fir o be = let grid = calc_grid o trans_ = grid `div` 16@@ -133,7 +133,7 @@ -- | produce an FIR filter fir :: (S.Filterable a- , Container Vector (Complex a), Convert (Complex a), Double ~ DoubleOf 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@@ -195,7 +195,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, Double ~ DoubleOf a) => Vector a -- ^ zero coefficients -> Vector a -- ^ pole coefficients -> Int -- ^ sampling rate@@ -216,8 +216,7 @@ analytic_power = S.complex_power_ -- | the phase of an analytic signal-analytic_phase :: (S.Filterable a, Container Vector a- ,Double ~ DoubleOf a) => +analytic_phase :: (S.Filterable a) => Vector (Complex a) -> Vector a analytic_phase = (uncurry arctan2) . fromComplex
lib/Numeric/Signal/Internal.hs view
@@ -4,7 +4,7 @@ ----------------------------------------------------------------------------- -- | -- Module : Numeric.Signal.Internal--- Copyright : (c) Alexander Vivian Hugh McPhail 2010, 2014, 2015+-- Copyright : (c) Alexander Vivian Hugh McPhail 2010, 2014, 2015, 2016 -- License : BSD3 -- -- Maintainer : haskell.vivian.mcphail <at> gmail <dot> com@@ -40,7 +40,7 @@ ----------------------------------------------------------------------------- -infixl 1 #+infixr 1 # a # b = applyRaw a b {-# INLINE (#) #-} @@ -62,7 +62,7 @@ , Convert a, Floating (Vector a), RealElement a , Num a) => Filterable a where- -- | conver from Vector Double+ -- | convert from Vector Double fromDouble :: Vector Double -> Vector a -- b ~ ComplexOf a, Container Vector b, Convert b) => Filterable a where -- | filter a signal@@ -103,7 +103,7 @@ convolve_vector_double c a = unsafePerformIO $ do r <- createVector (size a)- signal_vector_double_convolve # c # a # r #| "signalDoubleConvolve"+ (c # a # r # id) signal_vector_double_convolve #| "signalDoubleConvolve" return r foreign import ccall "signal-aux.h vector_double_convolve" signal_vector_double_convolve :: CInt -> PD -> CInt -> PD -> CInt -> PD -> IO CInt@@ -114,7 +114,7 @@ convolve_vector_float c a = unsafePerformIO $ do r <- createVector (size a)- signal_vector_float_convolve # c # a # r #| "signalFloatConvolve"+ (c # a # r # id ) signal_vector_float_convolve #| "signalFloatConvolve" return r foreign import ccall "signal-aux.h vector_float_convolve" signal_vector_float_convolve :: CInt -> PF -> CInt -> PF -> CInt -> PF -> IO CInt@@ -127,7 +127,7 @@ convolve_vector_complex c a = unsafePerformIO $ do r <- createVector (size a)- signal_vector_complex_convolve # c # a # r #| "signalComplexConvolve"+ (c # a # r # id) signal_vector_complex_convolve #| "signalComplexConvolve" return r foreign import ccall "signal-aux.h vector_complex_convolve" signal_vector_complex_convolve :: CInt -> PC -> CInt -> PC -> CInt -> PC -> IO CInt@@ -170,7 +170,7 @@ -> Vector Double -- ^ output signal filterD l k v = unsafePerformIO $ do r <- createVector (size v)- signal_filter_double # l # k # v # r #| "signalFilter"+ (l # k # v # r # id) signal_filter_double #| "signalFilter" return r foreign import ccall "signal-aux.h filter_double" signal_filter_double :: CInt -> PD -> CInt -> PD -> CInt -> PD -> CInt -> PD -> IO CInt@@ -182,7 +182,7 @@ -> Vector Float -- ^ output signal filterF l k v = unsafePerformIO $ do r <- createVector (size v)- signal_filter_float # l # k # v # r #| "signalFilter"+ (l # k # v # r # id) signal_filter_float #| "signalFilter" return r foreign import ccall "signal-aux.h filter_float" signal_filter_float :: CInt -> PF -> CInt -> PF -> CInt -> PF -> CInt -> PF -> IO CInt@@ -194,7 +194,7 @@ hilbert v = unsafePerformIO $ do let r = complex v -- could use (complex v) to make a complex vector in haskell rather than C- signal_hilbert # r #| "hilbert"+ (r # id) signal_hilbert #| "hilbert" return r foreign import ccall "signal-aux.h hilbert" signal_hilbert :: CInt -> PC -> IO CInt@@ -207,7 +207,7 @@ -> Vector Double -- ^ power density pwelch w v = unsafePerformIO $ do let r = konst 0.0 ((w `div` 2) + 1)- (signal_pwelch $ fromIntegral w) # (complex v) # r #| "pwelch"+ (complex v # r # id) (signal_pwelch $ fromIntegral w) #| "pwelch" return r foreign import ccall "signal-aux.h pwelch" signal_pwelch :: CInt -> CInt -> PC -> CInt -> PD -> IO CInt@@ -221,7 +221,7 @@ | l == 1 = konst 1.0 1 | otherwise = unsafePerformIO $ do r <- createVector l- signal_hamming_double # r #| "Hamming"+ (r # id) signal_hamming_double #| "Hamming" return r foreign import ccall "signal-aux.h hamming_double" signal_hamming_double :: CInt -> PD -> IO CInt@@ -233,7 +233,7 @@ | l == 1 = konst 1.0 1 | otherwise = unsafePerformIO $ do r <- createVector l- signal_hamming_float # r #| "Hamming"+ (r # id) signal_hamming_float #| "Hamming" return r foreign import ccall "signal-aux.h hamming_float" signal_hamming_float :: CInt -> PF -> IO CInt@@ -273,7 +273,7 @@ -> Vector (Complex Double) -- ^ the values polyEval c z = unsafePerformIO $ do r <- createVector (size z)- signal_real_poly_complex_eval # c # z # r #| "polyEval"+ (c # z # r # id) signal_real_poly_complex_eval #| "polyEval" return r foreign import ccall "signal-aux.h real_poly_complex_eval" signal_real_poly_complex_eval :: CInt -> PD -> CInt -> PC -> CInt -> PC -> IO CInt@@ -285,7 +285,7 @@ -> Vector Double -- ^ output complex_powerD v = unsafePerformIO $ do r <- createVector (size v)- signal_complex_power_double # v # r #| "complex_power"+ (v # r # id) signal_complex_power_double #| "complex_power" return r foreign import ccall "signal-aux.h complex_power_double" signal_complex_power_double :: CInt -> PC -> CInt -> PD -> IO CInt@@ -295,7 +295,7 @@ -> Vector Float -- ^ output complex_powerF v = unsafePerformIO $ do r <- createVector (size v)- signal_complex_power_float # v # r #| "complex_power"+ (v # r # id) signal_complex_power_float #| "complex_power" return r foreign import ccall "signal-aux.h complex_power_float" signal_complex_power_float :: CInt -> PC -> CInt -> PF -> IO CInt@@ -306,7 +306,7 @@ downsampleD :: Int -> Vector Double -> Vector Double downsampleD n v = unsafePerformIO $ do r <- createVector (size v `div` n)- (signal_downsample_double $ fromIntegral n) # v # r #| "downsample"+ (v # r # id) (signal_downsample_double $ fromIntegral n) #| "downsample" return r foreign import ccall "signal-aux.h downsample_double" signal_downsample_double :: CInt -> CInt -> PD -> CInt -> PD -> IO CInt@@ -315,7 +315,7 @@ downsampleF :: Int -> Vector Float -> Vector Float downsampleF n v = unsafePerformIO $ do r <- createVector (size v `div` n)- (signal_downsample_float $ fromIntegral n) # v # r #| "downsample"+ (v # r # id) (signal_downsample_float $ fromIntegral n) #| "downsample" return r foreign import ccall "signal-aux.h downsample_float" signal_downsample_float :: CInt -> CInt -> PF -> CInt -> PF -> IO CInt@@ -326,7 +326,7 @@ derivD :: Vector Double -> Vector Double derivD v = unsafePerformIO $ do r <- createVector (size v - 1)- (signal_diff_double) # v # r #| "diff"+ (v # r # id) (signal_diff_double) #| "diff" return r foreign import ccall "signal-aux.h vector_diff_double" signal_diff_double :: CInt -> PD -> CInt -> PD -> IO CInt@@ -335,7 +335,7 @@ derivF :: Vector Float -> Vector Float derivF v = unsafePerformIO $ do r <- createVector (size v - 1)- (signal_diff_float) # v # r #| "diff"+ (v # r # id) (signal_diff_float) #| "diff" return r foreign import ccall "signal-aux.h vector_diff_float" signal_diff_float :: CInt -> PF -> CInt -> PF -> IO CInt@@ -346,7 +346,7 @@ unwrapD :: Vector Double -> Vector Double unwrapD v = unsafePerformIO $ do r <- createVector $ size v- signal_unwrap_double # v # r #| "unwrap"+ (v # r # id) signal_unwrap_double #| "unwrap" return r foreign import ccall "signal-aux.h unwrap_double" signal_unwrap_double :: CInt -> PD -> CInt -> PD -> IO CInt@@ -355,7 +355,7 @@ unwrapF :: Vector Float -> Vector Float unwrapF v = unsafePerformIO $ do r <- createVector $ size v- signal_unwrap_float # v # r #| "unwrap"+ (v # r # id) signal_unwrap_float #| "unwrap" return r foreign import ccall "signal-aux.h unwrap_float" signal_unwrap_float :: CInt -> PF -> CInt -> PF -> IO CInt@@ -368,7 +368,7 @@ r <- createVector (2*l) alloca $ \sx -> alloca $ \sy -> do- (signal_cross_covariance_double (fromIntegral l) sx sy) # x # y # r #| "cross_covariance"+ (x # y # r # id) (signal_cross_covariance_double (fromIntegral l) sx sy) #| "cross_covariance" sx' <- peek sx sy' <- peek sy return (sx',sy',r)@@ -383,7 +383,7 @@ r <- createVector (2*l) alloca $ \sx -> alloca $ \sy -> do- (signal_cross_covariance_float (fromIntegral l) sx sy) # x # y # r #| "cross_covariance"+ (x # y # r # id) (signal_cross_covariance_float (fromIntegral l) sx sy) #| "cross_covariance" sx' <- peek sx sy' <- peek sy return (sx',sy',r)@@ -397,13 +397,13 @@ cumSumD :: Vector Double -> Vector Double cumSumD v = unsafePerformIO $ do r <- createVector (size v)- signal_cum_sum_double # v # r #| "cumSumD"+ (v # r # id) signal_cum_sum_double #| "cumSumD" return r cumSumF :: Vector Float -> Vector Float cumSumF v = unsafePerformIO $ do r <- createVector (size v)- signal_cum_sum_float # v # r #| "cumSumF"+ (v # r # id) signal_cum_sum_float #| "cumSumF" return r foreign import ccall "signal-aux.h cum_sum_double"
lib/Numeric/Signal/Multichannel.hs view
@@ -6,7 +6,7 @@ ----------------------------------------------------------------------------- -- | -- Module : Numeric.Signal.Multichannel--- Copyright : (c) Alexander Vivian Hugh McPhail 2010, 2014, 2015+-- Copyright : (c) Alexander Vivian Hugh McPhail 2010, 2014, 2015, 2016 -- License : BSD3 -- -- Maintainer : haskell.vivian.mcphail <at> gmail <dot> com@@ -312,7 +312,7 @@ -- | filter the data with the given passband-filter :: (S.Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) => +filter :: (S.Filterable a, Double ~ DoubleOf a) => (Int,Int) -> Multichannel a -> Multichannel a filter pb m = let m' = mapConcurrently (S.broadband_filter (_sampling_rate m) pb) m in m' { _filtered = Just pb }