LSM6DSV16X基于MLC智能笔动作识别(3)----MEMS Studio训练数据

news2024/11/28 16:43:28

LSM6DSV16X基于MLC智能笔动作识别.3--MEMS Studio训练数据

  • 概述
  • 视频教学
  • 样品申请
  • 源码下载
  • 硬件准备
  • 选择MEMS
  • 导入数据
  • 配置窗口长度和量程
  • 配置滤波器
  • 选择特征数据
  • 设备树生成
  • 决策树生成
  • 参考程序
  • 转换UCF文件

概述

MEMS-Studio是一套完整的桌面软件解决方案,专为开发嵌入式AI功能、评估嵌入式库、分析数据,以及为整个MEMS传感器产品组合设计无代码算法而设计。这款独特的软件解决方案提供了多功能的开发环境,支持评估和编程所有MEMS传感器,此外还推出了新一代解决方案,以扩展Unico-GUI、Unicleo-GUI和AlgoBuilder等成熟应用程序的功能。

最近在弄ST的课程,需要样片的可以加qun申请:6_15061293 。
在这里插入图片描述
MEMS-Studio可简化在STM32微控制器上使用图形界面实现概念验证的过程,无需编写代码。此解决方案支持配置传感器和嵌入式AI(机器学习和神经网络),可充分利用机器学习内核 (MLC)、ISPU的神经网络以及有限状态机 (FSM)。它会重复使用嵌入式软件库,将多种功能组合到一个项目中,并使用绘图和显示功能实时可视化数据。
MEMS-Studio提供以下用户体验:
● 针对MEMS产品组合中运动、环境和红外传感器进行评估
● 配置和测试传感器内的各项功能,如有限状态机 (FSM)、机器学习内核 (MLC) 和智能传感器处理单元 (ISPU)
● 实时和离线数据分析
● 无代码图形化算法设计
在这里插入图片描述

视频教学

https://www.bilibili.com/video/BV1624VeAEAG/

LSM6DSV16X基于MLC智能笔动作识别(3)----MEMS Studio训练数据

样品申请

https://www.wjx.top/vm/OhcKxJk.aspx#

源码下载

硬件准备

首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
主控为STM32H503CB,陀螺仪为LSM6DSV16X,磁力计为LIS2MDL。
在这里插入图片描述

选择MEMS

使用 MEMS Studio 的 MLC(Machine Learning Core)进行训练, “Sensor” 字段选择要配置的传感器 。
在这里插入图片描述

导入数据

点击“Browse”选择采集到的数据,给该类数据命名后下载。

在这里插入图片描述

将所有采集到的数据都导入进去,下载成功如图所示。

在这里插入图片描述

配置窗口长度和量程

MLC ODR(输出数据速率):已设置为 240Hz,这是 MLC 处理数据的速率。
时间窗口长度(Window length):设置的窗口长度为 60,表示 MLC 每 60个样本计算一次统计特征。
加速度计(Accelerometer):
● 量程(Full Scale):设置为 ±2g,表示能够测量的最大加速度为 ±2g。
● ODR(数据速率):设置为 480Hz,表示加速度计的采样频率为 480Hz。
陀螺仪(Gyroscope):
● 量程(Full Scale):设置为 ±125 dps,表示最大旋转速度为 ±125 度/秒。
● ODR(数据速率):设置为 480Hz,表示陀螺仪的采样频率为 480Hz。

在这里插入图片描述

配置滤波器

