matlab 平滑曲线连接_【MATLAB机器学习】用于传感器数据分析的信号处理和机器学习技术-上手实战...

48b9557028751209b2f4808618bce8a2.png

前言

最近开始学习机器学习,万事开头难。Python和C++环境配置的我头很大。对于科研党,还是最熟悉MATLAB,而且,MATLAB支持做的太棒了,帮助文件和官方教程真的是手把手的教。今天给大家分享一个我调试成功的案例-《用于传感器数据分析的信号处理和机器学习技术》。该案例来自于MATLAB视频和网络研讨会。我会带大家一步步做这个案例。

案例说明

越来越多的应用需要在时间序列和传感器数据上联合使用信号处理和机器学习技术。MATLAB ®可以通过一个单一的环境中提供全方位的建模和设计能力,加速数据分析和传感器处理系统的开发。 在此网络研讨会中,我们提供了一个分类系统的示例,该系统能够仅基于由他或她的智能手机生成的加速度计信号来识别人类受试者从事的体育活动。

我们介绍了MATLAB中常见的信号处理方法(包括数字滤波和频域分析),这些方法有助于从原始波形中提取描述特征,并展示了并行计算如何加速大型数据集的处理。然后,我们讨论如何以编程方式和交互方式探索和测试不同的分类算法(例如决策树,支持向量机或神经网络)。最后,我们演示了如何使用MATLAB自动生成的C / C ++代码来为嵌入式传感器分析部署流分类算法。

参考资料和程序

用于传感器数据分析的信号处理和机器学习技术-视频-MATLAB

Signal Processing and Machine Learning Techniques for Sensor Data Analytics - Video​www.mathworks.com

网络研讨会“传感器数据分析的信号处理和机器学习技术”的代码-文件交换-MATLAB Central

Code for Webinar "Signal Processing and Machine Learning Techniques for Sensor Data Analytics" - File Exchange - MATLAB Central​www.mathworks.com
c8ce4d14abc3433a1f0454449f2d1c2c.png

UCI机器学习存储库:使用智能手机数据集的人类活动识别

Human Activity Recognition Using Smartphones Data Set​archive.ics.uci.edu

MATLAB机器学习实战

带大家一步步做这个案例。下载代码和数据,按步骤导入数据后,运行runTrainedNetworkOnBufferedData报错,请初始化共享变量 global hdisp;

f6399c81e8aa38c2c3465eadc9e5fa55.png

罗列各种不同类型的标签信号,它们在竖直方向加速度幅值有区别。

025f7673d43dd3c827fb4e3aeeb9cfcb.png

采用平均测量加速度幅值,可以容易分辨“走”和“躺”的信号。

479f199b8d0b05b1dd85ce00b89359b6.png

采用均方根值RMS或标准差测量加速度幅值,可以分辨“走”和“站”的信号。

619520541aec0d5cbc069685b74af2f6.png

只分辨加速度幅值信号是不够的,比如“走”和“上楼”的信号就分不清。

3cb682b24d9ddb48cb559adcacd9b293.png

设置高通数字滤波器,去除重力加速度影响

数字滤波器设计-示例

Example List - MATLAB & Simulink​www.mathworks.com

9e532fc123d9ec81ed8df697c86ebb62.png

只看“走”信号

b6dab294664c5fae78a7de834b3388e7.png

采用Welch方法绘制PSD功率谱密度

Welch方法是一种修正周期图功率谱密度估计方法,它通过选取的窗口对数据进行加窗处理,先分段求功率谱之后再进行平均。其中窗口的长度N表示每次处理的分段数据长度,Noverlap是指相邻两段数据之间的重叠部分长度。长度越大得到的功率谱分辨率越高(越准确),但方差加大(及功率谱曲线不太平滑);长度越小,结果的方差会变小,但功率谱分辨率较低(估计结果不太准确)。

Welch的方法概括步骤如下

  1. 将信号分为多段,每段之间可以有overlapping,也可以没有。
  2. 每一段加窗
  3. 每一段做谱分析
  4. 求平均。

1a3d09ee09600f6e555f1a4c679426df.png

验证PSD能否分辨“走”和“上楼”的信号。

9ee6c432fbd1c38c64a6ded53f83b1bb.png

Signal Processing Toolbox有寻找峰值功能,可以标记峰值的位置和大小。

482fa4d9e72a45959327233205e538e5.png

找到最大的8个峰值,间隔0.25Hz以上。

8f58adbfb6d9428aacaa0b9a0551f3fd.png

从预存缓冲信号中提取特征。运行“ extractALLFeatures.m”期间的一个小问题。对于k = 2714,它只是崩溃。我在查看代码,发现问题出在autocorrFeatures()帮助函数上(在“ extractSignalFeatures.m”上)。 在第69行,它将专长初始化为零(1,3)。但是在第91行,如果只能找到一个峰(因此仅是f1),则假定f2和f3已经为0。 因此,在k = 2714的情况下,提取atz的autocorrFeatures时会崩溃,因为期望使用1 x 9矩阵,但它返回1 x 7矩阵。

运行到2714会崩溃,我们改为运行2700个。parfor k = 1:2700 %size(atx,1)

打开分类训练器,新建回话,选择featTable数据集。

f53e4d105f859a1337154fb600531a7a.png

选择Y轴和Z轴的平均值数据,

第一种选择决策树方法中的粗略树, 第二种选择2次支持向量机模型。

a91f104a7e69c71602e1b4fadb9cf0f8.png

混淆矩阵对比表明,2次支持向量机方法准确的多。

b6d43f3ce11fc6bb259b3d119d365952.png

可以将模型导出:

Export Classification Model to Predict New Data - MATLAB & Simulink

Export Classification Model to Predict New Data​www.mathworks.com

另一种方法是:神经网络训练。定义18层神经网络。

1dc9f098f61d18037b7d6a2016aeb161.png

19accd76616396135871f6ee7ff8217d.png
训练过程

得到人体动作识别混淆矩阵

d8938f15eb93b93c6414273cd01e2a92.png

总结

我们采用MATLAB,按照这个案例尝试了决策树分类,支持向量机分类,和神经网络分类,来根据传感器信号判别人体姿态。大家学习起来,加油!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值