diff options
author | Daniel Friesel <daniel.friesel@uos.de> | 2021-01-15 13:21:08 +0100 |
---|---|---|
committer | Daniel Friesel <daniel.friesel@uos.de> | 2021-01-15 13:21:08 +0100 |
commit | 5cd0a0e6f3245fb3dd3156cd0d96cb18c3c2d242 (patch) | |
tree | 9f01781f3bf845ed98c808534f8ca8cbc8f97be3 | |
parent | 1977a4a0b0c2c76b534c7966aff3be62d811195b (diff) |
PELT: examine raw data, add stretch option
-rwxr-xr-x | bin/msp430-etv | 22 |
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() |