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