Gabriele Bunkheila,Mathworks
在许多研究和开发领域,信号普遍存在。工程师和科学家需要处理,分析和提取时域数据的信息作为日常责任的一部分。一系列预测分析应用程序,信号是机器学习系统必须能够利用的原始数据,以便创造理解和信息。
在这段视频中,我们展示了一个分类系统的例子,它能够仅根据智能手机产生的加速度计信号来识别人体所从事的身体活动。我们使用统一的信号处理方法来提取少量高度描述性的特征,最后我们训练一个小的神经网络,将特征向量映射到预先记录的数据集的六个不同活动类别。我们展示了如何联合使用MATLAB®而库函数有助于以较少的设计迭代和简洁清晰的代码交付高性能的结果。
讨论的主题包括:
您好,每个人,欢迎使用MATLAB获取机器学习的信号处理技术的网络研讨会。我的名字是Gabriele Bunkheila,我是Mathworks的高级应用工程师。我的工作中的一大部分是关于帮助Matlab用户在信号处理领域,这是我的背景的位置。
所以当人们谈论信号时,他们通常指的是一些特定类型的数据,这些数据代表的值随着时间而变化。在本次网络研讨会中,我将讨论MATLAB中可用的一些标准技术,用于对信号进行定量测量,并在更广泛的数据分析工作流程中使用它们,包括,例如,机器学习算法,如聚类或分类。
在这个网络研讨会结束时,我希望您能够从基本信号操纵和可视化等简单事物开始的一些标准技术熟悉,包括绘图和检查和选择信号部分,继续进行简单的统计估计,然后在更高级或更高的信号处理主题上,例如,使用数字滤波器,例如,将信号或计算频域变换的单独组件分开以进一步了解信号变化,而最后,最终探测到自动化信号测量和提取组敏感特征从时域信号。
这里的想法是从实际波形的蒸馏信息,并使用户可以在机器学习区域中产生对数据的了解的进一步算法。此列表中的技术很重要,因为它们对许多数据分析和算法设计工作流是常见的。尽管与许多工程师的工作相关,但其中许多人经常觉得他们有挑战性。即使是实际的事实,如果使用合适的工具,它们也很容易到达。
现在,当我有更多的幻灯片给你们看的时候,在这个网络研讨会的大部分时间里,我将讨论一个MATLAB中的实际例子。让我们切换到MATLAB,然后快速描述一下这个例子是关于什么的。在这个不断更新的图中,我们将看到三个加速度计输出信号,这些信号是用手机捕捉到的——就像你现在口袋里碰巧有一部智能手机一样。
我们看到的信号与佩戴智能手机的人或对象进行的不同体育活动相对应。在这种情况下,我们碰巧知道基本事实。但我们也在尝试使用计算方法自动理解这是什么活动。所以这完全是基于信号的测量。
正如您所看到的,大多数时候我们都能成功地猜测活动的实际内容。现在,简单说明一下,我在本例中使用的数据已经被记录,所以我们不必等待新数据准备就绪。我们可以在处理完前一个缓冲区后继续处理下一个缓冲区。
因为我会在我的笔记本电脑上非常有效地进行所有所需的计算,这使得它的运行速度超过100倍,而不是实时运行。当你想到它时,这很快。我想提到的其他事情是你可以使用与数据一样完全良好的事情。
MATLAB长期以来一直能够连接到各种专业的外部硬件,以获取真实世界的信号。如今,它也越来越有能力连接移动和低成本设备。例如,MATLAB中央™上的文件交换提供免费下载,从iphone和基于Android™的智能手机流传感器信号到MATLAB。如果你对这个感兴趣,请看看里面的内容。
现在再看一下我的例子,虽然这恰好是加速度计数据,但我将讨论的技术与大多数类型的样本信号或时间序列广泛相关,即使我们必须考虑具有类似分类twist的应用。
我在这张简短的列表中收集的例子已经跨越了许多不同的行业,例如,电子、航空航天、汽车、金融、国防或航空航天。这些是我在MathWorks的职业生涯中遇到的应用程序。但是,一个全面的清单将会更长。
现在再一次,我把这个概念放在一起的原因是,即使信号分析对于许多应用和行业都是常见的,许多人仍然没有做得好。一个原因是,如果他们没有在UNI上学习信号处理,那么与信号分析相关的各个技术通常声音令人生畏。研究它们通常意味着必须学习许多特定于域的术语。
有些时候,你无法提前明确哪种类型的分析会给出你想要的答案,这使得问题变得开放式。最后,计算效率、缺乏广泛的算法库或僵化的框架等问题使得许多人使用的一些常用工具不足以完成中等复杂度的任务。
我希望在本课程结束时,您将体验到为什么MATLAB可以解决这些挑战,并成为这类工作的完美适合。在回到MATLAB之前,让我再回顾一下我们的例子是关于什么的。我们使用来自智能加速度计的三分量加速度信号。
仅仅基于对这三个标量信号的自动分析,我们的目标是了解戴手机的人在六种不同的选择或类别中实际在做什么——走路、上楼、下楼、坐着、站着和躺着。
为此,我们使用了一种分类算法。这是一类算法,它可以根据之前对一组合理的相似数据样本的了解来判断一个新的数据样本属于哪一类。它的工作方式是,首先让算法接触大量已知案例,然后对其进行训练或优化,以便尽可能准确地识别这些已知案例。
然后它可以在新的未知数据样本上运行,例如,在本例中,一个新的单个缓冲区。如果达到,新的单缓冲区可以根据它以前的经验对正确的类作出猜测。现在事实证明,如果使用的数据——这里我指的是训练和测试步骤——是实际的原始波形,分类算法的工作将会非常困难,甚至通常是不可能的。
在实践中,在进行实际分类之前,有一个非常重要的步骤,那就是从波形中提取无限多的特征测量值。例如,在这种情况下,这些测量应该能够捕获定量描述,能够区分由给定活动产生的信号与由不同活动产生的信号。
在机器学习的语言中,这种类型称为特征提取。该特征是来自信号的一组测量值。本网络研讨会的主要目的是识别主要基于信号处理技术的良好特征,也可以使用MATLAB语言自动化测量。
现在最终的说明 - 为了选择正确的特征集,这是常用的,例如使用已知的数据集 - 例如,在这种情况下,一个来自受控实验的一个,其中活动是针对我们可用的每个缓冲信号样本所熟知的活动。'见过。数据的知识是特征选择初始探索阶段的关键。
对于这个例子,我使用了来自西班牙加泰罗尼亚和意大利热那亚的两个研究小组提供的良好数据集。如果你感兴趣,你可以在下面这个地址获得自己的数据集。
所以我希望现在一般问题足够清楚。让我们更详细地看到我们如何使用MATLAB开发解决类似挑战的系统。要探索此示例,我将使用Matlab脚本。我将假设您熟悉Matlab中的脚本和函数。但是,如果你不是,你不需要太担心太多了。这些很容易掌握概念。
我希望你们能理解这次演讲的核心思想。您在这里看到的所有用绿色标注的都是注释,解释了代码正在做什么。您可以看到,要将一行代码转换为注释,必须在其开头使用百分号。例如,我在这里使用的两个连续的个人符号创建了一个代码单元格,当光标放在其中时,该单元格可以单独执行并在编辑器中突出显示。
在这个脚本中,我有许多单元格,我将逐一执行和讨论它们。脚本的第一个单元格是启动我完成的应用程序的单元格。所以我不打算再执行一次。下面的单元格加载一部分数据并绘制它。
这里我有一个我之前写的函数,它从我们的数据集读取一些数据,并返回特定的变量集。结果,我们现在有了一个向量x,包含了实验对象1在一段时间内的垂直加速度的样本。值得注意的是,该区域本身就有来自30个不同主题的录音。
我们知道我们每秒有50个样本的加速信号,因为50赫兹的采样频率如此变量FS所示。我们还具有对应于加速度向量的时间矢量t。两个t和x具有完全相同的长度,这使我们能够将前者绘制到后者。
如果我看一下这个图以及它是如何实现的,这是一个很容易在MATLAB中实现的图。第二,只需要很短的一行代码就可以生成它——绘制x变量和y变量。顺便说一下,如果你不是自信的使用MATLAB语言,这可能也是通过指向和鼠标的例子,首先选择t,按住控制,插入x,然后右击,选择像阴谋或进入情节选项卡,点击阴谋。
情节表明,记录了对象的加速近八分钟,这将是480秒。还值得注意的是,在某种程度上,这是一个简单的案例,你知道,时间样本已经过时定期间隔。所有这些都可以在许多现实世界应用中提供。一些样品可能缺失。所以我至少应该提到Matlab中还有其他技术来规范和重新处理这些类型的信号。
现在回到绘图—如果您熟悉MATLAB中的绘图,您将知道可以通过交互和编程方式广泛地定制绘图。我在这里就不赘述了。在下面的代码部分中,我将使用之前写过的一个函数来生成更有见地的情节。
除了现在有声音轴标签、标题和图例之外,这个图实际上还使用了我工作空间中可用的数据的附加信息,特别是变量Act ID,它是活动ID的缩写。它告诉我们实验对象在每个数据样本中所从事的活动是一个1和大小之间的整数。我们可以通过查看剩余的变量act标签来解释这些整数的含义。
如果我们回头看我们刚刚制作的图,这看起来很像我们的最终目标,也就是猜测每一个新的信号部分的活动。记住,在这种情况下,这是已知数据。在这里,我们还不是在猜测,而是把一些已知的知识形象化。
现在真正的问题是如果我们不知道每个活动是什么呢?在对信号进行数值分析的基础上我们怎么可能算出来呢?我认为这张图已经很有用了,因为它明确地表明,当加速度信号来自不同的活动时,它看起来确实有些不同。
仅仅通过视觉上的观察,我认为我们已经可以识别出一些模式。例如,所有垂直渲染上半身的活动似乎都有10米每秒平方的偏移值或平均值。这和g非常接近,g的理论值是9.81米每秒的平方。
所以我想我可以自信地说,这是由于引力场的垂直分量。一个轻微的例外似乎发生在受试者坐着的时候。但是每个人如何正确地坐起来可能取决于你坐得有多舒服。你可能向前或向后弯曲,这就解释了较低的平均值。
另一种模式是,来自行走活动的信号——无论是普通的行走、上楼、下楼——在其值周围的振荡幅度要远远大于像站着或坐着这样的垂直位置的静态活动。基于这些考虑,如果我们想自己解决问题,在某些情况下,这可能很简单。
例如,我们可以通过与阈值相比计算缓冲中样本的平均值来轻松区分躺下和行走。如果低于,比如说,5,那就是下蛋。否则,它就是另一个。
我们也可以通过查看信号的统计来量化这句话更加严格。在这种情况下,单个直方图将证明这一点 - 直方图显示有限间隔内的值发生的数量。在传递中,让我做出那个制作这样的乐器绘图,从头开始需要很多努力。例如,对于每个数据样本来查找该时间间隔并将其递增以遇到该间隔的每个数据样本,可以使用数据。
相反,在我的这个函数下面,内置的函数直方图做了所有艰苦的工作。剩下的代码只是将两个图排列在一起并自定义外观。函数直方图是在MATLAB的R2014b中引入并发布的,它提供了一种新的、更有效的绘制直方图的方法。
顺便说一下,假设计算均值,某个偏差的均方根值很简单。因为MATLAB。如果你使用不同的环境或通用编程语言,没有数学支持,你可能会发现,你有像这样的简单操作,可能需要相当多的点击,或至少新鲜的记忆基本的数学,并开始从头调用这些操作。金宝app
现在回到简单区分不同活动的相似方法。我们可以很容易地根据其他测量来区分站立和行走,比如,标准偏差或均方根值,就像这个直方图显示的那样。
但是,如果我们不得不在这种情况下散步和走上楼之间的差异,那么呢?这就是我们所看到的。对于这两个,我会说,这在这种情况下显示了类似的平均值和类似的标准偏差。如果您了解统计数据,您可能会思考更高阶时刻更有的东西可能会给我们更多信息。而且我猜你可能想要继续热情,因为从统计观点来看,如果你在这里看各种科目,你很快就会意识到这两件事几乎是一样的。
所以对我来说,这里的主要外卖是为了区分这两个统计分析的信号是不够的。真的,我们需要做的是看看事情随着时间的推移,因为这将允许我们测量像信号加速信号的振荡速率。
在假设人们走得更快的情况下,这可能是有用的,例如,当他们走下楼时,比他们走上楼时更快,甚至振动本身的形状。如果我们认为在普通步行中所做的运动类型不同于在下楼时所捕捉到的运动类型,那么这将是相关的。
为了准备随着时间的推移分析变化,需要进行一个重要的观点。我相信我们已经建立了我们有两种主要类型的原因,这些原因有助于数据集中的加速信号。一个是对象相对于引力场的对准,另一个是由它们的主体运动产生的能量。
两者之间的一个大区别是重力贡献几乎是恒定的。如果我们想要减少自信,我们可能会说轴承更慢。相反,身体运动是更快的。当我们专注于信号如何随着时间的推移而变化时,我们非常希望限制我们对身体运动产生的贡献的关注,因为这就是我们试图对的贡献。
然后他们的相关问题是,有没有办法把这两个混合在一起的信号分离出来这样我们就可以分别分析它们了?虽然在一些情况下,这个任务是相当困难的,但在广泛的实际情况下,标准的方法是设计和应用线性数字滤波器或简单的数字滤波器,因此,数据。
数字滤波器工作得特别好,当我们想要分离或去除的信号分量是根据随时间变化的速率定义的,或者用一些更具体的术语,通过它们所谓的频谱频域分量。例如,在这种情况下,我们希望只保留由于身体运动的贡献。假设它们的变化比每秒一个振荡要快。这大约是一个普通步行者每秒的步数。
我们想要放弃变化较慢的贡献。在单一处理术语中,这意味着愿意为数据设计并应用适当的高脉冲滤波器。我将在整个过程中重复这些想法。
现在,如果我必须使用通用语言,而没有特定的信号处理库,那么设计和应用数字滤波器的任务将相当艰巨。尤其是设计阶段,需要相当多的数学知识和大量特定领域的知识。在MATLAB中,有许多不同的方法可以设计一个数字滤波器。
例如,您可以选择完全通过编程来完成,这意味着使用MATLAB注释或实际上使用内置应用程序。让我们首先看看后者是什么样子的。当你第一次处理一个问题时,使用应用程序通常是一个好主意。要做到这一点,我到MATLAB工具栏的Apps标签,向下滚动到信号处理和通信区域。
在此,我们将选择过滤器设计和分析工具。对于更高级的过滤器设计,您可能还想尝试过滤器构建器应用程序。过滤器设计分析工具由几个部分组成。例如,此筛选器规范窗格将帮助我们为我们的过滤器指定正确的要求。在这里到左边,我们开始定义我们正在寻求实现的目标。在这种情况下,我将选择高通滤波器,但您可以看到很多选择也是可能的。这是通过标准的低通,带通,带停止过滤器,以及一系列更先进的设计。
再往下,我们被要求在FIR和IIR中选择。这是两个主要的数字滤波器家族。如果你知道数字滤波器,你可能有一个好主意,选择哪两个和这里列出的设计方法将产生相当多的共鸣。
这里我将跳过细节,只使用这个选项。然后移到右边,在上面的规范窗格的帮助下继续捕捉注释。我要说的是,我们使用的采样频率是50赫兹。我们希望保持不变,也就是说,我们希望衰减到1db或0db的倍数,所有信号分量的振荡速度都要比每秒一种类型或1赫兹的振荡速度快。
让我们实际上稍微慷慨,并将这个FS值设置为0.8赫兹。我们还希望确保该文件左侧的所有内容小于F传代F STOP至少由给定数量的DBS衰减。我会把这个设置为0.4,并相应地这个停止到60 dB。这确保所有振荡速度慢于0.4赫兹或每秒的时间,通过滤波器比较小1,000倍。
最后,通过按下设计,我们实现了一个过滤器,满足我们的要求,我们有一套分析工具,可以在这个应用程序中验证过滤器的行为是预期的。例如,现在我们在研究所谓的频率控制响应。如果我需要确认这是符合规格,我可以覆盖规格掩模和放大与滤镜所有者的要求。你可以看到0.4,0.8。
如果我想了解运输行为,通过按这个按钮,我可以得到脉冲响应或阶跃响应。一旦我的滤波器设计好了,我真正想做的就是把它应用到我的信号上。记住,在这种情况下,目标是消除由于加速度计与引力场对齐而产生的缓慢变化的影响。
要使用MATLAB代码使用此过滤器,我可以选择两种类型的方法。我可以转到文件并将过滤器导出到MATLAB工作区作为一个或多个变量。或者我可以生成一些MATLAB代码,以通过程序方法来实现我刚刚交互方式的所有代码。
您在这里看到的代码是自动生成的。然而,需要注意的是,我也可以决定单独使用类似的注释。自动生成这个也可以帮助我获得一些洞察力,这样下次我可以更快速地以编程方式设计我的过滤器。
但更重要的是,它现在给了我一个快速实现过滤器的方法,从我的代码只使用这个函数代码。我不会放弃这个函数,因为我之前已经在Work It文件夹中保存了可用的版本,名为HB Filter。
你可以看到这看起来就像我们刚刚生成的那样。返回到我的脚本,您可以通过使用一行代码通过我的预先函数创建过滤器。在下一行中,我正在将字段播放到我的垂直加速度。这创造了一个新的信号,我们希望只发现由于身体运动导致的贡献。如果我执行该部分,
我还画出了新的滤波信号和原来的信号的对比图。在区块中,我们可以看到新信号现在都以0为中心,没有由于重力而产生偏移。每次新活动启动时,您还可以看到一些瞬态行为。这是完全正常的。正如我们几分钟前看到的,这可以在设计过滤器时被详细量化。
所以现在我们可以重新启动的一点,以分析信号的行为随着时间的推移。让我们再次回顾我们想要做的事情。我们正在尝试选择合适的一组测量,可以捕获不同活动生成的信号之间的差异。
为了调查哪种技巧更有可能有效,一个有用的方法是分别观察每个活动。我想向你们展示一个非常有效的方法,在MATLAB中选择信号的一部分,基于我们所说的逻辑索引。举个例子,当我看这幅图时,我想把这部分信号与行走分离开来。
该信息一旦这些样本存储在我的工作区中的矢量ID中。因为这里我们有一个以上的一项活动的一个例子,我们可能会说我们只想要那些样本,比如,比如少于250毫秒。如果我们正式化我刚才以普通英语说的话,那就转化为这一代码。
这里的结果是一个和我的信号长度相同的向量在感兴趣的区域是1,其他地方是0。当我们用这个向量来索引我们的信号或实际的时间向量时,结果是我们感兴趣的信号的单个部分。
现在我们可以更容易地更详细地观察这个行走部分。我们可以放大并确认信号振荡相当有规律。粗略地说,这个信号是有序周期的。
现在一个很好的问题是,我如何测量振荡有多快,甚至如何定量描述振荡的形状?一个好的答案是把信号转换到频域而不是看它的频谱表示。
例如,我现在知道的很多人都会抛出计算NFFT的想法,这是快速傅里叶变换的速记。在实际情况下,通过孤立拍摄的裸FFT算法提供的结果仍然是几步远离变得实际上有用。
更一般地说,你要找的是谱密度或功率谱密度。现在你知道如何从头计算了吗?您可以这样做,也许是基于FFT函数的可用性,它随MATLAB的基本安装而来。但一般来说,如果你知道你需要使用的运算或算法的名称,你可以搜索MATLAB文档或这里的函数浏览器。在这里输入谱密度会引出很多函数的名字。
例如,我在这里认识一种特殊密度估计的方法,我记得它的名字叫做威尔士方法。关于如何使用这个函数的一些快速指南,我可以将鼠标悬停在它的名称上,然后浏览左侧的上下文指南。
或者我可以点击链接查看完整的文档。这里提供了一个语法列表。我还可以找到解释算法和链接到相关页面的讨论技术主题更多的在一般情况下,例如,在光谱分析一个页面,其中包括介绍主题,可用的方法列表,讨论当每个特定的方法更合适。
现在回到我的脚本,在我的信号上运行这个P Welsh函数并指定采样频率,很快就能得到一些有见地的结果。结果是这样的。在x轴上,频率从0到一半的采样频率,也就是50赫兹。在y轴上,功率密度的单位是dB /赫兹。
当这幅图的值较高的区域很可能携带我想要的信息。在这种情况下,这个在0到10赫兹之间的峰值模式包含了很多关于时域振荡的速率和形状的可测量信息。
对于那些至少对信号理论有点熟悉的人来说,画一个与乐器产生的信号相似的例子可能是有用的即使在这种情况下这甚至不是声音信号。这里你会讨论一个基本频率大约是1赫兹,还有一些在那个频率的倍数处的谐波。
这些峰值之间的频率距离告诉我们信号的振荡速率,峰值的相对振幅与振荡的形状密切相关,有点像我们所说的音乐信号的木材。为了验证这些陈述,让我绘制从走在上面的频谱,并将视野限制在0到10赫兹之间。
我在这里注意到的是,上楼时的峰值更接近,并向左推,这告诉我,在这种情况下,振荡的速率更低。而且,基频右边的峰值的振幅下降得非常快,这告诉我,上楼时的振荡形状不是那么突然,几乎是平滑的,更像一个简单的正弦信号,理想情况下,它只有一个峰值。
所以这些峰的位置和振幅带有描述性的定量信息,如果测量这些信息,就构成了良好的描述性特征。为了进一步说服自己,我还可以比较数据集中30个受试者的所有工作信号的频谱,就像我在这里做的那样。尽管这里使用的垂直轴和结果图的刻度不同,你可以看到,事实上,前几个峰值的位置和它们的相对刻度在30个可用的记录中相当相似。这是我数据集中的30个不同主题。
现在回到我们的行走信号频谱,我们的目标不仅仅是检查这情节视觉,但实施程序化机制以便我们能自动化测量过程的每一个新的信号,系统提供的一部分。
你可以看到,从图中提取这些峰的位置和振幅的信息是很容易的,但如果你在生活中至少尝试过一次,你可能会意识到这实际上并不像最初看起来那么容易。例如,我们可以通过使用MATLAB函数max For maximum value快速得到峰值的位置和振幅,但是从那里出发就不那么简单了。
幸运的是,MATLAB的信号处理工具箱有一个叫做“精峰”的函数,就是用来做这个的。现在,如果我们使用这个函数精确的峰值而不提供任何其他信息,只提供原始的特殊密度,那么这就是它返回的结果。这是在我的地块上发现的完整的当地山峰。其余的代码都不只是负责绘图。
虽然这还不是我们寻找,如果我们花费更多的精力来定义清醒的例子,告诉有多少山峰函数应该返回什么是我们需要的峰值突出或附近的山峰之间的最小距离,我们所期望的,那么结果是更多的鼓励。
只用几行代码,我们现在就有了一个程序化的测量方法,它可以自动化,而且对我们的信号特征具有高度的描述性。我在这里用于光谱密度的速度测量方法也可以用于其他类型的分析。
我想到的一个例子是自相关函数,这对于估计与单个采样频率相比非常低的基本频率特别有用。我只是去展示了一个快速的例子。
这就是我们行走信号的自相关方式的样子。自相关始终对称,中间高峰值,表示信号的能量。并且对于周期信号,中央右侧的最大峰的位置定义了信号的基本频率。
为了让我的观点更好,让我覆盖自相关曲线,沿楼走路,沿着楼下行走,并在右边的第一个峰值周围放大。这两个信号具有非常相似的频率,并且它们各自的第一峰可以相对良好地分离,至少用于彼此的采样周期。
再一次计算自相关,我不需要记住任何公式,只需要一行代码。现在我可以继续讨论自动化它们的相关度量和策略,但是为了演示的目的,我将在这里停止。
一旦我选择了一定数量的测量,我认为描述不同阶层之间的差异的我的问题,我需要组织在一起,以便为每个新单buffer-we将设置样品能产生的集合所有的测量或特性的特定实例。
这是我这样做的方式是,我收集了我们在叫做Buffer.M的各个函数的所有函数中都完成了所有步骤。这里用于每个新的缓冲区在三个方向上的所有加速度样本,我都在应用滤波器,计算平均值和rms值,然后使用辅助功能在此处计算协方差和频谱特征。
如果我在这里下来,你可以识别X COR进行自相关,查找峰值功能与P威尔士函数和类似的方式,找到峰值。这与几分钟前我们一起完成的内容非常相似,加上我尚未详细讨论的时间,这是一种简单地衡量振荡能量如何分布在功率范围内我的信号。
我真正喜欢这个函数的地方是,如果我测量除注释和空行之外的代码行数,它加起来只有65行代码。在这里,我使用这个s日志函数,可以从MATLAB中央文件交换免费获得。
总结一下,现在对于每个新的信号缓冲区我们都有一种方法来提取包含66个信号特征的特征向量。此时,如果我们的问题足够简单,我们可以考虑放置一些自定义逻辑,查看特征向量并根据其中的值,实现一种策略来猜测信号的正确类别。这在理论上是可能的。
这种逻辑的样子如果均值大于x和RMS大于y和第一个峰值的位置,例如,不仅仅是Z和第一个峰值的振幅小于W,然后信号是由步行上楼,说。实际情况是,随着问题的复杂性增加,使用这种手动逻辑机制是非常不实际的。
此外,它并不能保证我们利用特征向量中的所有信息。这些特征真正常用的方式是通过我们之前所述的分类算法来实现。在Matlab中有许多类型的分类算法,更具体地说。在这种情况下,我正在使用神经网络。
在这一行代码中,我创建了一个网络。如果您熟悉神经网络,您可能会想知道,在这种情况下,这个简单的语法创建了一个前馈网络,它有一个由18个神经元组成的内部层,这些神经元可以选择这些神奇的数字。但是对于这个简单的例子,我们忽略它。
在另一行中,我使用我的数据集的一部分来训练网络。训练过程适应模型的内部参数-在这种情况下,网络-以便它能最优地识别提供的信号段的正确活动。请记住,我的数据集将由录音和录音的每个部分的已知活动ID值组成。为了训练这里的网络,我们两者都提供。
当我触发网络训练时,您会注意到出现了一个用户界面。这让我们了解了训练过程的最新进展,对于监控复杂网络的优化非常有用,因为训练可能需要更长的时间。在这种情况下,一切都发生得很快。我的网络现在接受了分类新信号的训练这是它从未见过的。
我现在可以在新数据上运行网络,并采取定性看它的表现。我们现在终于来到了我们最初开始的地方。对于每个新的缓冲区,在这里,我们正在绘制三个组件的加速度,计算我们的66个功能,在线,最后使用我们的火车网络来预测我们正在做的事情。
因为这些新信号仍然来自数据集,所以即使他们对我们的分类算法新,我们仍然知道他们所属的活动,所以我们可以将我们的自动化猜测与地面真相进行比较。
最后,要真正评估分类算法的性能,而不是像我们刚才所做的那样在线观察它的行动,我们通常会让它以批处理模式对数据集的新部分进行分类——一下子全部分类——然后计算一些统计数据。例如,直观地总结分类算法性能的一种常见方法是混淆矩阵,我将在这段代码中创建它。如果我们想去掉一个数字,我们可能会看右边这里,说整个系统在测试集中的准确率接近92%。
更多通常,该矩阵显示给定目标类别和算法的猜测之间的所有耦合的计数,右猜测位于矩阵对角线和对角线的其余部分。例如,在这种情况下,这两个区域在这里显示出坐着和站立之间的重要猜测。如果我们想提高我们的算法的表现,我们可能会专注于识别更多功能,以确定有助于更好地区分这两个特定情况。
好的。现在,让我回到我的幻灯片。如果我必须总结这个例子,我们的主要目标是确定从时域数据或信号中提取高度描述性特征的方法。我的三个主要收获是,我们能够完全通过重用现有的信号处理功能来实现这一点。总的来说,我们只使用65行代码就自动化了66个特性的度量。
我们也掌握了语言和内置可视化功能的优势,以建立有效的工作以及没有。通过这样做,我们能够快速地到达这项任务的底部。关于我们所做的内置功能的大量使用,我特别热衷于提醒您是让我们不得不重新发明的事情的数量。
如果我看一下我们用过的样本函数,这些就是我们需要从网上,或者课本,或者网站上的论文中找到的一些基本公式,以及MATLAB中的代码。有了信号处理工具箱,我们就可以节省所有的时间。
我们还充分利用了神经网络工具箱,它允许我们用两行代码构建和训练传统类型的神经网络。如果您曾经学习过神经网络,您可能会记得,即使是用基本的优化算法训练简单的网络,如果从头开始,也是相当复杂和容易出错的。
我已经提到过,神经网络都代表了分类算法的一组特定的可能选择。对于贝叶斯分类器中支持向量机的所有其他通用分类算法,可以参考Statistics and Machine Learning Toolbox™。金宝app
统计学和机器学习工具箱还涵盖了其他机器学习技术,如聚类或回归。
这就是本次网络研讨会的结论。我希望您喜欢它,如果没有其他的东西,至少我设法让您对MATLAB及其工具箱提供的信号处理和数据分析的广泛函数集有了一个想法。我还希望我传达了这样的想法:简单的可视化函数和内置的MATLAB应用程序可以很快地完成复杂的发现周期。这也要感谢简洁的MATLAB语言,它允许我们在几行代码中执行高级处理和分析任务。
现在,如果你在这一点上有问题,请将它们发布到Q&A面板,这是由WebEx面板上的一个问号表示的。我们会花几分钟回顾一下,然后回到网上回答你们的问题。
您还可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。