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