● filter_1:应用于 HP_Acc_XYZ,表示这是一个 高通滤波器(HP,High-Pass Filter),用于对加速度计的 X、Y、Z 轴的三维数据进行滤波。
● HP_Acc_XYZ:此滤波器将过滤掉加速度数据中低频成分,保留高频部分。这可能是为了消除像重力这样的低频信号干扰,保留运动的快速变化部分。
● filter_2:应用于 HP_Gyr_XYZ,这是一个 高通滤波器,用于对陀螺仪的 X、Y、Z 轴数据进行滤波。
● HP_Gyr_XYZ:此滤波器将过滤掉陀螺仪数据中的低频部分,保留高频的旋转变化信息,适合检测快速旋转或角速度的变化。
● filter_3:应用于 HP_Acc_V2,也是一个 高通滤波器,用于处理加速度矢量平方值(即组合了 X、Y 和 Z 轴的加速度数据)。
● HP_Acc_V2:此滤波器将对加速度矢量平方值的低频信号进行过滤,保留高频部分,帮助识别运动的剧烈变化。
● filter_4:应用于 HP_Gyr_V2,是一个 高通滤波器,用于处理陀螺仪矢量平方值(即组合了 X、Y 和 Z 轴的角速度数据)。
● HP_Gyr_V2:此滤波器将对陀螺仪矢量平方值的低频部分进行过滤,保留高频部分,帮助识别旋转运动中的快速变化。

在这里插入图片描述

选择特征数据

MLC(Machine Learning Core) 的 特征选择(Features Selection) 区域可以为传感器数据选择要计算的统计特征,并将其作为机器学习的输入。
MEAN:均值,表示在给定的时间窗口内计算的传感器数据的平均值。
VARIANCE:方差,表示数据的分散程度,反映数据在给定时间窗口内的变化。
ENERGY(能量): 计算信号在给定时间窗口内的总能量。它反映了信号强度,通常用于识别较强或较弱的活动。
PEAK_TO_PEAK(峰峰值):峰峰值特征计算的是信号在给定时间窗口内的最大值和最小值之间的差异。这个特征可以帮助检测信号的最大振幅,是评估运动强度和突发变化的有力指标。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

设备树生成

生成的设备树文件为 arff 文件。

在这里插入图片描述

决策树生成

点击 “Generate Decision Tree” 按钮以生成决策树。这个按钮基于之前通过 ARFF 文件加载的数据和特征生成了一个分类模型(决策树),用于识别不同的动作或状态。

在这里插入图片描述

Kappa 统计量 是一种用于衡量分类器在考虑偶然因素时的准确性度量。这里显示为 0.307479,虽然分类准确度高,但 Kappa 值可能表明结果受到数据分布或样本量的影响。
● 0.81 - 1.00:几乎完美的分类一致性。
● 0.61 - 0.80:很好的分类一致性。
● 0.41 - 0.60:中等分类一致性。
● 0.21 - 0.40:较低的分类一致性。
● 0.00 - 0.20:几乎没有一致性(接近随机猜测)。

在这里插入图片描述

查看分析信息。

在这里插入图片描述
在这里插入图片描述

F1_MEAN_on_ACC_X <= 0.0360312
|   F1_MEAN_on_ACC_X <= -0.88916: other (65.0)
|   F1_MEAN_on_ACC_X > -0.88916: Steady (52.0)
F1_MEAN_on_ACC_X > 0.0360312
|   F7_ENERGY_on_GY_X <= 0.241577: Idle (62.0)
|   F7_ENERGY_on_GY_X > 0.241577: Writing (68.0)

Number of Leaves  : 	4
Size of the tree : 	7


class:
 => Idle, Writing, other, Steady, 
features:
 => F1_MEAN_on_ACC_X, F2_MEAN_on_ACC_Y, F3_MEAN_on_ACC_Z, F4_MEAN_on_ACC_V2, F5_VAR_on_ACC_V2, F6_VAR_on_GY_V2, F7_ENERGY_on_GY_X, F8_ENERGY_on_GY_Y, F9_ENERGY_on_GY_Z, F10_ENERGY_on_GY_V2, F11_PeakToPeak_on_ACC_V2, F12_PeakToPeak_on_GY_V2, 


Mean absolute error	1
Root mean squared error	1
 ======= Whole data training with Confidence Factor: 0.9 ========= 


