summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <daniel.friesel@uos.de>2021-01-15 13:21:08 +0100
committerDaniel Friesel <daniel.friesel@uos.de>2021-01-15 13:21:08 +0100
commit5cd0a0e6f3245fb3dd3156cd0d96cb18c3c2d242 (patch)
tree9f01781f3bf845ed98c808534f8ca8cbc8f97be3
parent1977a4a0b0c2c76b534c7966aff3be62d811195b (diff)
PELT: examine raw data, add stretch option
-rwxr-xr-xbin/msp430-etv22
1 files changed, 18 insertions, 4 deletions
diff --git a/bin/msp430-etv b/bin/msp430-etv
index 5ad506d..e39bfc8 100755
--- a/bin/msp430-etv
+++ b/bin/msp430-etv
@@ -75,13 +75,21 @@ def PELT_get_changepoints(algo, penalty):
class PELT:
- def __init__(self, signal, num_samples=None):
+ def __init__(self, signal, num_samples=None, stretch=1):
self.signal = signal
self.model = "l1"
self.jump = 1
- self.min_dist = 46
+ self.min_dist = 1
+ self.stretch = stretch
+
+ if stretch != 1:
+ self.signal = np.interp(
+ np.linspace(0, len(signal) - 1, (len(signal) - 1) * stretch + 1),
+ np.arange(len(signal)),
+ self.signal,
+ )
- if num_samples is not None:
+ if num_samples:
self.ds_factor = len(signal) // num_samples
else:
self.ds_factor = 1
@@ -109,6 +117,7 @@ class PELT:
queue.append((algo, i))
with Pool() as pool:
changepoints = pool.starmap(PELT_get_changepoints, queue)
+
changepoints_by_penalty = dict()
for res in changepoints:
changepoints_by_penalty[res[0]] = res[1]
@@ -151,6 +160,11 @@ class PELT:
if len(changepoints) and changepoints[-1] == len(self.signal):
changepoints = changepoints[:-1]
+ if self.stretch != 1:
+ changepoints = np.array(
+ np.around(changepoints / self.stretch), dtype=np.int
+ )
+
return changepoints
@@ -201,7 +215,7 @@ def export_json(filename, data=dict()):
def detect_changepoints(timestamps, trace, num_samples):
- pelt = PELT(running_mean(trace, 10), num_samples=num_samples)
+ pelt = PELT(trace, num_samples=num_samples)
changepoints = pelt.get_changepoints()
prev = 0
ret = list()