-
Notifications
You must be signed in to change notification settings - Fork 0
/
segmentation.py
73 lines (41 loc) · 1.78 KB
/
segmentation.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
import numpy as np
import scipy.signal as sgn
def segment_signal_va(S, ordenfiltro = 1, vecindad = 1, useacceleration = True, fcorte = 0.5):
"""
Segmentación sobre un grupo de señales pasadas en una lista
"""
tam = S[0].size
h = np.zeros(tam)
b,a = sgn.butter(5, fcorte, 'lowpass', output = 'ba')
for senhal in S:
filtrada = sgn.filtfilt(b, a, senhal)
diff1 = np.append(0, np.diff(filtrada))
h = h +diff1**2
if useacceleration:
diff2 = np.append(0, np.diff(diff1))
h = h + diff2**2
locmin = sgn.argrelextrema(h, np.less, order = vecindad)
return (locmin[0], h)
def segment_signal_fpb(senhal, ordenfiltro = 1, vecindad = 1, fcorte = 0.5):
"""
Segmentación sobre una señal previamente suavizada con un filtro paso bajo
"""
b,a = sgn.butter(5, fcorte, 'lowpass', output = 'ba')
filtrada = sgn.filtfilt(b, a, senhal)
locmin = sgn.argrelextrema(filtrada, np.less, order = vecindad)
return (locmin[0], filtrada)
def filtra_eventos1(eventos, derivada, derivada_menor_que = 1, salto_en_derivada_mayor_que = 10):
eventos2 = np.array([t for t in eventos if derivada[t] < derivada_menor_que])
eventos3 = np.array([eventos2[t] for t in range(eventos2.size-1) if np.amax(derivada[eventos2[t]:eventos2[t+1]])>salto_en_derivada_mayor_que])
return eventos3
def divide_golpes(eventos, sens):
glp = {}
#print(sens)
for k in np.arange(eventos.size-1):
glp.update({k:(eventos[k], eventos[k+1], sens[:, eventos[k]:eventos[k+1]])})
return glp