Meeshawn Marathe,MathWorks公司
大家怎么了?我是Meeshawn,欢迎收看本视频,了解如何使用Simulink将MATLAB脚本部署到Arduino。万博1manbetx哇,这是新的!使用Simulink部署MATLAB脚本?万博1manbetx
你一定在想:这可能吗?
那么,Sim万博1manbetxulink的使您能够将您的MATLAB脚本MATLAB功能块内,然后生成代码Simulink的时候了。别担心,我们会在视频后面谈MATLAB功能块,但现在,让我给你我在Simulink开发的音频处理应用的快速演示。万博1manbetx我已在声音片段中实现的音频效果,利用Simulink生成的代码,然后从Simulink中部署的代码的Arduino MKR1000板。万博1manbetx
这是一个用Simul万博1manbetxink模型的MATLAB函数块,其中包含了实现的音频效果。由Simulink生成的代码在这个板上实时运行,万博1manbetx我使用Simulink通过外部模式调优参数和监控信号。
所以,你现在听到的是原始的声音片段,然后是三个不同的音频效果,实现在剪辑上;即回声效应、混响效应和音高偏移效应。很有趣,不是吗?
现在,让我们先在Simulink开发的,从MATLAB功能块的音频应用一探究竟。万博1manbetx让我们打开一个空白Simulink模型万博1manbetx,然后导航到Simulink的图书馆。在用户定义的函数,你可以找到MATLAB功能块。让我们将其添加到模型空白。你也可以开始在Simulink编辑器输入功能的MATLAB随时随地获得此块。万博1manbetx让我们添加一个常数块,然后显示块。现在,让我们双击此块。所以,在这里你会实现你的MATLAB脚本。让我们来看看一个简单的标量乘法的例子。由2乘以输入现在我们只要运行这个Simulink模型。万博1manbetx Perfect! The answer is 2, as expected.
我们刚刚看到了一个非常基本的MATLAB函数块在Simulink中的实现。万博1manbetx在我们的Simulink模型中实现的音频效果背后的算法是作为MATLAB脚本开发的,然后在这些MATLAB函数块中使用万博1manbetx。然后生成代码并直接从Simulink部署到Arduino MKR1000板上。万博1manbetx音频输出可在板的DAC引脚。为了听到这个,我只用了一个3.5毫米的音频断接板,然后把它连接到板上的DAC引脚和GND引脚上。一个耳机/耳机现在可以连接到这个突破板来听到声音。如果你没有这个音频接线板,也不要担心。您可以简单地将电线绕在耳机/耳机的音频插孔上,并将其适当地连接到主板上的DAC和GND插脚上。
而已!所以,你只需要一个耳机,Arduino的,和Simulink这个音频应用!万博1manbetx
好吧。现在,有了这些信息,让我们回到Simulink模型。万博1manbetx除了MATLAB函数块之外,在这个应用程序中还使用了其他几个i/o块。这是一个常量块,用于访问实现音频效果的声音片段。这里需要注意的一件有趣的事情是,Simulink允许在闪存中存储数据,比如这里的声音万博1manbetx片段,这在目标硬件没有足够RAM内存时非常有用。为了做到这一点,你需要将常量块的采样时间设置为无穷大,这已经在这个块上完成了。其次,您需要在代码生成优化设置中将默认参数行为设置为inline。让我们快速看一下这个。点击配置参数;在“代码生成”选项卡“优化设置”下,可以找到默认参数“行为”。 It is already set to inlined.
好吧,让我们的下一个块是Arduino的模拟输出模块。它产生主板上的指定的DAC引脚上的电压。它是Simulink的支持包的Ardui万博1manbetxno的一部分。万博1manbetx
下一个块是To Workspace块。它帮助我们将仿真输出保存到工作空间中的一个变量中,以便在MATLAB中执行数据的任何后处理或分析。
接下来,让我们看看这个旋转旋钮。它是一个交互式UI块,通过将所选值分配给变量或常量来帮助选择音频效果。正如您在这里看到的,在这个应用程序中实现了三个音频效果。回声效应、混响效应和音高偏移效应。“原始”选项指的是没有音频效果的原始声音剪辑。旋转旋钮选择的算法作为一个常数存储在这个常数块中。MATLAB函数块利用该常数值实现所选的音频效果。
现在,如果你有兴趣通过原始声音剪辑属性去,点击这个按钮。它启动MATLAB脚本读取的声音片段,并从它的属性然后将其在此Simulink模型用来定义了许多常量。万博1manbetx此脚本加载Simulink模型前最初运行。万博1manbetx
我们看到了一些i/o和UI block。现在让我们关注模型的大脑部分,也就是MATLAB的函数块。在中央,你可以看到一个子系统。该模块对在该Simulink模型中实现的音频处理应用程序所对应的所有MATLAB函数块进行分组。万博1manbetx
第一MATLAB功能块播放原始声音片段,因为它是。所述块内的每个脚本音频样本写入到主板上的DAC销。没有其他的计算发生在这个脚本。现在,因为模拟输出块只接受UINT16数据类型,所有的MATLAB FCN块内使用的变量和常量都是UINT16数据类型。
我们的第二个MATLAB Fcn块实现回声音频效果。在研究这个脚本之前,让我们先了解什么是echo效果。回声效应只是当前和延迟音频样本的叠加。因此,你可以同时感知现在和过去的音频样本。这种效应被称为回声效应。从这个等式中可以看出,输出是现在和过去音频样本的加权和。参数alpha控制回声的强度。TauD是与实际延迟(以秒为单位)相对应的延迟样本数。使用表达式(1+alpha)对最终输出方程进行归一化,以处理回放期间的声音饱和度。
好了,现在我们了解了echo是如何工作的,让我们回到MATLAB Fcn块实现的echo效果。如前所述,uint16数据类型在所有MATLAB Fcn块中使用,因为模拟输出块支持该数据类型。万博1manbetx那么我们如何在MATLAB脚本中对不同的变量和常量使用浮点值呢?例如,延迟为0.5秒,增益为0.8?
为了解决这个问题,浮点值表示为有理数,即由分母形式的分子。正如你可以在这里看到,在几秒钟的延迟和增益被表示为有理数。
然而,这并不能完全解决问题。现在这些有理数被重新排列,通过采取LCM最终输出方程中,以便具有一个共同的除数。这减少了分割到只有一个的数量,这最终降低的精度损失是由于无符号整数值的除法。
正如您在这里看到的,这是回波效应的最终输出方程,它被重新安排为一个公约数,因此发生了一个单独的除法操作,这有助于获得更好的精度。
对,所以这是回音效果。接下来,让我们来看看混响效果。也被称为混响,这种效果是声音的持久性的声音已经产生后,通过多次反射的声音由不同的物体所吸收,最终衰变中产生的。这个装置的输出方程依赖于过去的音频输入采样以及过去的音频输出采样到反射分别模型以及衰减现象。
作为回波输出方程中,参数阿尔法控制的效果的强度和TAUD是对应在秒的实际延迟延迟的样本的数目。
为了多次反射和衰减进行建模,所述输出方程已经以级联方式三个不同TAUD值来实现,以便后续的反射和衰减进行建模。
好了,现在我们可以跳到MATLAB Fcn块实现的混响效果。与echo效应类似,浮点变量和常量被表示为有理数,最终的输出方程被重新安排为公约数,进行单除法操作,以减少由于无符号整数值的除法而造成的精度损失。
这是对应于第一时滞值的第一差分方程。该方程的输出作为对应于第二个延迟值的第二个差分方程的输入,以此类推。
最后,输出与音频输入叠加,然后进行归一化以考虑饱和度。
好了,到目前为止我们已经讨论了回声和混响算法。让我们讨论一下这些算法的性能。声音片段的采样率为8KHz。这意味着,为了在声音片段上听到有意义的音频效果,算法需要在125uS内工作,这是8KHz的逆。这样做的失败将导致超越的算法上的板和音频效果将是不良的。echo和reverb算法都经过了优化,使得在Simulink的每个时间步长执行时间小于125uS。万博1manbetx
好了,现在让我们进入最后一个算法,也就是音高偏移效应。这种效果是通过拉伸或压缩声音片段,然后以等同于拉伸或压缩因子的速率回放所产生的信号,从而分别导致音高的增加或减少。例如,通过在声音片段的相同间隔上固定小窗口长度,然后在这些间隔上附加窗口来扩展声音片段来实现扩展。这基本上是在相同的时间间隔复制声音片段。所得到的声音片段的样本数量是现在的两倍。以两倍的采样率或回放率播放合成声音剪辑,该合成声音剪辑播放相同的时间持续时间,但增加音调。与其附加音频样本,可以在相同的间隔去除音频样本,然后以较慢的速率回放信号,以获得在音高的减少。
现在有了这些理解,让我们回到我们的Simulink模型,回到实现音高变换效果的MATLAB Fcn块。万博1manbetx这里实现了20ms的窗口长度。该算法积累等于窗口长度的音频样本,然后定期将其附加到原始声音剪辑。
现在所讨论的,与俯仰移算法,我们需要加倍回放速率或,换言之,减少了一半MATLAB FCN块的采样时间,相比于其他的算法。这种调度可以在Simulink中轻松完成。万博1manbetx事实上,Simulink中的核心优势之一是它的调度功能。万博1manbetx这是非常方便的Simulink模型内执行不同的块调度。万博1manbetx它很简单,只要从该块参数设定采样时间。让我们在特定块上点击右键。导航到块参数。这里是采样时间。因此,对于音调移位MATLAB FCN块,采样时间应一半他人这意味着采样速率的两倍,所要求的算法。
此外,我们将需要速率转换模块,它照顾的多速率建模在Simulink。万博1manbetx由于以两倍的采样率的音高移位MATLAB FCN块运行时,这些块是前和这个MATLAB FCN块之后插入。如果你没有在模型中的多的价格,不像我,你将不再需要他们。
不同的线颜色表示模型中出现的不同样本时间。红色最快,绿色最慢。粉色指的是一个常数,意味着有无限的采样时间。粉色就像你的朋友!理想情况下,您希望使用粉色线来确保该参数始终可用于模拟,并像常量一样运行,从而在代码生成期间进入闪存。
实际上,Simulink中的调度特性令人难以置信,因为在其他ide中万博1manbetx实现它有时会变得太麻烦。
好了,这就是为这个应用程序设计的三个音频效果的三个MATLAB Fcn块实现。在将代码部署到硬件之前,现在让我们在Simulink中模拟这个模万博1manbetx型。选择“正常模式”模拟主机中的模型,即本笔记本电脑。设置持续时间的模拟为5s,因为音频剪辑的长度是5s。
好了,现在让我们玩的模拟数据。通常情况下,我可以从音频系统工具箱库中添加“音频写”块这种模式,然后播放声音。但是,如果你没有一个,你可以播放从MATLAB的声音,用在模拟由对工作区块结束创建的变量。引擎盖下该按钮触发,其从工作区拾取变量和从MATLAB播放它的回调函数。
这是原来的声音片段。现在,让我们来实现对夹一些音频效果。因此,这是怎样的回声的声音。接下来,让我们对混响和模拟点击。所以,这是混响效果。选择我们的最终使用的算法,音高变化效果。让我们模拟这种效果。完善!所以,模拟与所有的算法进行得很顺利。
现在,我们将继续讨论目标硬件部署。一旦部署到硬件上,一次只有一个算法将在硬件上运行。除非我们连接一些外部的按钮开关,否则没有办法在算法之间进行动态切换,这只会给这个应用程序增加越来越多的硬件。
幸运的是,我们有一个机制,通过它我们可以,而他们是在目标上运行动态地从Simulink的算法之间切换。万博1manbetx这是通过运行在外部模式完成仿真。外部模式仿真是Simulink中的另一个有趣的功能,它可以帮助你的硬件上运行实时模型和Simulink模型的应用板现场参数变化。万博1manbetx因此,代码生成仅需要一次调整参数和监视信号。在我们的应用程序,我们将在代码中与外部模式模拟的帮助下,硬件上运行不同的算法之间的切换。
在开始之前,让我们快速看一下硬件设置。这是一个简单的设置,Arduino MKR1000板通过微USB线连接到笔记本电脑,一个3.5 mm的音频插孔一端连接笔记本电脑,另一端连接接线板,如前所述,记录最终的音频输出。在您的情况下,您只需将一个合适的3.5毫米耳机连接到接线板,而不是这条绿色音频线,就可以直接收听Arduino的音频输出。
好了,所以现在我们将开始外部模式模拟,周期设定为无穷大,因为我们会不断运行仿真。让我们点击运行按钮。默认情况下,模型设置为发挥原有的声音片段。打原来的声音片段后,我们将选择回音效果,其次是混响和音高变化效果,与旋转旋钮的帮助。这些变化直接传达给代码运行在黑板上用外部模式模拟的帮助。
好了好了,所以这是外部模式仿真你。
有了这个模拟我们来到这个视频的结尾。在这段视频中实现的音频应用只是一个小例子来展示MATLAB FCN块的能力,以实现在Simulink您的MATLAB脚本。万博1manbetx您可以继续使用您的MATLAB脚本与在Simulink MATLAB FCN块一起构建自己的应用程序。万博1manbetx
希望你喜欢这个视频。有关其他MATLAB和Simulink产品的更多视频,请访问我们的网站s manbetx 845万博1manbetxwww.tianjin-qmedu.com/videos
您也可以从以下列表中选择一个网站:
选择最佳的网站性能的中国网站(在中国或英文)。其他MathWorks的国家网站都没有从您的位置访问进行了优化。
本网站使用cookies改善您的用户体验,个性化内容和广告,并分析网站流量。如您继续使用本网站,即表示您同意我们使用cookies。请参阅我们的隐私政策以了解更多有关cookies及如何更改您的设置。