From e6316b1f5f954b5b87d9e0164f66460e0828c330 Mon Sep 17 00:00:00 2001
From: "Mads M. Pedersen" <mmpe@dtu.dk>
Date: Fri, 13 Jan 2017 11:34:02 +0100
Subject: [PATCH] added cy_filters.pyx + setup.py thing

---
 setup.py                                 |  3 +-
 wetb/signal_tools/filters/cy_filters.pyx | 59 ++++++++++++++++++++++++
 2 files changed, 61 insertions(+), 1 deletion(-)
 create mode 100644 wetb/signal_tools/filters/cy_filters.pyx

diff --git a/setup.py b/setup.py
index eb4cead..8b4a3a6 100644
--- a/setup.py
+++ b/setup.py
@@ -26,7 +26,8 @@ from Cython.Distutils import build_ext
 
 def setup_package():
 
-    ex_info = [('wetb.fatigue_tools.rainflowcounting', ['pair_range', 'peak_trough', 'rainflowcount_astm'])]
+    ex_info = [('wetb.fatigue_tools.rainflowcounting', ['pair_range', 'peak_trough', 'rainflowcount_astm']),
+			   ('wetb.signal_tools.filters', ['cy_filters'])]
     extlist = [Extension('%s.%s' % (module, n),
                          [os.path.join(module.replace(".","/"), n)+'.pyx'],
                          include_dirs=[np.get_include()]) for module, names in ex_info for n in names]
diff --git a/wetb/signal_tools/filters/cy_filters.pyx b/wetb/signal_tools/filters/cy_filters.pyx
new file mode 100644
index 0000000..28fe4b3
--- /dev/null
+++ b/wetb/signal_tools/filters/cy_filters.pyx
@@ -0,0 +1,59 @@
+import cython
+import numpy as np
+cimport numpy as np
+'''
+Created on 29/05/2013
+
+@author: Mads M. Pedersen (mmpe@dtu.dk)
+'''
+
+
+import cython
+import numpy as np
+cimport numpy as np
+
+
+@cython.ccall
+@cython.locals(alpha=cython.float, i=cython.int)
+cpdef cy_low_pass_filter(np.ndarray[double,ndim=1] inp, double delta_t, double tau):
+    cdef np.ndarray[double,ndim=1] output
+    output = np.empty_like(inp, dtype=np.float)
+    output[0] = inp[0]
+
+    alpha = delta_t / (tau + delta_t)
+    for i in range(1, inp.shape[0]):
+        output[i] = output[i - 1] + alpha * (inp[i] - output[i - 1])  # Same as output[i] = alpha*inp[i]+(1-alpha)*output[i-1]
+
+    return output
+
+cpdef cy_dynamic_low_pass_filter(np.ndarray[double,ndim=1] inp, double delta_t, np.ndarray[double,ndim=1] tau, int method):
+    cdef np.ndarray[double,ndim=1] output, alpha
+    cdef int i
+
+    output = np.empty_like(inp, dtype=np.float)
+    output[0] = inp[0]
+
+    if method == 1:
+        alpha = delta_t / (tau + delta_t)
+        for i in range(1, inp.shape[0]):
+            output[i] = output[i - 1] + alpha[i] * (inp[i] - output[i - 1])  # Same as output[i] = alpha*inp[i]+(1-alpha)*output[i-1]
+    elif method == 2:
+        for i in range(1, inp.shape[0]):
+            output[i] = (delta_t * (inp[i] + inp[i - 1] - output[i - 1]) + 2 * tau[i] * output[i - 1]) / (delta_t + 2 * tau[i])
+    elif method == 3:
+        for i in range(1, inp.shape[0]):
+            output[i] = output[i - 1] * np.exp(-delta_t / tau[i]) + inp[i] * (1 - np.exp(-delta_t / tau[i]))
+    return output
+
+
+@cython.ccall
+@cython.locals(alpha=cython.float, i=cython.int)
+cpdef cy_high_pass_filter(np.ndarray[double,ndim=1] inp, double delta_t, double tau):
+    cdef np.ndarray[double,ndim=1] output
+    output = np.empty_like(inp, dtype=np.float)
+    output[0] = inp[0]
+    alpha = tau / (tau + delta_t)
+    for i in range(1, inp.shape[0]):
+        output[i] = alpha * (output[i - 1] + inp[i] - inp[i - 1])
+
+    return output
-- 
GitLab