技术文章及通讯

为医疗、运动和职业安全应用开发运动分析算法

作者:埃德加·查理,dorsaVi


优秀运动员希望在受伤后尽快回到比赛中。因此,他们经常说服自己和他们的医生,在他们完全恢复之前,他们已经适合打球了。先进的技术,如捕捉运动的光学跟踪系统和测量地面反作用力的测力板,使运动员和训练人员能够确定运动员何时可以安全恢复充分活动。这些技术提供了仅仅通过观察运动员无法获得的指标和见解,但它们也有一些缺点。除了成本高昂之外,它们通常依赖于经过专门训练的技术人员和漫长的安装程序。此外,由于它们通常要求运动员在受限的环境中(例如在跑步机上)进行运动,因此很难评估自然运动。

在dorsaVi,我和同事开发了可穿戴的无线运动分析设备,当运动员在任何环境中自由运动时,该设备可以精确测量和跟踪运动(图1)。

ViMove传感器在运行测试。
图1。ViMove传感器在运行测试。

ViPerform集成了惯性测量单元(IMU)和磁力计,以及用于测量肌肉活动的肌电图传感器。传感器数据被传输到一个记录和反馈设备(RFD),它可以戴在手臂上或放在口袋里。RFD将数据发送到PC上,由dorsaVi软件包进行处理和显示。

dorsaVi技术的核心是过滤和分析原始传感器数据的专有算法,提供的信息可用于评估膝关节控制、下背部活动范围、腿筋活动、髋关节和核心控制以及跑步性能。通过在MATLAB中开发和测试算法®使用MATLAB Coder™开发可移植的C代码,与我们之前使用c#手工编码的方法相比,我们将开发时间缩短了近一半。

开发客观分析的算法

通过复杂的算法处理原始传感器数据并以有意义的形式呈现结果,客观分析成为可能。例如,当运动员跑步时,算法可以识别出加速度计输出中出现的每一步的大负尖峰。根据这些尖峰的时间和大小,该算法可以分别计算出跑步者的节奏和每一步的地面反作用力。这种分析可以检测到每条腿的不对称节奏或不平等的地面反作用力,揭示运动员不能或不愿意通过两条腿施加相等的力量。同样,当运动员深蹲或跳跃时,分析膝关节偏离、屈曲和旋转可以指导ACL和其他膝关节损伤的恢复。即使是健康的运动员也能从这种分析中受益,利用算法的反馈来改进他们的技术或优化关键动作的效率。

当我们直接用c#实现算法时,我们必须开发自己的低级信号处理和绘图函数。通过切换到MATLAB,我们通过使用内置函数进行数据可视化和离散傅里叶变换加快了开发速度。今天,我们使用信号处理工具箱™和小波工具箱™来进一步简化开发。例如,我们使用信号处理工具箱来设计和应用巴特沃斯和其他无限脉冲响应(IIR)滤波器到传感器数据。我们利用小波工具箱计算信号的连续小波变换系数来识别传感器信号中的波峰和波谷。识别信号中的这些模式对于精确定位步态事件(如脚跟撞击和脚趾脱落)对于我们的跑步分析是至关重要的。

验证和测试算法

在MATLAB中开发算法后,我们通过将其结果与独立测量设备(如光学运动跟踪系统或测力板)产生的结果进行比较来验证它。例如,我们将算法检测到的步态事件的时间与力板产生的地面力反应峰值的时间进行比较。在这个阶段,我们检查在MATLAB中创建的图和图形,以识别并纠正算法中的潜在缺陷(图2)。

DorsaVi_fig_2_w.jpg
图2。MATLAB图显示的结果运行测试。

一旦我们对算法在有限的测试场景集上表现良好感到满意,我们就会使用来自世界各地运动员的记录数据在MATLAB中运行1000多个测试。我们继续微调和优化算法,直到它满足我们对准确性和性能的要求。

从我们的MATLAB算法生成c++代码

DorsaVi软件是查看传感器数据和评估运动员表现的主要界面,主要是用c#编写的。当我们第一次开始使用MATLAB开发信号处理算法时,我们的工作流程仍然依赖于c++和c#程序员来实现纳入dorsaVi软件的算法的生产版本。这种方法效率很低,因为它涉及重复工作。它可能需要额外的一个月来重新编程和重新测试已经在MATLAB中开发和测试的算法。

为了消除这种低效率并缩短项目交付时间,我们决定使用MATLAB Coder从经过验证的MATLAB算法生成c++代码。我们通过初始化所有变量并寻找优化循环的机会来为代码生成准备算法。我们通过生成一个包装已编译代码的MEX函数来验证我们的算法已经为代码生成做好了准备,然后调用MEX函数来代替原始的MATLAB算法。从我们的算法生成c++代码后,我们将算法编译成一个DLL。c#程序员将这个DLL加载到dorsaVi软件中。

之前,将MATLAB算法转换为产品代码需要一个月的时间。用MATLAB编码器,现在只需要一两天。作为最后一步,我们对dorsaVi软件的算法进行了全系统测试。到目前为止,我们还没有发现在代码生成过程中引入的任何缺陷。我们在MATLAB中进行的大量测试使我们的c#程序员能够花时间为dorsaVi软件开发新功能,而不是用c#重新编写算法,然后重新测试它们。

重用算法和响应客户请求

我们在ViMove和ViSafe产品中重用了最初为ViPerform开发的几个算法,分别为精英运动、临床应用和职业健康应用而设计。下载188bet金宝搏我的团队目前正在研究新的算法,以分析来自放置在不同身体部位的传感器的数据,以及现有客户的算法开发和增强请求。

使用MATLAB和MATLAB Coder,我们可以快速响应客户的要求。在最近的版本中,我们更新了两个算法模块,创建了两个新模块,并以使用旧工作流不可能实现的信心交付了所有四个算法模块。

发布于2014年9月19日

查看相关功能的文章

查看相关行业的文章