![48b9557028751209b2f4808618bce8a2.png](https://i-blog.csdnimg.cn/blog_migrate/434e76091587857f7b377edcdaaffcef.jpeg)
前言
最近开始学习机器学习,万事开头难。Python和C++环境配置的我头很大。对于科研党,还是最熟悉MATLAB,而且,MATLAB支持做的太棒了,帮助文件和官方教程真的是手把手的教。今天给大家分享一个我调试成功的案例-《用于传感器数据分析的信号处理和机器学习技术》。该案例来自于MATLAB视频和网络研讨会。我会带大家一步步做这个案例。
案例说明
越来越多的应用需要在时间序列和传感器数据上联合使用信号处理和机器学习技术。MATLAB ®可以通过一个单一的环境中提供全方位的建模和设计能力,加速数据分析和传感器处理系统的开发。 在此网络研讨会中,我们提供了一个分类系统的示例,该系统能够仅基于由他或她的智能手机生成的加速度计信号来识别人类受试者从事的体育活动。
我们介绍了MATLAB中常见的信号处理方法(包括数字滤波和频域分析),这些方法有助于从原始波形中提取描述特征,并展示了并行计算如何加速大型数据集的处理。然后,我们讨论如何以编程方式和交互方式探索和测试不同的分类算法(例如决策树,支持向量机或神经网络)。最后,我们演示了如何使用MATLAB自动生成的C / C ++代码来为嵌入式传感器分析部署流分类算法。
参考资料和程序
用于传感器数据分析的信号处理和机器学习技术-视频-MATLAB
Signal Processing and Machine Learning Techniques for Sensor Data Analytics - Videowww.mathworks.com网络研讨会“传感器数据分析的信号处理和机器学习技术”的代码-文件交换-MATLAB Central
Code for Webinar "Signal Processing and Machine Learning Techniques for Sensor Data Analytics" - File Exchange - MATLAB Centralwww.mathworks.com![c8ce4d14abc3433a1f0454449f2d1c2c.png](https://i-blog.csdnimg.cn/blog_migrate/be12c3b33625dbdcc5bdd4270a7a4e73.png)
UCI机器学习存储库:使用智能手机数据集的人类活动识别
Human Activity Recognition Using Smartphones Data Setarchive.ics.uci.eduMATLAB机器学习实战
带大家一步步做这个案例。下载代码和数据,按步骤导入数据后,运行runTrainedNetworkOnBufferedData报错,请初始化共享变量 global hdisp;
![f6399c81e8aa38c2c3465eadc9e5fa55.png](https://i-blog.csdnimg.cn/blog_migrate/b3560b24557982f11d72e2a23bb2bc59.jpeg)
罗列各种不同类型的标签信号,它们在竖直方向加速度幅值有区别。
![025f7673d43dd3c827fb4e3aeeb9cfcb.png](https://i-blog.csdnimg.cn/blog_migrate/7ecccab66fd2fc45a70887bddaea8cd9.png)
采用平均测量加速度幅值,可以容易分辨“走”和“躺”的信号。
![479f199b8d0b05b1dd85ce00b89359b6.png](https://i-blog.csdnimg.cn/blog_migrate/3a0a85845c7f4e124b4a8f2a83477581.png)
采用均方根值RMS或标准差测量加速度幅值,可以分辨“走”和“站”的信号。
![619520541aec0d5cbc069685b74af2f6.png](https://i-blog.csdnimg.cn/blog_migrate/ed2e109ee4a82e7fe8241df17832b0fd.png)
只分辨加速度幅值信号是不够的,比如“走”和“上楼”的信号就分不清。
![3cb682b24d9ddb48cb559adcacd9b293.png](https://i-blog.csdnimg.cn/blog_migrate/08df8ba317af9687b7def2ac939233e4.png)
设置高通数字滤波器,去除重力加速度影响
数字滤波器设计-示例
Example List - MATLAB & Simulinkwww.mathworks.com![9e532fc123d9ec81ed8df697c86ebb62.png](https://i-blog.csdnimg.cn/blog_migrate/e8cee2987ef4e35b5df217de790d5bf2.jpeg)
只看“走”信号
![b6dab294664c5fae78a7de834b3388e7.png](https://i-blog.csdnimg.cn/blog_migrate/ecee33755d983b43e813e1c15845e16a.jpeg)
采用Welch方法绘制PSD功率谱密度
Welch方法是一种修正周期图功率谱密度估计方法,它通过选取的窗口对数据进行加窗处理,先分段求功率谱之后再进行平均。其中窗口的长度N表示每次处理的分段数据长度,Noverlap是指相邻两段数据之间的重叠部分长度。长度越大得到的功率谱分辨率越高(越准确),但方差加大(及功率谱曲线不太平滑);长度越小,结果的方差会变小,但功率谱分辨率较低(估计结果不太准确)。
Welch的方法概括步骤如下
- 将信号分为多段,每段之间可以有overlapping,也可以没有。
- 每一段加窗
- 每一段做谱分析
- 求平均。
![1a3d09ee09600f6e555f1a4c679426df.png](https://i-blog.csdnimg.cn/blog_migrate/09acd15b91d7c762f884a411da10aaa6.jpeg)
验证PSD能否分辨“走”和“上楼”的信号。
![9ee6c432fbd1c38c64a6ded53f83b1bb.png](https://i-blog.csdnimg.cn/blog_migrate/301e4741fcd8599e312fc0524c1eb8ed.png)
Signal Processing Toolbox有寻找峰值功能,可以标记峰值的位置和大小。
![482fa4d9e72a45959327233205e538e5.png](https://i-blog.csdnimg.cn/blog_migrate/0942f75790601f11cbde6c2234747029.png)
找到最大的8个峰值,间隔0.25Hz以上。
![8f58adbfb6d9428aacaa0b9a0551f3fd.png](https://i-blog.csdnimg.cn/blog_migrate/f3dff47adedd90cedbcbe503ba8be6d5.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](https://i-blog.csdnimg.cn/blog_migrate/f7abae582e90ddb5e7a8831b51f5373f.jpeg)
选择Y轴和Z轴的平均值数据,
第一种选择决策树方法中的粗略树, 第二种选择2次支持向量机模型。
![a91f104a7e69c71602e1b4fadb9cf0f8.png](https://i-blog.csdnimg.cn/blog_migrate/81c7cef161171425193b7ac6cb608695.jpeg)
混淆矩阵对比表明,2次支持向量机方法准确的多。
![b6d43f3ce11fc6bb259b3d119d365952.png](https://i-blog.csdnimg.cn/blog_migrate/ec2346f6a80b5d1398eeca315fccfbd1.jpeg)
可以将模型导出:
Export Classification Model to Predict New Data - MATLAB & Simulink
Export Classification Model to Predict New Datawww.mathworks.com另一种方法是:神经网络训练。定义18层神经网络。
![1dc9f098f61d18037b7d6a2016aeb161.png](https://i-blog.csdnimg.cn/blog_migrate/fb6b366aacd7b06e162e496b9205340a.jpeg)
![19accd76616396135871f6ee7ff8217d.png](https://i-blog.csdnimg.cn/blog_migrate/dcfaac6bac05cf363b6b1ca2859cecd2.jpeg)
得到人体动作识别混淆矩阵
![d8938f15eb93b93c6414273cd01e2a92.png](https://i-blog.csdnimg.cn/blog_migrate/c2ce4cd1fdf6925d2c5cd06782df10f4.jpeg)
总结
我们采用MATLAB,按照这个案例尝试了决策树分类,支持向量机分类,和神经网络分类,来根据传感器信号判别人体姿态。大家学习起来,加油!