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