===== Confusion Matrix =====
         	Idle     	Writing  	other    	Steady   	<-- classified as
Idle     	62	0	0	0	
Writing  	0	68	0	0	
other    	0	0	65	0	
Steady   	0	0	0	52	

Total Number of Instances        : 247
Correctly Classified Instances   : 247
Incorrectly Classified Instances : 0
Kappa Statistic: 0.252373
Accuracy: 100%

Report  :	precision	recall	support	
Idle     	1    	1	 62
Writing  	1    	1	 68
other    	1    	1	 65
Steady   	1    	1	 52

avg/total	1    	1	 247

根节点判断条件:
● F1_MEAN_on_ACC_X <= 0.0360312:
○ 如果 X 轴加速度的均值小于或等于 0.0360312:
■ 如果 F1_MEAN_on_ACC_X <= -0.88916,则分类为 other(65 个样本)。
■ 如果 F1_MEAN_on_ACC_X > -0.88916,则分类为 Steady(52 个样本)。
○ 如果 X 轴加速度的均值大于 0.0360312:
■ 如果 F7_ENERGY_on_GY_X <= 0.241577,则分类为 Idle(62 个样本)。
■ 如果 F7_ENERGY_on_GY_X > 0.241577,则分类为 Writing(68 个样本)。

● 混淆矩阵 显示模型在每一类的分类结果:
○ Idle:62 个样本被正确分类。
○ Writing:68 个样本被正确分类。
○ other:65 个样本被正确分类。
○ Steady:52 个样本被正确分类。

● Kappa Statistic:0.252373。尽管分类准确度为 100%,但 Kappa 值较低,表明不同类别之间可能存在某些重叠或类别分布不均衡。
该决策树模型在当前的小型数据集上表现良好,分类准确度为 100%,没有任何错误分类的实例。然而,Kappa 统计量(0.252373) 表明类别之间可能存在数据不平衡,导致模型虽然能够准确分类,但泛化能力可能较差。

参考程序

https://github.com/STMicroelectronics/STMems_Machine_Learning_Core/tree/master/application_examples/lsm6dsv16x

转换UCF文件

类输出值可以根据自己的需求修改,然后点击“Generate Config File”生成ucf文件。

在这里插入图片描述

将得到的UCF文件存放到LSM6DSV16X的程序中。

在这里插入图片描述

在初始化中添加MLC检测功能。

	
  for( uint32_t i=0; i<(sizeof(lsm6dsv16x_activity_recognition) /
                    sizeof(ucf_line_t) ); i++ ) 
	{
    lsm6dsv16x_write_reg(&dev_ctx, lsm6dsv16x_activity_recognition[i].address,
                       (uint8_t *)&lsm6dsv16x_activity_recognition[i].data, 1);
  }	
	

在主函数中获取状态值,查询类的输出值,编译程序。

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

	  lsm6dsv16x_mlc_handler();
		if (event_catched != 0) 
		{

			printf("event_catched=%d",event_catched);
			 // 握(0) 拍(1) 挥(2) 拍(3) 静(4) 止(5)
      switch(event_catched) 
			{
					case 2:
						event_catched = 0;

						printf("闲置(Idle)\r\n");
						break;
					case 4:
						event_catched = 0;

						printf("书写(Writing)\r\n");
						break;
					case 8:
						event_catched = 0;

						printf("其他(other)\r\n");
						break;
					case 12:
						event_catched = 0;

						printf("静止(Steady)\r\n");
						break;					
					default:break;
      }
      event_catched = 0;
    }
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
      

演示
静止状态如下。

在这里插入图片描述

闲置状态如下,手抓笔静止。

在这里插入图片描述

书写状态如下,移动笔进行识别判定。

在这里插入图片描述

其他如下,笔倒置。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2189430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

认知杂谈98《抵御噪声干扰》

