changeset 1195:27a6a7f9b972

adjusting savgol use
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 08 Jul 2022 14:41:36 +0200
parents 756bc885a573
children d5566af60a69
files trafficintelligence/moving.py
diffstat 1 files changed, 15 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/trafficintelligence/moving.py	Thu Jun 30 18:09:20 2022 +0200
+++ b/trafficintelligence/moving.py	Fri Jul 08 14:41:36 2022 +0200
@@ -848,7 +848,7 @@
             diff.addPosition(diff[-1])
         return diff
 
-    def differentiateSG(self, window_length, polyorder, deriv=0, delta=1.0, axis=-1, mode='interp', cval=0.0, nInstantsIgnoredAtEnds = 2):
+    def differentiateSG(self, window_length, polyorder, deriv=0, delta=1.0, axis=-1, mode='nearest', cval=0.0, nInstantsIgnoredAtEnds = 2):
         '''Differentiates the trajectory using the Savitsky Golay filter
 
         window_length : The length of the filter window (i.e. the number of coefficients). window_length must be a positive odd integer.
@@ -862,7 +862,11 @@
         https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.savgol_filter.html#scipy.signal.savgol_filter'''
         filtered = savgol_filter(self.positions, window_length, polyorder, deriv, delta, axis, mode, cval)
         if nInstantsIgnoredAtEnds >=1:
-            filtered = filtered[:,nInstantsIgnoredAtEnds:-nInstantsIgnoredAtEnds]
+            if nInstantsIgnoredAtEnds >= len(speeds)/2:
+                n = int(round(len(speeds)/2))-1
+            else:
+                n = nInstantsIgnoredAtEnds
+            filtered = filtered[:,n:-n]
         return Trajectory(filtered.tolist())
 
     def norm(self):
@@ -1561,19 +1565,20 @@
         else:
             return speeds
 
-    def getAccelerations(self, window_length, polyorder, delta=1.0, axis=-1, mode='interp', cval=0.0, nInstantsIgnoredAtEnds = 0):
+    def getAccelerations(self, window_length, polyorder, delta=1.0, axis=-1, mode='nearest', cval=0.0, nInstantsIgnoredAtEnds = 0):
         '''Returns the 1-D acceleration from the 1-D speeds
         Caution about previously filtered data'''
         speeds = self.getSpeeds()
-        if window_length > len(speeds):
-            wlength = min(window_length, len(speeds))
-            if wlength % 2 == 0:
-                wlength -=1
-        else:
-            wlength = window_length
+        wlength = min(window_length, len(speeds))
+        if wlength % 2 == 0:
+            wlength -=1
         filtered = savgol_filter(speeds, wlength, min(wlength-1, polyorder), 1, delta, axis, mode, cval)
         if nInstantsIgnoredAtEnds >= 1:
-            return filtered[nInstantsIgnoredAtEnds:-nInstantsIgnoredAtEnds]
+            if nInstantsIgnoredAtEnds >= len(speeds)/2:
+                n = int(round(len(speeds)/2))-1
+            else:
+                n = nInstantsIgnoredAtEnds
+            return filtered[n:-n]
         else:
             return filtered