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