内容摘要&#xff1a; “能量掠夺”是指他人负面言行对我们情绪和心理状态的不良影响&#xff0c;使我们感到沮丧或愤怒。这种影响可能源于我们内心对自身价值认同的不坚定&#xff0c;以及过分在意他人的看法。 要避免能量掠夺&#xff0c;我们需要建立心理防线&#xff0c;学…

Xilinx Vitis IDE启动时失去响应的解决办法

在启动Xilinx Vitis IDE时&#xff0c;有时候会遇到卡死的情况&#xff0c;无论是直接启动还是从Vivado的菜单中启动都一样。参考Xilinx官网的解决办法&#xff1a;&#xff08;一直到2023.1版本都是可以解决的&#xff0c;之后的版本没测过。&#xff09; Widget (amd.com) …

Leetcode—279. 完全平方数【中等】

2024每日刷题&#xff08;169&#xff09; Leetcode—279. 完全平方数 实现代码 class Solution { public:int numSquares(int n) {vector<int> dp(n 1, n);dp[0] 0;dp[1] 1;for(int i 2; i < n; i) {for(int j 1; j * j < i; j) {dp[i] min(dp[i], dp[i -…

Oracle中ADD_MONTHS()函数详解

文章目录 前言一、ADD_MONTHS()的语法二、主要用途三、测试用例总结 前言 在Oracle数据库中&#xff0c;ADD_MONTHS()函数用于在日期中添加指定的月数。 一、ADD_MONTHS()的语法 ADD_MONTHS(date, n) 其中&#xff0c;date是一个日期值&#xff0c;n是一个整数值&#xff0c…

C语言高阶【2】--动态内存管理【2】--柔性数组(这是个全新的知识点,不想了解一下吗?)

本章概述 柔性数组总结C/C中程序内存划分彩蛋时刻&#xff01;&#xff01;&#xff01;&#xff01; 柔性数组 数组这个东西&#xff0c;我想大家应该都不陌生了吧。但是&#xff0c;柔性数组这个东西可能你是第一次听说。 柔性数组概念&#xff1a;在C99之前是没这个东西的…

基于Flux的文生高清图片

Flux模型生成的图片画质极佳&#xff0c;改进修复了手的问题&#xff0c;支持字体生成和排版&#xff0c;训练参数大&#xff0c;风格多样&#xff0c;分辨率弹性好&#xff0c;embedding通用性好&#xff0c;不需要输入负面提示词。 安装ComfyUI ComfyUI下载安装 下载和配置…

计算机网络:计算机网络概述 —— 网络拓扑结构

文章目录 网络拓扑总线型拓扑特点缺陷 星型拓扑特点缺陷 环型拓扑特点缺陷 网状型拓扑优点缺陷 树型拓扑特点缺陷 网络拓扑 网络拓扑指的是计算机网络中节点&#xff08;计算机、交换机、路由器等&#xff09;之间物理或逻辑连接的结构。网络拓扑定义了节点之间的布局、连接方…

方法重载(Overload)

前言 在前面的学习中&#xff0c;我们学到了重写(Override),这里我们主要进行重载(Overload)的介绍&#xff0c;同时对重写和重载的区别进行分析。 1. 重载(Overload) #方法重载 在同一个类中定义多个同名但参数不同的方法。我们称方法与方法之间构成方法重载 在Java中&…

【宽搜】1. 层序遍历模板讲解

题目描述 题目链接&#xff1a;N叉树的层序遍历 层序遍历流程 请仔细阅读下图&#xff1a; 根据上图的流程&#xff0c;下面再明确几个问题&#xff1a; 1. 为什么要使用队列&#xff1f; 队列是先进先出的数据结构&#xff0c;在数的层序遍历中&#xff0c;需要先将节点p…

Pikachu-Sql Inject-宽字节注入

