{"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":"projeto-de-ciencia-de-dados-por-tras-do-spleft-vbt-ios","status":"publish","type":"post","link":"https:\/\/spleeft.app\/pt\/projeto-de-ciencia-de-dados-por-tras-do-spleft-vbt-ios\/","title":{"rendered":"O Projeto de Ci\u00eancia de Dados por Tr\u00e1s do Spleft"},"content":{"rendered":"<p>Neste artigo, compartilho \u2014 de uma perspectiva t\u00e9cnica e reflexiva \u2014 o processo de aprendizado e desenvolvimento por tr\u00e1s da mais recente otimiza\u00e7\u00e3o do algoritmo Spleeft. Explicarei como o sistema original, desenvolvido h\u00e1 quatro anos, funciona e como, ao longo do \u00faltimo m\u00eas, ajustei seus par\u00e2metros para melhorar tanto a precis\u00e3o quanto a velocidade de processamento.<\/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\">BAIXE O APLICATIVO SPLEEFT AGORA PARA iOS, ANDROID E APPLE WATCH!<\/a><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Como o algoritmo funciona?<\/h2>\n\n\n\n<p>O algoritmo Speeft mede a velocidade vertical integrando dados de acelera\u00e7\u00e3o. A fase conc\u00eantrica \u00e9 detectada usando limites m\u00ednimos de velocidade para marcar o in\u00edcio e o fim de uma repeti\u00e7\u00e3o, e uma velocidade de pico m\u00ednima de 0,3 m\/s \u00e9 necess\u00e1ria para validar o movimento. Esta fase \u00e9 a mais claramente definida e previs\u00edvel, o que permite regras de detec\u00e7\u00e3o mais precisas.<\/p>\n\n\n\n<p>Para detectar fases estacion\u00e1rias \u2014 essenciais para corrigir o desvio acumulado da integra\u00e7\u00e3o \u2014 utilizo dados de sensores inerciais: aceler\u00f4metro, girosc\u00f3pio e gravidade. Uma fase \u00e9 considerada estacion\u00e1ria quando os valores desses sensores permanecem abaixo de certos limites por uma janela de tempo espec\u00edfica.<\/p>\n\n\n\n<p>Esta abordagem metodol\u00f3gica coincide com a que foi posteriormente utilizada por <a href=\"https:\/\/pmc.ncbi.nlm.nih.gov\/articles\/PMC10383699\/\" target=\"_blank\" rel=\"noopener\">Achermann e outros<\/a>. em seus <a title=\"estudo de valida\u00e7\u00e3o do Apple Watch para VBT\" href=\"https:\/\/spleeft.app\/validity-reliability-spleeft-apple-watch-iphone\/\" target=\"_blank\" rel=\"noopener\">estudo de valida\u00e7\u00e3o do Apple Watch para medi\u00e7\u00e3o de velocidade da 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\">Contexto e contexto tecnol\u00f3gico<\/h2>\n\n\n\n<p>Em <a href=\"https:\/\/link.springer.com\/article\/10.1007\/s40279-020-01382-w\" target=\"_blank\" rel=\"noopener\">literatura cient\u00edfica<\/a>, aceler\u00f4metros tradicionalmente s\u00e3o considerados menos precisos para medi\u00e7\u00e3o de velocidade em compara\u00e7\u00e3o com outras tecnologias. Estudos comparativos mostraram que dispositivos como Beast Sensor ou Push Band apresentam menor precis\u00e3o do que outras solu\u00e7\u00f5es.<\/p>\n\n\n\n<p>No entanto, os aceler\u00f4metros s\u00e3o de longe os sensores mais acess\u00edveis, pois s\u00e3o integrados a dispositivos de consumo amplamente utilizados, como smartwatches e wearables. Embora sua confiabilidade para m\u00e9tricas como frequ\u00eancia card\u00edaca tamb\u00e9m tenha sido questionada, seu potencial para democratizar o treinamento baseado em velocidade (VBT) \u00e9 ineg\u00e1vel.<\/p>\n\n\n\n<p>Vale ressaltar que a maioria dos estudos comparativos avalia sistemas completos (hardware + software), sem distinguir entre esses dois componentes. Na minha opini\u00e3o, n\u00e3o \u00e9 justo atribuir a baixa precis\u00e3o apenas ao hardware. Um aceler\u00f4metro pode fornecer resultados precisos se combinado com um software bem otimizado, projetado especificamente para o tipo de movimento analisado. Portanto, antes de descartar uma tecnologia, devemos explorar completamente as possibilidades algor\u00edtmicas que ela oferece.<\/p>\n\n\n\n<p>J\u00e1 existem evid\u00eancias suficientes que apoiam o uso de IMUs (unidades de medida inercial) para estimar a velocidade de eleva\u00e7\u00e3o. Empresas como Enode ou Output desenvolveram algoritmos propriet\u00e1rios que alcan\u00e7am alta precis\u00e3o. No caso do Apple Watch, diversos estudos validaram seu hardware para essa aplica\u00e7\u00e3o, embora tenham usado algoritmos diferentes dos meus. Isso refor\u00e7a a ideia de que um algoritmo apropriado pode superar as limita\u00e7\u00f5es frequentemente atribu\u00eddas apenas ao hardware.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Limita\u00e7\u00f5es das IMUs para medi\u00e7\u00e3o de velocidade<\/h2>\n\n\n\n<p>Essas limita\u00e7\u00f5es surgem em uma cadeia. O primeiro desafio \u00e9 identificar a melhor maneira de processar dados de sensores inerciais \u2014 aceler\u00f4metro, girosc\u00f3pio e magnet\u00f4metro \u2014 para estimar com precis\u00e3o a velocidade vertical de uma barra.<\/p>\n\n\n\n<p>Um dos principais problemas \u00e9 a integra\u00e7\u00e3o da acelera\u00e7\u00e3o. Ao integrar usando o m\u00e9todo trapezoidal (amplamente utilizado devido \u00e0 sua simplicidade), erros sistem\u00e1ticos conhecidos como <strong>deriva<\/strong> acumulam-se ao longo do tempo. Para compensar isso, \u00e9 necess\u00e1rio identificar momentos conhecidos de velocidade zero \u2014 conhecidos como fases estacion\u00e1rias \u2014 que permitem a corre\u00e7\u00e3o da deriva.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Processamento de sinal para estimativa de velocidade vertical<\/h2>\n\n\n\n<p>Sensores inerciais fornecem dados em tr\u00eas eixos espaciais. No entanto, n\u00e3o basta usar diretamente a componente vertical do aceler\u00f4metro, pois este sensor sozinho n\u00e3o consegue determinar com precis\u00e3o a dire\u00e7\u00e3o da for\u00e7a medida. Para resolver isso, utilizo algoritmos de fus\u00e3o de sensores como Kalman, Mahony e Madgwick, que fornecem quat\u00e9rnios de orienta\u00e7\u00e3o para corrigir o referencial do dispositivo.<\/p>\n\n\n\n<p>Processei dados do Apple Watch e do iPhone usando diferentes algoritmos de orienta\u00e7\u00e3o e os comparei com um sistema de captura de movimento (STT Systems). Selecionei a combina\u00e7\u00e3o que oferecia o melhor equil\u00edbrio entre precis\u00e3o e efici\u00eancia computacional em dispositivos m\u00f3veis.<\/p>\n\n\n\n<p>Uma vez corrigida a orienta\u00e7\u00e3o, a acelera\u00e7\u00e3o \u00e9 integrada para obter a velocidade. Para minimizar ainda mais a deriva, testei o uso de um filtro passa-baixa, como o <strong>Filtro Butterworth<\/strong>, que \u00e9 amplamente utilizado em biomec\u00e2nica.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Atualiza\u00e7\u00e3o de Velocidade Zero (ZUPT)<\/h2>\n\n\n\n<p>Durante os testes, descobri que o principal problema n\u00e3o era a corre\u00e7\u00e3o de orienta\u00e7\u00e3o ou a integra\u00e7\u00e3o em si, mas sim a detec\u00e7\u00e3o de fases estacion\u00e1rias necess\u00e1rias para aplicar o ZUPT. Essas fases devem ser detectadas de forma r\u00e1pida e confi\u00e1vel, pois sua precis\u00e3o impacta diretamente a precis\u00e3o do sistema.<\/p>\n\n\n\n<p>N\u00e3o existe um m\u00e9todo \u00fanico para atingir esse objetivo. Por isso, desenvolvi uma abordagem emp\u00edrica baseada na an\u00e1lise sistem\u00e1tica de m\u00faltiplas combina\u00e7\u00f5es de par\u00e2metros: quais sensores usar, quais valores limite aplicar e quais janelas de tempo 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\">Velocidade vs. tempo Dados brutos do Speeft com desvio e tamb\u00e9m com a atualiza\u00e7\u00e3o de velocidade zero 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\">Otimiza\u00e7\u00e3o de algoritmos usando ci\u00eancia de dados<\/h2>\n\n\n\n<p>Com todas as vari\u00e1veis definidas, coletei um grande conjunto de dados de repeti\u00e7\u00f5es de academia no laborat\u00f3rio, armazenando dados brutos de sensores. Simultaneamente, usei um sistema padr\u00e3o-ouro para compara\u00e7\u00e3o. Os exerc\u00edcios selecionados foram: agachamento com rebote, levantamento terra com pausa (conc\u00eantrico e exc\u00eantrico) e polia alta. Todas as s\u00e9ries foram realizadas com alto esfor\u00e7o para incluir v\u00e1rios n\u00edveis de fadiga e descanso m\u00ednimo entre as repeti\u00e7\u00f5es.<\/p>\n\n\n\n<p>Essa configura\u00e7\u00e3o me permitiu otimizar o algoritmo tanto para precis\u00e3o quanto para velocidade, mesmo sob condi\u00e7\u00f5es com pouca ou nenhuma fase estacion\u00e1ria entre repeti\u00e7\u00f5es \u2014 o cen\u00e1rio mais desafiador para m\u00e9todos baseados em integra\u00e7\u00e3o.<\/p>\n\n\n\n<p>Criei um script Python para explorar sistematicamente 13.486 combina\u00e7\u00f5es de par\u00e2metros:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Se deve ou n\u00e3o aplicar um filtro passa-baixa e em qual ponto de corte.<\/li>\n\n\n\n<li>Par\u00e2metros ZUPT: limites, janelas de tempo e combina\u00e7\u00f5es de sensores.<\/li>\n\n\n\n<li>Limiares m\u00ednimos de velocidade para detec\u00e7\u00e3o conc\u00eantrica.<\/li>\n<\/ul>\n\n\n\n<p>Depois de executar o conjunto de dados completo (o que levou v\u00e1rias horas), analisei as combina\u00e7\u00f5es de melhor desempenho separadamente, com base no tipo de exerc\u00edcio, na faixa de velocidade e no tipo de parada. Meu objetivo n\u00e3o era apenas encontrar a configura\u00e7\u00e3o de melhor desempenho, mas tamb\u00e9m entender melhor o comportamento do sistema para futuras melhorias.<\/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\">Sa\u00eddas do script Python que me ajudaram a identificar os melhores par\u00e2metros para o 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\">Teste de campo<\/h2>\n\n\n\n<p>Durante a valida\u00e7\u00e3o pr\u00e1tica, descobri que o principal gargalo era o atraso do algoritmo em detectar a fase estacion\u00e1ria. O feedback do usu\u00e1rio foi claro: o sistema demorava muito para fornecer o feedback.<\/p>\n\n\n\n<p>Ao revisar muitos gr\u00e1ficos de velocidade-tempo, percebi que no <strong>primeira repeti\u00e7\u00e3o<\/strong>, quase n\u00e3o houve desvio \u2014 mesmo sem aplicar o ZUPT. Isso ocorre porque o desvio aumenta com o tempo. Eu me perguntei: o desvio acumulado \u00e9 grande o suficiente para afetar significativamente a estimativa da velocidade m\u00e9dia?<\/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\">Dados de velocidade versus tempo sem desvio significativo entre repeti\u00e7\u00f5es<\/figcaption><\/figure>\n\n\n\n<p>Para responder a isso, testei agachamentos com uma fase exc\u00eantrica substancial antes da conc\u00eantrica. Esperei por uma primeira fase estacion\u00e1ria para calibrar o sistema e, em seguida, realizei repeti\u00e7\u00f5es consecutivas sem pausa. O resultado foi surpreendente: o erro m\u00e9dio foi de apenas <strong>0,018 m\/s<\/strong>, e ainda mais baixo (<strong>0,016 m\/s<\/strong>) na valida\u00e7\u00e3o mais recente. A diferen\u00e7a em rela\u00e7\u00e3o ao valor corrigido foi m\u00ednima, mas o tempo de resposta melhorou drasticamente, de 800 ms para 200 ms. Isso permitiu que o feedback fosse fornecido <strong>imediatamente depois<\/strong> a fase conc\u00eantrica, em vez de segundos depois.<\/p>\n\n\n\n<p>Ainda assim, o algoritmo ZUPT permanece ativo. Quando uma nova fase estacion\u00e1ria \u00e9 detectada, o sinal \u00e9 recalibrado e qualquer erro acumulado \u00e9 corrigido. Se ocorrer mais de uma repeti\u00e7\u00e3o entre as fases estacion\u00e1rias, os valores corrigidos substituem o feedback inicial para garantir que o usu\u00e1rio sempre receba o resultado mais preciso.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Conclus\u00e3o<\/h3>\n\n\n\n<p>Este projeto baseado em dados me permitiu otimizar significativamente o algoritmo Spleeft. Reduzi com sucesso o tempo de resposta para a estimativa da velocidade m\u00e9dia sem comprometer a confiabilidade confirmada em valida\u00e7\u00f5es anteriores. O segredo foi combinar a coleta sistem\u00e1tica de dados com a explora\u00e7\u00e3o completa dos par\u00e2metros \u2014 entendendo que a qualidade do resultado final depende n\u00e3o apenas do hardware, mas talvez ainda mais do software por tr\u00e1s dele.<\/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;\">Desempenho F\u00edsico MSC e CEO SpeeftApp<\/p>\n<p style=\"margin: 5px 0; font-size: 14px; color: #333;\">Dedicado a melhorar o desempenho atl\u00e9tico e o treinamento de ciclismo, combinando ci\u00eancia e tecnologia para gerar 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\">Treinamento 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\">M\u00e9dio<\/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>Neste artigo, compartilho \u2014 de uma perspectiva t\u00e9cnica e reflexiva \u2014 o processo de aprendizado e desenvolvimento por tr\u00e1s da mais recente otimiza\u00e7\u00e3o do algoritmo Spleeft. Explicarei como o sistema original, desenvolvido h\u00e1 quatro anos, funciona e como, ao longo do \u00faltimo m\u00eas, ajustei seus par\u00e2metros para melhorar a precis\u00e3o e a velocidade de processamento. BAIXE \u2026 <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/spleeft.app\/pt\/projeto-de-ciencia-de-dados-por-tras-do-spleft-vbt-ios\/\" class=\"more-link\">Ler mais<span class=\"screen-reader-text\"> \u201cO Projeto de Ci\u00eancia de Dados por Tr\u00e1s do Spleft\u201d<\/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\/pt\/wp-json\/wp\/v2\/posts\/10339","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spleeft.app\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spleeft.app\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spleeft.app\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spleeft.app\/pt\/wp-json\/wp\/v2\/comments?post=10339"}],"version-history":[{"count":0,"href":"https:\/\/spleeft.app\/pt\/wp-json\/wp\/v2\/posts\/10339\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/spleeft.app\/pt\/wp-json\/wp\/v2\/media\/10480"}],"wp:attachment":[{"href":"https:\/\/spleeft.app\/pt\/wp-json\/wp\/v2\/media?parent=10339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spleeft.app\/pt\/wp-json\/wp\/v2\/categories?post=10339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spleeft.app\/pt\/wp-json\/wp\/v2\/tags?post=10339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}