packages feed

hsignal 0.2.3 → 0.2.3.1

raw patch · 5 files changed

+74/−3 lines, 5 files

Files

CHANGES view
@@ -95,3 +95,6 @@  0.2.3: 		added cross covariance and friends++0.2.3.1:+		added cross spectrum
hsignal.cabal view
@@ -1,5 +1,5 @@ Name:               hsignal-Version:            0.2.3+Version:            0.2.3.1 License:            BSD3 License-file:       LICENSE Copyright:          (c) A.V.H. McPhail 2010, 2011
lib/Numeric/Signal.hs view
@@ -27,9 +27,10 @@                        analytic_signal,analytic_power,analytic_phase,                        unwrap,                        -- * Statistics-                       cross_covariance,cross_correlation,+                       cross_covariance,cross_correlation,cross_spectrum,                        auto_covariance,auto_correlation,                        -- * Preprocessing+                       cumulative_sum,                        detrend,                        resize,                        downsample,@@ -265,6 +266,15 @@ cross_correlation l x y = let (sx,sy,r) = S.cross_covariance_ l x y                           in mapVector (/ (sx*sy)) r +-- | compute the cross spectrum+cross_spectrum :: (S.Filterable a, Double ~ DoubleOf a) =>+                 Int                      -- ^ maximum delay+               -> Vector a                 -- ^ time series+               -> Vector a                 -- ^ time series+               -> Vector (Complex Double)  -- ^ result+cross_spectrum l x y = (\(_,_,c) -> F.fft (complex $ double c)) (cross_covariance l x y)++ -- | auto covariance of two signals --     the auto correlation is computed by dividing the result --     by the variance@@ -282,6 +292,14 @@                  -> Vector a -- ^ result auto_correlation l v = let (var,r) = auto_covariance l v                           in mapVector (/ var) r++-----------------------------------------------------------------------------++-- | cumulative sum of a series+cumulative_sum :: S.Filterable a =>+                 Vector a +               -> Vector a+cumulative_sum = S.cumulative_sum_  ----------------------------------------------------------------------------- 
lib/Numeric/Signal/Internal.hs view
@@ -84,6 +84,9 @@                      -> Vector a       -- ^ time series                      -> Vector a       -- ^ time series                      -> (a,a,Vector a) -- ^ (sd_x,sd_y,cross_covariance)+    -- | the cumulative sum of a signal+    cumulative_sum_ :: Vector a    -- ^ time series+                    -> Vector a    -- ^ result  ----------------------------------------------------------------------------- @@ -137,7 +140,8 @@     unwrap_ = unwrapD     polyEval_ = polyEval     cross_covariance_ = crossCovarianceD-                           +    cumulative_sum_ = cumSumD+ instance Filterable Float where     fromDouble = single     filter_ = filterF@@ -148,6 +152,7 @@     unwrap_ = unwrapF     polyEval_ c = polyEval (double c)     cross_covariance_ = crossCovarianceF+    cumulative_sum_ = cumSumF  ----------------------------------------------------------------------------- @@ -379,6 +384,25 @@ foreign import ccall "signal-aux.h cross_covariance_float"          signal_cross_covariance_float :: CInt -> PF -> PF -> CInt -> PF -> CInt                                        -> PF -> CInt -> PF -> IO CInt++-----------------------------------------------------------------------------++cumSumD :: Vector Double -> Vector Double+cumSumD v = unsafePerformIO $ do+              r <- createVector (dim v)+              app2 signal_cum_sum_double vec v vec r "cumSumD"+              return r++cumSumF :: Vector Float -> Vector Float+cumSumF v = unsafePerformIO $ do+              r <- createVector (dim v)+              app2 signal_cum_sum_float vec v vec r "cumSumF"+              return r++foreign import ccall "signal-aux.h cum_sum_double"+        signal_cum_sum_double :: CInt -> PD -> CInt -> PD -> IO CInt+foreign import ccall "signal-aux.h cum_sum_float"+        signal_cum_sum_float :: CInt -> PF -> CInt -> PF -> IO CInt  ----------------------------------------------------------------------------- 
lib/Numeric/Signal/signal-aux.c view
@@ -426,3 +426,29 @@    return 0; }++int cum_sum_double(int xs, const double* x, int rs, double* r)+{+  int i;++  r[0] = x[0];++  for (i=1;i<xs;i++) {+    r[i] = r[i-1]+x[i];+  }++  return 0;+}++int cum_sum_float(int xs, const float* x, int rs, float* r)+{+  int i;++  r[0] = x[0];++  for (i=1;i<xs;i++) {+    r[i] = r[i-1]+x[i];+  }++  return 0;+}