基本概念 宽字节是相对于ascII这样单字节而言的&#xff1b;像 GB2312、GBK、GB18030、BIG5、Shift_JIS 等这些都是常说的宽字节&#xff0c;实际上只有两字节 GBK 是一种多字符的编码&#xff0c;通常来说&#xff0c;一个 gbk 编码汉字&#xff0c;占用2个字节。一个…

【C++打怪之路Lv6】-- 内存管理

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;C打怪之路&#xff0c;python从入门到精通&#xff0c;数据结构&#xff0c;C语言&#xff0c;C语言题集&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文(平均质量分82)&#…

软考鸭微信小程序:助力软考备考的便捷工具

一、软考鸭微信小程序的功能 “软考鸭”微信小程序是一款针对软考考生的备考辅助工具&#xff0c;提供了丰富的备考资源和功能&#xff0c;帮助考生提高备考效率&#xff0c;顺利通过考试。其主要功能包括&#xff1a; 历年试题库&#xff1a;小程序内集成了历年软考试题&…

PyTorch实现卷积神经网络CNN

一、卷积神经网络CNN 二、代码实现&#xff08;PyTorch&#xff09; 1. 导入依赖库 import torch from torch import nn, optim from torchvision import datasets, transforms from torch.utils.data import DataLoader nn&#xff1a;包含了torch已经准备好的层&#xff0c…

Pikachu-Unsafe Fileupload-服务端check

MIME MIME是Multipurpose Internet Mail Extensions &#xff08;多用途互联网邮件扩展类型&#xff09;的缩写&#xff0c;用来表示文件、文档、或字节流的性质和格式。是设定某种扩展名的文件用一种应用程序来打开的方式类型&#xff0c;当该扩展名文件被访问的时候&#xff…

论文阅读笔记-A Comparative Study on Transformer vs RNN in Speech Applications

前言 介绍 序列到序列模型已广泛用于端到端语音处理中,例如自动语音识别(ASR),语音翻译(ST)和文本到语音(TTS)。本文着重介绍把Transformer应用在语音领域上并与RNN进行对比。与传统的基于RNN的模型相比,将Transformer应用于语音的主要困难之一是,它需要更复杂的配…

【hot100-java】【分割回文串】

回溯篇 class Solution {//ret是需要返回的结果//path是回溯过程中的记录private final List<List<String>> retnew ArrayList<>();private final List<String> path new ArrayList<>();private String s;public List<List<String>>…

建筑资质的未来发展趋势

&#x1f3d7;️建筑资质是建筑企业进入市场的通行证&#xff0c;它不仅关系到企业的竞争力&#xff0c;也影响着整个建筑行业的健康发展。随着政策的调整和技术的进步&#xff0c;建筑资质管理正面临着新的变革。 1. 资质管理的数字化转型&#xff1a;&#x1f310; 随着信息技…

JavaScript-上篇

JS 入门 JS概述 JavaScript&#xff08;简称JS&#xff09;是一种高层次、解释型的编程语言&#xff0c;最初由布兰登艾奇&#xff08;Brendan Eich&#xff09;于1995年创建&#xff0c;并首次出现在网景浏览器中。JS的设计初衷是为Web页面提供动态交互功能&#xff…

区块链可投会议CCF C--CT-RSA 2025 截止10.15 附2024录用率

Conference&#xff1a;The Cryptographers Track at RSA Conference (CT-RSA) CCF level&#xff1a;CCF C Categories&#xff1a;network and information security Year&#xff1a;2025 Conference time&#xff1a;San Francisco, California, USA • April 28–May …

930/105每日一题

算法 1 4,2,9,11, 4, 2,4 2,4,9 42 4 24 9 2&#xff08;0&#xff09; 4&#xff08;1&#xff09; 9&#xff08;2&#xff09; 11&#xff08;3&#xff09; 11&#xff08;0&#xff09;11&#xff08;1&#xff09; 9&#xff08;2&#xff09; 11&#xff08;3&#xf…