Gabriele Bunkheila, MathWorks
越来越多的应用需要在时间序列和传感器数据上联合使用信号处理和机器学习技术。MATLAB®通过在单个环境中提供全方位的建模和设计能力,可以加速数据分析和传感器处理系统的开发。
在该网络研讨会中,我们展示了能够识别人类受试者从事人类主体的身体活动的分类系统的示例,仅基于由他或她的智能手机产生的加速度计信号。
我们在MATLAB(包括数字过滤和频域分析)中引入公共信号处理方法,有助于提取来自原始波形的描述功能,并且我们显示了平行计算如何加速大数据集的处理。然后,我们讨论如何以编程和交互方式探索和测试不同的分类算法(例如决策树,支持矢量机器或神经网络)。万博1manbetx
最后,我们展示了使用MATLAB的自动C / C ++代码的使用来部署用于嵌入式传感器分析的流分类算法。
记录:2018年3月21日
欢迎使用MATLAB的传感器数据分析的信号处理和机器学习技术上进行该网络研讨会。我的名字是Gabriele Bunkheila,我是Mathworks的产品管理团队的一部分。我的背景是信号处理,这也是我在这里度过的大部分职业的区域,帮助工程科学家将Matlab应用于自己的挑战。
在这个网络研讨会中,我将讨论一些标准MATLAB技术的应用,以进行研究问题和产品设计工作流程,这些工作流程需要联合使用机器学习 - 例如,群集或分类方法 - 在信号或时间序列上,意思是采样一个贬值随着时间的推移而变化。
正如我们所看到的那样,这些问题的大部分复杂性源于机器学习和信号处理中的域名知识的需要。这通常会带来挑战。无论您是不熟悉的信号处理,机器学习,还是两者,都不是,我希望会话将帮助您了解MATLAB如何大大加快这些问题的算法设计工作流程。
我们还看到了推动机器学习算法以及单一处理的不断增长的行业趋势,并更接近实际信号传感器。在这里,我将引用那种应用程序作为传感器数据分析或嵌入式分析。由于此类产品的开发造成了额外的工程挑战,我认为在会话结束时分配一s manbetx 845段时间是有用的,以查看Matlab为这些类型的工作流提供的额外支持。万博1manbetx
所以这里是我们看看的课程清单。我们将花费一段时间重新审视常见的信号处理方法如何应用于准备或预处理信号并提取描述性功能。我将展示如何在Matlab中选择,列车和测试分类或模式识别算法,包括一些简单的方法来扩大计算密集问题的性能。这样做会让我们有机会探索许多基本的MATLAB功能,从交互式应用程序到内部语言构造,为工作流启用和加速算法开发。
最后,我们将讨论一些MATLAB功能,用于设计在线预测系统,包括DSP功能的设计和仿真以及来自预测算法的DSP功能的生成,以使它们在嵌入式体系结构上运行。
现在我稍后会回到幻灯片。但我将花费大部分时间讨论运行matlab的实际例子。您正在查看的是使用智能手机的加速度计信号捕获的三个组件。信号由戴着智能手机的主体生成固定位置并在其身体上的固定位置并接合不同的体力活动。我们正在运行一种算法,好像它在实时信号上操作。但在这种情况下,我们正在使用标记为录制的数据进行验证。
所以我们知道了基本事实。但我们也试图通过信号处理和机器学习方法自动了解它们在做什么。正如你所看到的,大多数时候我们都能成功地猜测那个活动。
现在我想制作一个简单的观点,这只是一个简单的例子,走加速度计数据。但我讨论的技术与广泛的应用以及大多数采样信号或时间序列相关。
为了说明我的观点,我收集了一个简短的例子列表,这些例子是我个人与MATLAB用户一起工作时遇到的,一般来说,他们使用相同类型的技术。这些已经捕获了许多不同行业的用例,如电子、航空航天、国防、金融、汽车。再说一次,即使这只是一个随机的例子列表。我们在这里讨论的技术的相关性要广泛得多。
在回到Matlab之前,我将利用最后一个幻灯片,以查看我们刚才看到的示例的不同部分。我们采用来自智能手机的样本加速的三个组成部分。我们预测了主体的身体活动,作为六种不同的选择或课程,走路,走楼梯,走下楼梯,坐着,站立和铺设。
通过分类算法进行预测。分类描述了一种流行的机器学习算法。关键的想法正在猜测或预测新样本的类,在这种情况下,基于先前的类似数据的知识。首先,它的工作方式首先,该算法用大量的已知或标记案例培训,优化其自由参数,以尽可能准确地识别这些已知情况。
曾经接受过培训,它可以在未知的新数据上运行,以制定猜测或预测该新数据的最可能类。通常,训练阶段的数据具有更多数据和计算密集,而不是测试或运行时阶段。因此,对于嵌入式应用程序,在主机系统或计算机集群上运行训练阶段并不罕见,但仅将固定的预训练算法部署到嵌入式产品上。
无论训练或运行时使用,分类器都不太可能处理这样的原始波形。在实践中,对于每一个信号段或缓冲,一旦你有了一种提取一组有限的测量,通常称为特性,从原始波形,底线选择使用什么功能是他们应该捕获信号在同一类之间的相似之处和差异的不同。我们将用剩下的大部分时间来展示如何使用MATLAB来设计这两个大算法步骤,从最初的探索阶段开始。
现在作为一个快速注意,通过类似的任务或项目工作的关键部分是参考数据集的可用性。这将是在受控实验中获取的信号记录的集合,并仔细标记,以便信号是已知的并且与正确的活动相关联。在此示例中,我借用了两个研究小组可提供的良好数据集,分别从西班牙和意大利提供,并且在此幻灯片中的地址上可用。
我希望这个问题现在已经很清楚了。回到MATLAB。在下面的文章中,我将假设您熟悉MATLAB的基础知识,包括脚本和函数以及基本的绘图和可视化。
要浏览此示例,我将使用由可以独立执行的许多代码单元格形成的脚本。我将跳过第一个单元格,我曾经在一开始就启动完成的应用程序。执行该单元的执行此内容加载我的数据集的一部分并绘制它。
现在,我们现在不在乎我如何加载数据或产生此绘图。让我们来看看我们提供的数据。我们有一个向量,ACC,在一段时间内包含垂直加速的样本。数据集本身是30个不同对象的3D加速度记录。加速度将以每秒50个样本样本。这是采样频率变量FS的含义。我们还有时间向量,T,acc的相同长度,这很好。
T和ACC可以贴上另一个。并且情节向我们展示了这个主题,我们有大约8分钟的样品。知道这里的时间是经常间隔的。在某些应用中,可能不是案例或样本可能丢失。但请记住,MATLAB有足够的技术来规范和预处理这些类型的信号。
要注意的另一个明显的事情是其他长向量,actid,活动ID的速记,它告诉我们每个数据样本对应于1到6之间的整数的活动。我们可以通过查看剩余的变量ACC来解释这些整数标签,所以1步行,2,走上楼梯,3,走下楼梯,等等。
因此,这里的情节看起来非常类似于我们的最终目标,这是识别给定的一部分信号的活动。但请记住,这是已知的,标签数据。我们只是可视化可用信息。我们想要做的是设计一种可以从此信息中学习的方法,以猜测没有以前知识的新数据。
那么我们怎么办?所有首次尝试,我们都会尝试使用直观的方法。因此,例如,在此绘图中,您已经看到加速波形确实不同,具体取决于活动。你可以看到几乎所有活动都有一个平均约10个,即G或9.8,而1更差别0.猜猜是什么?这铺设,因为身体与引力场具有不同的取向。
然后有三个看起来相当静止——毫不奇怪——坐着、站着和躺着,而其他三个似乎上下摆动得更多。我们可以从很简单的方法开始,对部分连续样本进行一些统计测量不管它们在时间上如何分布。
例如,查看步行和铺设样本的分布,可以看到只是计算与阈值相比的平均值 - 所以你看到,5,这里 - 会给我们一个非常有机会在他们俩。在这种情况下,说,步行和站立之间的类似考虑因素,但在这种情况下,我们可能希望测量标准偏差,并将其与每个秒平方米的1或2米类似的东西进行比较。
但是,如果我们不得不在普通走路和走上楼梯之间的差异呢?在这种情况下,平均值和标准偏差或分布的宽度看起来非常相似。在这里,您应该真正考虑的是更高级分析值如何随时间变化,并查看振荡的速率或形状等内容。
这可能是一个直观的原因,因为当他们走下楼梯时,人们在走上楼梯时,人们会移动更快,或者对于不同的活动而不同的运动。这正是信号处理方法开始成为图片的一部分的地方。
在此之前,让我强调一下我刚才所做的。我只是随意地画了三个直方图,并很快地讨论了它们的含义。如果你必须从头开始用手做的话,即使是这个任务也可能是相当困难的。但这类东西在MATLAB中都是单个函数。所以,尽管我使用了一个预先编辑的功能,把这两个图放在一个图形中,并给它们正确的颜色,但在它里面,对直方图功能的一个调用为我做了所有艰苦的工作。
与旧的历史图相反的直方图被引入并发布于MATLAB的R 2014b。它为绘制直方图提供了一种新的、更有效的方法。
现在要随着时间的推移分析变化,我们希望专注于由身体运动引起的加速度。假设身体运动产生更快的变化是合理的,而重力贡献通常几乎是恒定的。如果我有两个贡献,它将共混成单个信号,我想将它们分开,那么通常适用的技术是数字滤波。
例如,在这种情况下,我们希望仅比每秒比约一个周期更快地保持振荡,这是一个粗略的数字,用于平均每秒步长的步骤数,并丢弃振动较慢的贡献。使用正确的术语,需要为我们的数据设计和应用适当的高通滤波器。当我们经历过程时,我会重复这些想法。
现在设计和应用数字过滤器很难,除非您有正确的工具。设计阶段特别需要相当多的数学和许多特定于域的知识。在MATLAB中,有许多不同的方式可以设计数字滤波器。例如,可以选择完全以编程方式选择,这仅使用MATLAB Commons或通过内置应用程序来进行。
让我们首先看看后者是什么样子的。当你第一次处理一个问题时,使用应用程序通常是一个好主意。要做到这一点,我到MATLAB工具栏的Apps标签,向下滚动到信号处理和通信应用程序组。在这里,我将选择过滤器设计和分析工具。对于更高级的过滤器设计,您可能还想尝试filter Builder应用程序。
过滤器设计和分析工具附带了几个部分。例如,此筛选器规范窗格将帮助我们向我们的过滤器指定正确的要求。在这里到左边,我们开始定义我们正在寻求实现的目标。在这种情况下,我将选择一个高通滤波器。但是你可以看到很多其他选择也是可能的。
在这里,有更多的技术选择。如果您了解数字过滤器,您可能会知道FIR和IR的意思。在此列出的设计方法可能会产生相当的响应。在这里,我将跳过细节。我只需选择其中一个选项。搬到右边,我需要做的就是使用上面的规范窗格捕获我的要求。
我要说的事情包括我们使用50赫兹的采样频率。我们想要保持不变;也就是说,我们希望减少1或0 dB的因子。所有信号组件更快地振荡超过每秒一次或1赫兹。让我们慷慨,并说0.8赫兹。然后,该另一个值的左侧的一切F失值至少由给定数量的DB衰减。我会把这个设置为,比如,这个astop为0.4赫兹和60 dB。这意味着所有振荡速度慢于0.4次,通过滤波器更小1,000倍。
最后,通过按下设计,该工具为我们提供所有工作。我们最终结束了一个满足我们要求的过滤器。我们在此应用程序中有一组分析工具可用,以验证过滤器是否正常行为。
例如,现在我们正在查看频率的被称为保证金表响应。如果我需要确认这是尊重规范,我可以覆盖一个规范掩码。或者如果我想了解瞬态行为,按按钮,我可以快速可视化像步骤或脉冲响应的东西。
一旦我的滤波器设计好了,我真正想做的是在MATLAB中使用它将它应用到我的信号上。为此,我可以选择两种方法。我可以将过滤器作为一个或多个变量导出到我的MATLAB工作区。或者,我可以生成一些MATLAB代码,通过编程脚本交互地实现我刚才所做的一切。
您在这里看到的代码是自动生成的,就像这个函数的头文件告诉我们的那样。然而,我也可以决定单独使用类似的注释。为我自动生成这个也可以帮助我获得一些见解,以便下次我可以更快速地以编程方式设计我的过滤器。但更重要的是,现在通过使用这个函数调用,我可以从自己的代码中快速实现过滤器。
我不会放弃这个新功能,因为在我的工作文件夹中已经有一个以前保存的版本,叫做HP filter。回到我的脚本,你可以看到我用一行代码通过预设函数创建了一个过滤器。在下一行,我将过滤器应用到垂直加速度上。这就产生了一个新的信号,我们希望在这个信号中只发现身体运动的贡献。如果我执行这一节,我也画出了新的滤波信号与原始信号的对比图。
在图中,我们可以看到新信号现在全部以0,如预期为中心。这是希望的。存在由于过滤器引起的一些瞬态行为,这是完全正常的。
现在让我一次只专注于一项活动。我该怎么做呢?有一个非常有效的MATLAB特性叫做逻辑索引,我可以用它来达到这个目的。看看这个。假设我想分离信号的移动部分。活动类型存储在向量actid中。当actid = 1时,我在这里检查。因为我这里有两个工作部分,你只看时间小于250秒的时候。
以下结果是与我的信号相同的传染媒介,即我可以用于仅选择符合这些标准的样本。这是我们的工作细分。我们可以放大并确认信号相当定期地振荡,几乎定期振荡。现在问题是,如何测量这是振荡的速度或一些参数来测量这些振荡的形状或指纹的速度?
一个好的答案是通过观察信号的频谱表示,或者有人会说通过计算它的FFT。要比FFT好得多,FFT是一种非常低级的操作,正确的说法是功率谱密度,它可以使用FFT和其他一些部件。再一次,我最好的选择是专注于我的目标,看看MATLAB是否可以简单地为我做到这一点,就像情况一样。
出于估计我们信号的功率谱密度的许多功能,我正在使用威尔士方法,这很受欢迎。根据这里的代码,我有我的频谱。在X轴上,我的采样频率的0到1/2的频率为50赫兹。并且在Y轴上,我每赫兹或功率密度都有DB。然后该区域当该图中的值较高时可能携带我以后的信息。
对于我们的信号,这种峰值在0到10赫兹之间,能量更高,包含了很多可测量的信息。如果你上过突然信号理论课,你会记得周期性或几乎周期性信号的频谱。我们可以看到一个基本频率,大约是1赫兹,在这个频率的几倍处有一些谐波。
对于从中提取信息,这些峰之间的频率的距离是时域振荡的速率。峰的相对幅度描述了振荡的形状,有点像音乐信号中的音色。为了验证这些,我还将向您展示走在楼梯的顶部的范围,在0到10赫兹之间的范围内。
在这里,走上楼梯可以产生较慢和更平滑的运动,因为这些峰的较慢都被推到左侧。并且时域的平滑度使得基本右侧的峰值非常快速地减少,表明时间域转换更柔软。如果这听起来不熟悉,请考虑纯正弦波的频谱,其频谱中的单个峰值与方波相比,这是一个充满高频谐波的方波。
一旦确定了特殊山峰携带信息,我们希望有一种程序化的方法来测量它们的高度和位置。这是下一个问题。如何识别曲线中的峰值?与一些人所想的相反,这并非微不足道。信号处理工具箱(Signal Processing Toolbox)提供了一个名为“查找峰值”(Find Peaks)的函数,它正是为此而构建的。
如果我们在提供其他信息但是我们的原始光谱密度的同时使用它,那么它将返回在我的绘图中找到的完整的本地峰。但是,如果我们在定义我们想要的努力时,例如,它应该返回多少峰值,我们所要求的高峰突出或者我们期望的附近高峰之间的最小距离是多少,那么结果要多鼓励。并只是使用几行代码,我们现在有一个可以自动化的程序化测量方法。并且它非常描述我们的信号特征。
在我在开始时向您展示的示例中,我使用了一些更多的信号处理测量来提取其他功能。但我认为现在您可以获得从信号中提取特征的探索方法的一般精神。我在此阶段结束时所做的是收集所有有用的测量值,以便为每个可用的新信号段都提供,我能够自动产生所有测量或描述它的功能的集合。
让我快速给你们展示一下。对于这三个方向上的每一个新的加速度采样缓冲器,我都在计算平均值,过滤掉重力的贡献,计算均方根值,测量谱峰,以及其他一些事情。如果我看一下谱特性子函数,你可以认出几分钟前的PWELCH和Find Peaks函数。
总共返回每个新信号缓冲区的高度描述性功能,它将其传递为输入。我真的很喜欢的是,如果我测量净数的代码行,则排除评论和空行,那么只有54次总和。这是66行的代码行为66个功能或每种功能远低于单行我发现表示Matlab语言如何简洁地提高理解和生产力的优势。
有了这个,我认为我们现在可以说我们通过我们的探索工作流程中途。我们建立了一种用于提取每个给定信号段的有限组件的方法。我们现在需要设计一个能够学习如何将测量相关联的分类器或在这种情况下将66个功能组织到六个可用选项之间的活动或选择的活动。
为了使用分类器,我们首先需要将所有数据映射到新的基于特征的表示。让我打开另一个脚本,快速地向您展示我的意思。假设我们首先重组了我们的数据,比如8分钟的样本乘以30个实验对象,在大量等长的小缓冲中,比如128个样本。我们现在做的是,对于每一个缓冲区,我们调用特征提取函数来计算66个特征。最后我们得到了一个新的特性数据集,它的列数和可用缓冲区的行数一样多。
由于分类算法通常需要学习大量数据,从整个数据中提取特征可能需要很长时间。如果在这个探索阶段,第一阶段决定使用不同的功能,那么整个操作需要重新开始。让我在小范围内说明我的意思。
让我们将这里的数据缓冲区数量减少到仅仅600,然后运行这个。我在循环开始前启动一个计时器,然后马上停止。当我的600个数据缓冲区一个接一个地转换为特性时,我们可以监控这个过程。这个过程大约在17秒后结束。让缓冲区的数量增长,这个会随着这个线性增长。
现在想一想。用于循环的每个周期中的计算全部彼此独立。因此,如果我们有更多的计算资源,我们可以开始考虑在可用的计算节点上分发负担。我怀疑你大多数人会认为这将是一项艰巨的任务。所以让我挑战这种感知。
我在这里做的是将我的关键字更改为parfor,确保启用了一个并行池,然后再次运行我的循环。现在,缓冲区由在后台运行的四个服务器Matlab工作者会话池中异步处理。而且我在原来的一小部分中完成了。
根据特定问题,实际的性能增益将改变。底线是,因为我的机器安装了并行计算工具箱,我能够在本地打开许多Matlab工作人员等于我机器上的可用核心数量。我在这里有四个核心。但随着外部资源如集群,数字可以随意驱动。然后我能够简单地通过更改为Paret,类似于并行地分发长期循环的独立迭代。
完成后,我们可以保存特色数据集,回到问题所在。我们把问题留到了需要选择分类算法的阶段。现在数据已经准备好了。当您需要分类器时,您可以在大量不同类型的算法中进行选择。MATLAB文档提供了一些关于哪些类型最适合哪些问题的指导,但整个尝试和错误的过程可能会令人生畏,特别是如果您不熟悉一般的机器学习,或者不熟悉合理数量的分类算法。
要从发布2015A发行方式解决问题,Matlab有一个名为分类学习者的新应用程序。您可以从“应用”选项卡中选择它。但是,让我只需用预设的功能数据加载它,并通过从脚本运行常见的分类学习者来打开应用程序。
要启动,我加载我的数据并在此处选择此选项,请在此处丢弃我的数据集以进行验证。知道在加载脚本中的数据之前,我也将其作为Matlab表的范围。这将允许该工具将名称与我的功能相关联,并为每个系统显示一些简单的统计信息。我的数据还包括每个可用功能向量的actid和活动标签。
当我单击右侧的导入数据时,我在2D特征空间中有一个简单的数据点视觉。我可以选择我的66个功能中的哪一个用于X,这对于y来说,感受到我的数据样本是可分离的。此时,我们只需从此目录开始选择不同的分类器算法,并在使用此按钮的数据集中逐个培训它们。
你真的不需要知道这些算法是什么或者它们是如何工作的,以及它们需要哪些参数才能工作,因为工具会为你聪明地选择它们。如果你愿意,你可以使用这个高级按钮来改变它们。我希望您可以看到,当培训完成时,该工具会在每个选定选项旁边显示一个准确性摘要,并以绿色高亮显示准确度最高的选项。
在这个阶段,您可能还需要更深入地理解Classifier的性能。这个应用程序有一些诊断选项,比如,混淆矩阵,它显示了我们的预测如何映射到数据集中的实际已知值。例如,这里的全绿色对角线,并且在它外面没有实例,表示100%的预测精度。
与Matlab应用程序的许多其他案例一样,您可以将交互式探索工作转换为一系列代码以以编程方式自动化相同的步骤。在我们的脚本中,我们正在使用完全来自同一工作流程的预设版本。这里有趣的是三行代码模式,包括选择分类器的设置,培训它 - 注意此处的拟合关键字 - 并在新数据上运行以返回预测类。
我们可以从我们的脚本内使用此生成的函数来返回培训的分类器并在新的未知功能向量上使用它。我不会那样做到的是,因为我需要提及的东西。分类学习者提供了一种直观的方法来访问与统计和机器学习工具箱一起运送的良好数量的传统分类器。
解决此问题的替代方法的示例是神经网络。同样,在这种情况下,从头开始设计和培训网络将是非常复杂的。但是神经网络工具箱提供应用程序和功能,以便快速开始,并仅使用几行代码设计功能网络。
为了节省时间,并从不同的角度考虑,让我来分享一下在这种情况下如何使用编程方法来完成相同的工作。在这里,我用一行代码初始化一个带有80个神经元的模式识别网络。然后我训练它,用几行代码返回测试集中的预测类。
如果您遇到了神经网络的理论,那么您将知道这些操作下面的数学的复杂性是相当大的。只需考虑使用反向传播的[听不清]网络架构以及您可能需要考虑的所有优化选项以考虑您的成本函数。在这种情况下,大多数良好的良好算法可用于使用,因此您可以专注于解决特定问题。当我执行此代码时,我得到一个接口,以监视培训进度,确认网络的架构:隐藏层中的80个神经元,66个输入作为特征数,6个输出类。
完成后,培训的神经网络可在我的工作区中使用。并且,通过程序方法,我可以使用它来运行数据集的整个测试集部分上的预测。正如我们在交互式之前所做的那样,我可以以在这种混乱矩阵的情况下以编程方式生成诊断。
该报告的准确率约为92%,这是相当不错的,并详细说明了所有预测器类是如何匹配已知值的。举个例子,我们可以注意到很多人把坐着和站着搞混了,反之亦然。这是我们算法需要改进的地方。
现在让我回来回顾我们所取得的成就。我们能够在用信号处理方法提取的高质量功能上进行培训并使用分类器操作。我们解决了一个问题,即信号处理和机器学习域中需要重大领域的域专业知识,这些域没有单一的方式解决,并且可能需要很长时间才能解决。相反,这只采取了一些迭代。我使用了一些不同的应用和算法,这些应用程序和算法可以随时使用,而无需从头开始打开任何复杂的书籍并计划任何数学。显着的结果是信号处理功能,能够仅在54行代码中提取66个功能。
现在我想用最后10分钟来讨论一些常见的工程挑战,稍微超出我们之前讨论过的算法探索阶段。假设我们的最终目标是对来自一个新的加速度传感器的信号进行预测。在本例中,我们使用现有的数据集。我们没有问自己很多关于这些数据是如何收集的问题。
通常,持有相关数据可能很好地成为我们列表中的第一个问题。我经常与假设获得真实世界信号并探索您需要两种不同工具的工程师,并且谁最终在MATLAB和一些外部数据采集软件之间消费了一段时间的过渡数据。但事实证明MATLAB可以直接连接到许多传感器和数据采集设备。并使用该连接可以进一步加速您的发现周期。
由于我们的示例使用智能手机的加速度计和数据,因此我认为我还包括从Mathworks网站下载的两个免费支持软件包的引用,这允许将传感器信号从IOS和Android设备直接传输到Matlab中。万博1manbetx
现在想想开发工作流的结尾,想象一下你闪亮的MATLAB算法必须在实时系统上实现;例如,在靠近加速度计本身的嵌入式设备上。在这种情况下,不仅最终的实时软件可能会帮助用C或c++重写,而且算法的实际功能也必须在最终产品中重新调整。
机器学习部分可能需要更简单。例如,对于嵌入式分类器来偏离下划线并以轻量级版本实现,这是常见的,并且在仅在线预测的轻量级版本中实现。信号处理也会变化更大。例如,从传感器流的信号上运行的过滤器将连续接受新的样本并相应地更新其内部状态。
如果原始MATLAB模型没有考虑这些效果,那么在最终实现中可能永远不会匹配原始模拟的性能,可能会影响实际最终产品的成功。
好消息是MATLAB不仅与初始信号分析和算法勘探阶段相关;它们还可用于模拟实时系统并生成嵌入源C代码。它超出了本网络研讨会的范围,以详细介绍这些方面。但让我了解这个领域可能的可能性。
覆盖的最快点是分类器的部署。当我们培训并测试我们的神经网络分类器时,一切都通过了我们所谓的网络的网络对象来完成。这有丰富的功能。并且用于预测的数学的实际代码可能很难找到。但是从我的对象网来看,我可以运行此GenFunction方法并生成简单的预测功能,只需模拟即可使用基本构造即可实时发生的。
我们现在看看数字信号处理的建模。在左边,在提取物中,我有54线的特征提取功能,我们之前审查过。这里使用的更多信号处理功能来自信号处理工具箱。在我们的勘探阶段,这些非常有价值。它们是数据分析任务的最佳选择。但它们并不旨在模拟实时系统的行为。当我们首先将此代码放在一起时,这不是我们所遇到的。
例如,查看我们如何过滤信号。我的第一次考虑真的只是一个侧面笔记。但它可能有助于我们进入正确的心态。这里,即使它们始终相同,我们也会计算每个新信号部分的滤波器系数。我们立即采取全面的条目。我们假设要在很长的一个上运作。正如我们所做的那样,我们假设从一个过滤器开始具有清洁历史的过滤器,具有零内部状态。
现在进行比较,让我看看另一种方式来模拟这个过程,这些过程有一个实时实现。这是Buffer.M的其他功能功能。该右侧功能中的大多数信号处理来自DSP系统工具箱。这些对象已经通过系统设计和模拟开发。它们可能不太实用用于信号分析。但它们可用于准确模拟实时DSP系统。
如果我们只是查看过滤器进行比较,那么它就是一个具有内部结构概念的过滤器对象。只要您通过在MATLAB中创建一个时,可以通过捕获完整的数据类型规范来获得更好的准确行为;例如,对于固定点实现。
对象保持其内部状态并声明为persistent。所以在这里退出和重新进入函数会再次发现它处于以前的状态。所以,如果需要的话,它甚至可以一次采集一个样本。而且它仍将按预期运行。
至于系数,它们首次在初始化此持久变量时仅调用此函数一次。然后,它们刚刚在运行时使用,通过在每个新的数据缓冲区上调用步骤方法。作为副作用,该过滤器在仅仅初始化一次时非常有效地运行。从第二次,它只执行严格必要的计算来处理输入。这些属性使其在信号设计和仿真的上下文中使用流信号。这一新系统模型的第一个优势,正如我们现在所说的那样,通过模拟它,我们可以在提前验证我们为嵌入式系统的算法设计,并检查行为是否正常。
我相信这个可视化现在看起来很熟悉。这就是我在本次会议开始时向您展示的是介绍我们的示例。这里的动态仿真提供了不同的视角。例如,我可以检查从一个活动到另一个活动的转换中预测的稳定性。或者另一个应用程序,我可能需要分析信号,例如我在示波器上执行的信号,例如,使用触发器和标记。
这是一个时间范围。但是,其他类型的可视化也是可能的 - 显然,在具有频谱分析仪的频域中。但我们现在不会看那个。
如果我们看一下生成模拟的代码,我们将再次看到在新的特性提取函数中看到的许多编程实践。例如,我们在每次迭代时使用一个带有新数据处理的while循环。这里的代码对象是我们在连续在线可视化中使用的。在while循环中,我们只是使用前面已经看到的step方法的相同简单构造不断地推入更多数据。
在此循环的开头,我们使用类似方式的文件读取器对象来逐步前进到数据文件,而无需在存储器中加载可能的巨大文件或执行任何复杂的索引到源数据中。我们只是在开头传递文件名,并获得每一次迭代的新样本帧。
在这里,我还使用了一个缓冲区来帮助我操作一个比系统可能在单个迭代中接收到的更长的数据窗口,所有这些都包装在一个单独的对象中,以隐藏在索引中,并通过相同的步骤接口使用。在这个循环的中间,你可以看到我们用新的DSP模型和轻量级神经网络分类器模拟的预测函数。
除了在线模拟我们的系统的能力,第二个实质优势,具有DSP处理组件和部署的神经网络的实时模型,我们现在可以自动生成它们的源C或C ++代码。这可以用于嵌入式产品,嵌入式原型,或简单地参考与下游软件工程团队共享。
对此有很多待这么说,包括能力,例如,直接生成固定点或目标优化的C.但我会告诉你那种工作原理的一般概念。虽然您第一次通过专用内置应用程序进行此工作流程,但一般的想法是通过这种简单的公共代码栏,我们可以将我们的MATLAB函数预测活动从信号缓冲区转换为完全等效的打开C功能,没有图书馆附上。生成的C完全打开。在这种情况下,我不努力优化生成的代码。但是很多功能都在那样做到这一点,包括生成所有固定点代码的能力。
好吧。我想我们已经看到了我想给你们展示的一切。现在让我回到幻灯片。我将回顾一下我们所做的工作,以及我在本演示的各个部分中使用的功能和工具。
信号分析是使用事实上的标准内置函数为我们节省大量时间的第一个领域。信号处理工具箱是所有这些有用的函数的来源。想象一下必须从头开始执行所有这些公式,更不用说查找它们并试图理解它们了。通过简单地将for循环改为parfor循环,并行计算工具箱让我们可以分配计算密集型的for循环。额外的并行计算选项可用于将我们使用的框架扩展到更大的架构,包括计算机集群和云。
统计和机器学习工具箱不仅允许我们测试良好数量的分类器,还可以在分类学习者应用程序中快速探索和比较不同的选项。我觉得很多我们的发现周期。在探索少数传统分类器之后,我们还使用神经网络工具箱来创建用于模式识别,培训和测试的常见网络拓扑。我们还生成了一种轻量级净化版本,该网络使用C发电引擎完全支持的基本MATLAB构造捕获了运行时计算。万博1manbetx
通过我们的信号处理算法已经合并的基础,我们使用了DSP系统工具箱中的对象数来模拟我们算法的实时实现。我们使用促进存储在磁盘上的长信号的对象进行了促进数据的对象进行了在线模拟。并且我们使用优化的范围来处理流信号的连续可视化,类似于如何使用台式仪器可视化实际信号。
作为一个副作用,我们的在线建模工作使我们的算法在模拟中执行起来更加高效,并使它们能够生成可以直接部署到嵌入式处理器上的C或c++源代码。这就是我们使用MATLAB编码器的地方。
MATLAB编码器是一种热电联产引擎,可以将MATLAB算法转换为完全打开的C或C ++源代码。尤其是通过生成嵌入的源代码来说,会有很多关于MATLAB编码器所做的事情。所以我以为我会在我们的网站上推荐给我们网站上的预先录制格式的伟大入门网络研讨会,“Matlab到C.
就此而言,我们已经在这个网络研讨会结束时进行了信号处理和机器学习技术,用于传感器数据分析。我希望这在突出一些你尚未熟悉的Matlab功能方面有用。我将旨在制作我在未来几周内使用的代码,以便您可以通过自己的速度查看该示例。
如果你不得不忘记我今天提到的所有东西,我希望你至少记住以下三个要点。首先,我们的开放式项目之所以成为可能,是因为我们拥有广泛的内置功能,包括信号处理和机器学习。这让我们能够快速尝试不同的选择,而无需从头开始执行任何数学运算。
图片的互补部分是MATLAB环境本身,从基本的可视化功能到生成可重用代码的内置应用程序,使得不断使用一种语言,使得易于让先进的事情发生在几行代码中。
最后,通过一系列MATLAB能力,您需要一系列的游览,以将抽象思想转换为实时算法实现。我们将信号处理算法转换为可以随时间模拟的详细DSP系统模型。来自那些,我们生成了可以在嵌入式平台上重新编译的源C代码。
你也可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。