From b0ecd90dd89d254853bd02b4bfe7ca4e9e45860d Mon Sep 17 00:00:00 2001
From: "Mads M. Pedersen" <mmpe@dtu.dk>
Date: Tue, 11 Apr 2017 12:51:17 +0200
Subject: [PATCH] type in differentiation

---
 wetb/signal/filters/_differentiation.py   | 16 +++++++++++++---
 wetb/signal/tests/test_differentiation.py |  2 ++
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/wetb/signal/filters/_differentiation.py b/wetb/signal/filters/_differentiation.py
index 16caa027..94406ca9 100644
--- a/wetb/signal/filters/_differentiation.py
+++ b/wetb/signal/filters/_differentiation.py
@@ -3,15 +3,19 @@ Created on 29. mar. 2017
 
 @author: mmpe
 '''
-from wetb.signal.filters.frq_filters import low_pass
+
 import numpy as np
-def differentiation(x,sample_frq=None, cutoff_frq=None):
+def differentiation(x, type='center', sample_frq=None, cutoff_frq=None):
     """Differentiate the signal
     
     Parameters
     ----------
     x : array_like
         The input signal
+    type : {'right','center','left'}
+        right: change from current to next observation\n
+        center: average change from previous to next observation\n
+        left: change from previous to current observation\n
     sample_frq : int, float or None, optional
         sample frequency of signal (only required if low pass filer is applied)
     cutoff_frq : int, float or None, optional
@@ -30,8 +34,14 @@ def differentiation(x,sample_frq=None, cutoff_frq=None):
             
     if cutoff_frq is not None:
         assert sample_frq is not None, "Argument sample_frq must be set to apply low pass filter"
+        from wetb.signal.filters.frq_filters import low_pass
         x = low_pass(x, sample_frq, cutoff_frq)
     else:
         x = np.array(x) 
-    dy = np.r_[x[1]-x[0], (x[2:]-x[:-2])/2, x[-1]-x[-2]]
+    if type=="left":
+        dy = np.r_[np.nan, x[1:]-x[:-1]]
+    if type=="center": 
+        dy = np.r_[x[1]-x[0], (x[2:]-x[:-2])/2, x[-1]-x[-2]]
+    if type=="right":
+        dy = np.r_[x[1:]-x[:-1], np.nan]
     return dy
\ No newline at end of file
diff --git a/wetb/signal/tests/test_differentiation.py b/wetb/signal/tests/test_differentiation.py
index 87538cdc..3abcdc0f 100644
--- a/wetb/signal/tests/test_differentiation.py
+++ b/wetb/signal/tests/test_differentiation.py
@@ -12,6 +12,8 @@ class Test(unittest.TestCase):
 
     def testDifferentiation(self):
         np.testing.assert_array_equal(differentiation([1,2,1,0,1,1]), [1,0,-1,0,.5,0])
+        np.testing.assert_array_equal(differentiation([1,2,1,0,1,1], 'left'), [np.nan, 1,-1,-1,1,0])
+        np.testing.assert_array_equal(differentiation([1,2,1,0,1,1], 'right'), [1,-1,-1,1,0, np.nan])
         
 
 
-- 
GitLab