aboutsummaryrefslogtreecommitdiff
path: root/pyecsca/sampling.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyecsca/sampling.py')
-rw-r--r--pyecsca/sampling.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/pyecsca/sampling.py b/pyecsca/sampling.py
new file mode 100644
index 0000000..73e34b5
--- /dev/null
+++ b/pyecsca/sampling.py
@@ -0,0 +1,25 @@
+from copy import copy
+import numpy as np
+from scipy.signal import decimate
+from public import public
+
+from .trace import Trace
+
+
+@public
+def downsample_average(trace: Trace, factor: int = 2) -> Trace:
+ resized = np.resize(trace.samples, len(trace.samples) - (len(trace.samples) % factor))
+ result_samples = resized.reshape(-1, factor).mean(axis=1).astype(trace.samples.dtype)
+ return Trace(copy(trace.title), copy(trace.data), result_samples)
+
+
+@public
+def downsample_pick(trace: Trace, factor: int = 2, offset: int = 0) -> Trace:
+ result_samples = trace.samples[offset::factor].copy()
+ return Trace(copy(trace.title), copy(trace.data), result_samples)
+
+
+@public
+def downsample_decimate(trace: Trace, factor: int = 2) -> Trace:
+ result_samples = decimate(trace.samples, factor)
+ return Trace(copy(trace.title), copy(trace.data), result_samples)