Repeticiones y sostenidos
Un ejercicio se cuenta de una de dos maneras, según su kind.
Repeticiones: .reps(low:high:)
Sección titulada «Repeticiones: .reps(low:high:)»El paciente sale del reposo, llega lejos y vuelve. Se usan dos umbrales (histéresis) para que el temblor alrededor de un solo valor no cuente repeticiones falsas:
- Cuando el valor supera
low, empieza un intento. - Durante el intento se guarda el pico, la velocidad, la confianza y las reglas rotas.
- Cuando el valor baja de
low, el intento termina:- si el pico nunca llegó a
high, se ignora (fue un movimiento pequeño); - si llegó, se juzga: limpia →
.repCompleted, con fallas →.repRejected.
- si el pico nunca llegó a
grados high ┤ ╭──╮ ╭─╮ │ ╱ ╲ ╱ ╲ low ┤──────╱──────╲───╭─╮─────╱─────╲──── │ ╱ ╲ ╱ ╲ ╱ ╲ 0 ┼────╯ ╰ ╰─╯ ╰── └─ cuenta ─┘ ignorada └ cuenta ┘Ejemplo: la flexión de codo usa .reps(low: 30, high: 90). Doblar hasta 60° y volver no cuenta; doblar hasta 125° sí, con peak = 125.
Sostenidos: .hold(threshold:seconds:)
Sección titulada «Sostenidos: .hold(threshold:seconds:)»El paciente llega al final del rango y se queda ahí.
- Al superar
thresholdse emite.holdStartedy arranca el reloj. - Si el valor se mueve más de
holdTolerance(5° por defecto) respecto a donde empezó, el reloj se reinicia desde ahí. Así, mientras el paciente sigue subiendo, no se cuenta. - Cuando el valor se mantiene estable
secondssegundos, se juzga el sostenido. Supeakes la mediana de esa ventana, no el máximo, para que un pico suelto no infle el resultado. - El paciente debe volver bajo
thresholdantes del siguiente.
Mientras sostiene, snapshot.holdProgress va de 0 a 1: úsalo para un anillo de progreso.
Suavizado
Sección titulada «Suavizado»Antes de todo, el valor principal se suaviza con una media móvil exponencial:
valor = anterior + smoothing × (crudo − anterior)Con smoothing = 0.5 (por defecto) se eliminan saltos de un fotograma sin agregar retraso notable. 1 desactiva el suavizado. Se configura en MotionSession(exercise:side:smoothing:).
Reglas de forma
Sección titulada «Reglas de forma»Cada FormRule es una medición con un rango permitido. En cada fotograma del intento:
- si la regla no se puede medir (no se ven sus articulaciones), se salta: no se castiga lo que no se ve;
- si se rompe
framesToCuefotogramas seguidos (6, ~0,25 s), se emite.formFaultuna vez por repetición: es la corrección en vivo; - al terminar, si una regla estuvo rota en más de
faultTolerancede los fotogramas (20 %), la repetición se rechaza y la falla aparece enrep.faults.
Así una corrección breve no arruina la repetición, pero hacerla mal la mayor parte del tiempo sí.
Lo que guarda cada repetición
Sección titulada «Lo que guarda cada repetición»| Propiedad | Significado |
|---|---|
peak |
Valor máximo (mediana de la ventana en sostenidos) |
duration |
De reposo a reposo; en sostenidos, el tiempo sostenido |
riseDuration |
Del inicio al pico |
returnDuration |
Del pico de vuelta al reposo (0 en sostenidos) |
peakVelocity |
Velocidad máxima, en grados por segundo |
confidence |
Confianza media del detector, 0…1, o nil |
faults |
Reglas rotas; vacío = limpia (isClean) |
Para ver la consistencia de una serie: session.reps.peakSpread da la desviación estándar de los picos.