Mercurial Hosting > traffic-intelligence
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