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