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