{"id":10339,"date":"2025-07-09T14:29:14","date_gmt":"2025-07-09T12:29:14","guid":{"rendered":"https:\/\/spleeft.app\/?p=10339"},"modified":"2025-07-09T14:30:32","modified_gmt":"2025-07-09T12:30:32","slug":"proyecto-de-ciencia-de-datos-detras-de-spleeft-vbt-ios","status":"publish","type":"post","link":"https:\/\/spleeft.app\/es\/proyecto-de-ciencia-de-datos-detras-de-spleeft-vbt-ios\/","title":{"rendered":"El proyecto de ciencia de datos detr\u00e1s de Spleeft"},"content":{"rendered":"<p>En este art\u00edculo, comparto, desde una perspectiva t\u00e9cnica y reflexiva, el proceso de aprendizaje y desarrollo tras la \u00faltima optimizaci\u00f3n del algoritmo Spleeft. Explicar\u00e9 c\u00f3mo funciona el sistema original, desarrollado hace cuatro a\u00f1os, y c\u00f3mo, durante el \u00faltimo mes, he perfeccionado sus par\u00e1metros para mejorar tanto la precisi\u00f3n como la velocidad de procesamiento.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\"><a href=\"https:\/\/linktr.ee\/spleeftapp\" target=\"_blank\" rel=\"noreferrer noopener\">\u00a1DESCARGA LA APLICACI\u00d3N SPLEEFT AHORA PARA iOS, ANDROID Y APPLE WATCH!<\/a><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfC\u00f3mo funciona el algoritmo?<\/h2>\n\n\n\n<p>El algoritmo Spleeft mide la velocidad vertical integrando datos de aceleraci\u00f3n. La fase conc\u00e9ntrica se detecta mediante umbrales de velocidad m\u00ednima para marcar el inicio y el final de una repetici\u00f3n, y se requiere una velocidad pico m\u00ednima de 0,3 m\/s para validar el movimiento. Esta fase es la m\u00e1s definida y predecible, lo que permite reglas de detecci\u00f3n m\u00e1s precisas.<\/p>\n\n\n\n<p>Para detectar fases estacionarias, esenciales para corregir la deriva acumulada por la integraci\u00f3n, utilizo datos de sensores inerciales: aceler\u00f3metro, giroscopio y gravedad. Una fase se considera estacionaria cuando los valores de estos sensores se mantienen por debajo de ciertos umbrales durante un per\u00edodo de tiempo espec\u00edfico.<\/p>\n\n\n\n<p>Este enfoque metodol\u00f3gico coincide con el utilizado posteriormente por <a href=\"https:\/\/pmc.ncbi.nlm.nih.gov\/articles\/PMC10383699\/\" target=\"_blank\" rel=\"noopener\">Achermann y otros<\/a>. en su <a title=\"Estudio de validaci\u00f3n del Apple Watch para VBT\" href=\"https:\/\/spleeft.app\/validity-reliability-spleeft-apple-watch-iphone\/\" target=\"_blank\" rel=\"noopener\">Estudio de validaci\u00f3n del Apple Watch para medir la velocidad de la barra<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Antecedentes y contexto tecnol\u00f3gico<\/h2>\n\n\n\n<p>En <a href=\"https:\/\/link.springer.com\/article\/10.1007\/s40279-020-01382-w\" target=\"_blank\" rel=\"noopener\">literatura cient\u00edfica<\/a>Tradicionalmente, los aceler\u00f3metros se han considerado menos precisos para medir la velocidad que otras tecnolog\u00edas. Estudios comparativos han demostrado que dispositivos como Beast Sensor o Push Band ofrecen menor precisi\u00f3n que otras soluciones.<\/p>\n\n\n\n<p>Sin embargo, los aceler\u00f3metros son, con diferencia, los sensores m\u00e1s accesibles, ya que est\u00e1n integrados en dispositivos de consumo de uso generalizado, como relojes inteligentes y wearables. Si bien su fiabilidad para m\u00e9tricas como la frecuencia card\u00edaca tambi\u00e9n ha sido cuestionada, su potencial para democratizar el entrenamiento basado en la velocidad (VBT) es innegable.<\/p>\n\n\n\n<p>Cabe destacar que la mayor\u00eda de los estudios comparativos eval\u00faan sistemas completos (hardware + software), sin distinguir entre estos dos componentes. En mi opini\u00f3n, no es justo atribuir la baja precisi\u00f3n \u00fanicamente al hardware. Un aceler\u00f3metro puede proporcionar resultados precisos si se combina con un software bien optimizado y dise\u00f1ado espec\u00edficamente para el tipo de movimiento analizado. Por lo tanto, antes de descartar una tecnolog\u00eda, debemos explorar a fondo sus posibilidades algor\u00edtmicas.<\/p>\n\n\n\n<p>Ya existe suficiente evidencia que respalda el uso de unidades de medici\u00f3n inercial (IMU) para estimar la velocidad de sustentaci\u00f3n. Empresas como Enode o Output han desarrollado algoritmos propios que logran una alta precisi\u00f3n. En el caso del Apple Watch, m\u00faltiples estudios han validado su hardware para esta aplicaci\u00f3n, a pesar de utilizar algoritmos diferentes a los m\u00edos. Esto refuerza la idea de que un algoritmo adecuado puede superar las limitaciones que a menudo se atribuyen \u00fanicamente al hardware.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Limitaciones de las IMU para medir la velocidad<\/h2>\n\n\n\n<p>Estas limitaciones surgen en una cadena. El primer desaf\u00edo es identificar la mejor manera de procesar los datos de los sensores inerciales (aceler\u00f3metro, giroscopio y magnet\u00f3metro) para estimar con precisi\u00f3n la velocidad vertical de una barra.<\/p>\n\n\n\n<p>Uno de los principales problemas es la integraci\u00f3n de la aceleraci\u00f3n. Al integrar mediante el m\u00e9todo trapezoidal (ampliamente utilizado debido a su simplicidad), se producen errores sistem\u00e1ticos conocidos como <strong>deriva<\/strong> Se acumulan con el tiempo. Para compensar esto, es necesario identificar momentos de velocidad cero conocidos, conocidos como fases estacionarias, que permiten corregir la deriva.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Procesamiento de se\u00f1ales para estimar la velocidad vertical<\/h2>\n\n\n\n<p>Los sensores inerciales proporcionan datos en tres ejes espaciales. Sin embargo, no basta con usar directamente el componente vertical del aceler\u00f3metro, ya que este sensor por s\u00ed solo no puede determinar con precisi\u00f3n la direcci\u00f3n de la fuerza medida. Para solucionar esto, utilizo algoritmos de fusi\u00f3n de sensores como Kalman, Mahony y Madgwick, que proporcionan cuaterniones de orientaci\u00f3n para corregir el sistema de referencia del dispositivo.<\/p>\n\n\n\n<p>Proces\u00e9 datos del Apple Watch y del iPhone con diferentes algoritmos de orientaci\u00f3n y los compar\u00e9 con un sistema de captura de movimiento (STT Systems). Seleccion\u00e9 la combinaci\u00f3n que ofrec\u00eda el mejor equilibrio entre precisi\u00f3n y eficiencia computacional en dispositivos m\u00f3viles.<\/p>\n\n\n\n<p>Una vez corregida la orientaci\u00f3n, se integra la aceleraci\u00f3n para obtener la velocidad. Para minimizar a\u00fan m\u00e1s la deriva, prob\u00e9 el uso de un filtro paso bajo, como el <strong>Filtro Butterworth<\/strong>, que se utiliza ampliamente en biomec\u00e1nica.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Actualizaci\u00f3n de velocidad cero (ZUPT)<\/h2>\n\n\n\n<p>Durante las pruebas, descubr\u00ed que el problema principal no era la correcci\u00f3n de la orientaci\u00f3n ni la integraci\u00f3n en s\u00ed, sino la detecci\u00f3n de las fases estacionarias necesarias para aplicar ZUPT. Estas fases deben detectarse de forma r\u00e1pida y fiable, ya que su exactitud afecta directamente a la precisi\u00f3n del sistema.<\/p>\n\n\n\n<p>No existe un \u00fanico m\u00e9todo para lograrlo. Por lo tanto, desarroll\u00e9 un enfoque emp\u00edrico basado en el an\u00e1lisis sistem\u00e1tico de m\u00faltiples combinaciones de par\u00e1metros: qu\u00e9 sensores utilizar, qu\u00e9 valores umbral aplicar y qu\u00e9 ventanas de tiempo considerar.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"586\" src=\"https:\/\/spleeft.app\/wp-content\/uploads\/2025\/06\/Screenshot-2025-06-16-at-13.13.19-1024x586.png\" alt=\"\" class=\"wp-image-10337\" style=\"width:657px;height:auto\" title=\"\" srcset=\"https:\/\/spleeft.app\/wp-content\/uploads\/2025\/06\/Screenshot-2025-06-16-at-13.13.19-1024x586.png 1024w, https:\/\/spleeft.app\/wp-content\/uploads\/2025\/06\/Screenshot-2025-06-16-at-13.13.19-300x172.png 300w, https:\/\/spleeft.app\/wp-content\/uploads\/2025\/06\/Screenshot-2025-06-16-at-13.13.19-18x10.png 18w, https:\/\/spleeft.app\/wp-content\/uploads\/2025\/06\/Screenshot-2025-06-16-at-13.13.19.png 1178w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Velocidad vs. tiempo Datos brutos de Spleeft con deriva y tambi\u00e9n con la actualizaci\u00f3n de velocidad cero funcionando.<\/figcaption><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Optimizaci\u00f3n de algoritmos mediante ciencia de datos<\/h2>\n\n\n\n<p>Con todas las variables definidas, recopil\u00e9 un amplio conjunto de datos de repeticiones en el gimnasio en el laboratorio, almacenando los datos sin procesar de los sensores. Simult\u00e1neamente, utilic\u00e9 un sistema de referencia para la comparaci\u00f3n. Los ejercicios seleccionados fueron: sentadilla con rebote, peso muerto con pausa (conc\u00e9ntrico y exc\u00e9ntrico) y polea dorsal. Todas las series se realizaron con un alto esfuerzo para incluir diversos niveles de fatiga y un descanso m\u00ednimo entre repeticiones.<\/p>\n\n\n\n<p>Esta configuraci\u00f3n me permiti\u00f3 optimizar el algoritmo tanto en precisi\u00f3n como en velocidad, incluso en condiciones con poca o ninguna fase estacionaria entre repeticiones: el escenario m\u00e1s desafiante para los m\u00e9todos basados en integraci\u00f3n.<\/p>\n\n\n\n<p>Cre\u00e9 un script de Python para explorar sistem\u00e1ticamente 13.486 combinaciones de par\u00e1metros:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si se debe aplicar o no un filtro de paso bajo y en qu\u00e9 punto de corte.<\/li>\n\n\n\n<li>Par\u00e1metros ZUPT: umbrales, ventanas de tiempo y combinaciones de sensores.<\/li>\n\n\n\n<li>Umbrales de velocidad m\u00ednima para detecci\u00f3n conc\u00e9ntrica.<\/li>\n<\/ul>\n\n\n\n<p>Tras ejecutar el conjunto de datos completo (lo que me llev\u00f3 varias horas), analic\u00e9 por separado las combinaciones con mejor rendimiento, seg\u00fan el tipo de ejercicio, el rango de velocidad y el tipo de parada. Mi objetivo no solo era encontrar la configuraci\u00f3n con mejor rendimiento, sino tambi\u00e9n comprender mejor el comportamiento del sistema para futuras mejoras.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img decoding=\"async\" width=\"581\" height=\"436\" src=\"https:\/\/spleeft.app\/wp-content\/uploads\/2025\/06\/output2-edited.png\" alt=\"\" class=\"wp-image-10352\" title=\"\" srcset=\"https:\/\/spleeft.app\/wp-content\/uploads\/2025\/06\/output2-edited.png 581w, https:\/\/spleeft.app\/wp-content\/uploads\/2025\/06\/output2-edited-300x225.png 300w, https:\/\/spleeft.app\/wp-content\/uploads\/2025\/06\/output2-edited-16x12.png 16w\" sizes=\"(max-width: 581px) 100vw, 581px\" \/><figcaption class=\"wp-element-caption\">Resultados del script de Python que me ayudaron a identificar los mejores par\u00e1metros para el algoritmo.<\/figcaption><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Pruebas de campo<\/h2>\n\n\n\n<p>Durante la validaci\u00f3n pr\u00e1ctica, descubr\u00ed que el principal obst\u00e1culo era la demora del algoritmo en detectar la fase estacionaria. La respuesta de los usuarios fue clara: el sistema tardaba demasiado en proporcionar la informaci\u00f3n.<\/p>\n\n\n\n<p>Al revisar muchos gr\u00e1ficos de velocidad-tiempo, not\u00e9 que en el <strong>primera repetici\u00f3n<\/strong>Casi no hubo deriva, incluso sin aplicar ZUPT. Esto se debe a que la deriva aumenta con el tiempo. Me pregunt\u00e9: \u00bfes la deriva acumulada lo suficientemente grande como para afectar significativamente la estimaci\u00f3n de la velocidad promedio?<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img decoding=\"async\" width=\"1024\" height=\"633\" src=\"https:\/\/spleeft.app\/wp-content\/uploads\/2025\/06\/Screenshot-2025-06-16-at-21.07.57-1024x633.png\" alt=\"\" class=\"wp-image-10353\" style=\"width:641px;height:auto\" title=\"\" srcset=\"https:\/\/spleeft.app\/wp-content\/uploads\/2025\/06\/Screenshot-2025-06-16-at-21.07.57-1024x633.png 1024w, https:\/\/spleeft.app\/wp-content\/uploads\/2025\/06\/Screenshot-2025-06-16-at-21.07.57-300x186.png 300w, https:\/\/spleeft.app\/wp-content\/uploads\/2025\/06\/Screenshot-2025-06-16-at-21.07.57-18x12.png 18w, https:\/\/spleeft.app\/wp-content\/uploads\/2025\/06\/Screenshot-2025-06-16-at-21.07.57.png 1284w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Datos de velocidad frente a tiempo sin una desviaci\u00f3n significativa entre repeticiones<\/figcaption><\/figure>\n\n\n\n<p>Para responder a esta pregunta, prob\u00e9 sentadillas con una fase exc\u00e9ntrica considerable antes de la conc\u00e9ntrica. Esper\u00e9 una primera fase estacionaria para calibrar el sistema y luego realic\u00e9 repeticiones consecutivas sin pausa. El resultado fue sorprendente: el error promedio fue de solo <strong>0,018 m\/s<\/strong>, y a\u00fan m\u00e1s abajo (<strong>0,016 m\/s<\/strong>) en la \u00faltima validaci\u00f3n. La diferencia con el valor corregido fue m\u00ednima, pero el tiempo de respuesta mejor\u00f3 dr\u00e1sticamente, de 800 ms a 200 ms. Esto permiti\u00f3 obtener retroalimentaci\u00f3n. <strong>inmediatamente despu\u00e9s<\/strong> la fase conc\u00e9ntrica, en lugar de segundos despu\u00e9s.<\/p>\n\n\n\n<p>Aun as\u00ed, el algoritmo ZUPT permanece activo. Al detectar una nueva fase estacionaria, la se\u00f1al se recalibra y se corrige cualquier error acumulado. Si se produce m\u00e1s de una repetici\u00f3n entre fases estacionarias, los valores corregidos sobrescriben la retroalimentaci\u00f3n inicial para garantizar que el usuario siempre reciba el resultado m\u00e1s preciso.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusi\u00f3n<\/h3>\n\n\n\n<p>Este proyecto basado en datos me permiti\u00f3 optimizar significativamente el algoritmo Spleeft. Reduje con \u00e9xito el tiempo de respuesta para la estimaci\u00f3n de la velocidad promedio sin comprometer la fiabilidad confirmada en validaciones anteriores. La clave fue combinar la recopilaci\u00f3n sistem\u00e1tica de datos con una exploraci\u00f3n exhaustiva de par\u00e1metros, entendiendo que la calidad del resultado final depende no solo del hardware, sino quiz\u00e1s a\u00fan m\u00e1s del software que lo sustenta.<\/p>\n\n\n\n<\/div>\n<div style=\"display: flex; flex-wrap: wrap; align-items: center; justify-content: center; padding: 20px; margin: 20px 0; border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9;\">\n\n<!-- Foto del Autor -->\n<div style=\"flex: 0 0 100px; height: 100px; border-radius: 50%; overflow: hidden; margin-right: 20px;\"><img decoding=\"async\" style=\"width: 100%; height: 100%; object-fit: cover;\" src=\"https:\/\/spleeft.app\/wp-content\/uploads\/2022\/05\/d19fb150-ce63-4121-9e2e-c0f192ce37f6_.jpg\" alt=\"Iv\u00e1n de Lucas Rogero\" title=\"\"><\/div>\n<!-- Informaci\u00f3n del Autor -->\n<div style=\"flex: 1; text-align: left;\">\n<h3 style=\"margin: 0; font-size: 20px; font-weight: bold; color: #333;\"><a style=\"text-decoration: none; color: inherit;\" href=\"https:\/\/spleeft.app\/about\/\" target=\"_blank\">Iv\u00e1n de Lucas Rogero<\/a><\/h3>\n<p style=\"margin: 5px 0; font-size: 14px; color: #666;\">Aplicaci\u00f3n de rendimiento f\u00edsico y CEO de MSC<\/p>\n<p style=\"margin: 5px 0; font-size: 14px; color: #333;\">Dedicado a mejorar el rendimiento atl\u00e9tico y el entrenamiento ciclista, combinando ciencia y tecnolog\u00eda para impulsar resultados.<\/p>\n<!-- Enlaces Importantes -->\n<div><a style=\"text-decoration: none; color: #007bff; margin-right: 10px;\" href=\"https:\/\/www.entrenamientociclismo.com\/ivan-de-lucas\" rel=\"author noopener\" target=\"_blank\">Entrenamiento Ciclismo<\/a> <a style=\"text-decoration: none; color: #007bff; margin-right: 10px;\" href=\"https:\/\/www.linkedin.com\/in\/iv%C3%A1n-de-lucas-rogero-b34680178\/\" rel=\"nofollow noopener\" target=\"_blank\">LinkedIn<\/a> <a style=\"text-decoration: none; color: #007bff; margin-right: 10px;\" href=\"https:\/\/medium.com\/@ivandelucasrogero\" rel=\"nofollow noopener\" target=\"_blank\">Medium<\/a> <a style=\"text-decoration: none; color: #007bff;\" href=\"https:\/\/x.com\/Ivvy_dlr\" rel=\"nofollow\" target=\"_blank\">Twitter<\/a><\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>En este art\u00edculo, comparto, desde una perspectiva t\u00e9cnica y reflexiva, el proceso de aprendizaje y desarrollo detr\u00e1s de la \u00faltima optimizaci\u00f3n del algoritmo Spleeft. Explicar\u00e9 c\u00f3mo funciona el sistema original, desarrollado hace cuatro a\u00f1os, y c\u00f3mo, durante el \u00faltimo mes, he perfeccionado sus par\u00e1metros para mejorar tanto la precisi\u00f3n como la velocidad de procesamiento. DESCARGAR\u2026 <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/spleeft.app\/es\/proyecto-de-ciencia-de-datos-detras-de-spleeft-vbt-ios\/\" class=\"more-link\">Leer m\u00e1s<span class=\"screen-reader-text\"> El proyecto de ciencia de datos detr\u00e1s de Spleeft<\/span><\/a><\/p>","protected":false},"author":1,"featured_media":10480,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[142,19],"tags":[],"class_list":["post-10339","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-case-studies","category-validation"],"_links":{"self":[{"href":"https:\/\/spleeft.app\/es\/wp-json\/wp\/v2\/posts\/10339","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spleeft.app\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spleeft.app\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spleeft.app\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spleeft.app\/es\/wp-json\/wp\/v2\/comments?post=10339"}],"version-history":[{"count":0,"href":"https:\/\/spleeft.app\/es\/wp-json\/wp\/v2\/posts\/10339\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/spleeft.app\/es\/wp-json\/wp\/v2\/media\/10480"}],"wp:attachment":[{"href":"https:\/\/spleeft.app\/es\/wp-json\/wp\/v2\/media?parent=10339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spleeft.app\/es\/wp-json\/wp\/v2\/categories?post=10339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spleeft.app\/es\/wp-json\/wp\/v2\/tags?post=10339"}],"curies":[{"name":"gracias","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}