Meeshawn Marathe, MathWorks
怎么回事,各位?我的名字是Meeshawn,欢迎来到这个关于如何使用Simulink将MATLAB脚本部署到Arduino的视频。万博1manbetx哇,这是新的!使用Simulink部署MATLAB脚本?万博1manbetx
你一定在想:这可能吗?
那么,Sim万博1manbetxulink的使您能够将您的MATLAB脚本MATLAB功能块内,然后生成代码Simulink的时候了。别担心,我们会在视频后面谈MATLAB功能块,但现在,让我给你我在Simulink开发的音频处理应用的快速演示。万博1manbetx我已在声音片段中实现的音频效果,利用Simulink生成的代码,然后从Simulink中部署的代码的Arduino MKR1000板。万博1manbetx
这是一个带有MATL万博1manbetxAB函数块的Simulink模型,其中包含了音频效果的实现。从Simulink生成的代码在这个板上实时运行,万博1manbetx我使用Simulink来调优参数并通过外部模式监视信号。
那么,你现在听到了原始的声音剪辑,接着是三个不同的音频效果,在剪辑上实现;即回声效应、混响效应和音高位移效应。很有趣,不是吗?
现在,让我们先在Simulink开发的,从MATLAB功能块的音频应用一探究竟。万博1manbetx让我们打开一个空白Simulink模型万博1manbetx,然后导航到Simulink的图书馆。在用户定义的函数,你可以找到MATLAB功能块。让我们将其添加到模型空白。你也可以开始在Simulink编辑器输入功能的MATLAB随时随地获得此块。万博1manbetx让我们添加一个常数块,然后显示块。现在,让我们双击此块。所以,在这里你会实现你的MATLAB脚本。让我们来看看一个简单的标量乘法的例子。由2乘以输入现在我们只要运行这个Simulink模型。万博1manbetx Perfect! The answer is 2, as expected.
我们在Simulink中看到了一个非常基本的MATLAB函数块实现。万博1manbetx我们在Simulink模型中实现的音频效果背后的算法是作为MATLAB脚本开发的,然后在Simulink中的这些MAT万博1manbetxLAB函数块中使用。然后生成代码并直接从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块,通过将选中的值赋给一个变量或常量来帮助选择音频效果。正如您在这里看到的,在这个应用程序中实现了三个音频效果。回声效应、混响效应和音高偏移效应。选项“original”指没有音频效果的原始声音剪辑。由旋转旋钮选择的算法作为常数存储在这个常数块中。然后,MATLAB函数块利用这个常数值实现所选的音频效果。
现在,如果你对原始的声音剪辑属性感兴趣,点击这个按钮。它启动一个MATLAB脚本,该脚本将读取声音片段并根据其属性定义许多常量,然后在Simulink模型中使用这些常量。万博1manbetx这个脚本在加载Simulink模型之前首先运行。万博1manbetx
好的,我们看到了一些i/o和UI块。现在让我们关注模型的大脑,也就是MATLAB函数块。在中间,你可以看到一个子系统块。该模块将与Simulink模型中实现的音频处理应用程序相对应的所有MATLAB功能模块进行分组。万博1manbetx
第一MATLAB功能块播放原始声音片段,因为它是。所述块内的每个脚本音频样本写入到主板上的DAC销。没有其他的计算发生在这个脚本。现在,因为模拟输出块只接受UINT16数据类型,所有的MATLAB FCN块内使用的变量和常量都是UINT16数据类型。
我们的第二个MATLAB FCN模块实现了回声的音频效果。之前通过脚本去,让我们先了解回声效果是什么。回声效应仅仅是电流和延迟的音频样本的叠加。其结果是,人们可以察觉同时本以及过去音频样本。此效应被称为回波效应。如该公式可看出,输出是当前和过去的音频样本的加权和。该参数阿尔法控制回声的强度。TAUD是对应于以秒为实际延迟延迟的样本的数目。最终输出方程进行归一化,使用表达式(1个+阿尔法),在播放过程中照顾声音饱和的。
好了,现在我们已经理解了echo的工作原理,让我们回到MATLAB Fcn模块的echo效果实现上来。如前所述,uint16数据类型用于所有MATLAB Fcn块,因为模拟输出块支持uint16数据类型。万博1manbetx但是,我们如何在MATLAB脚本中对不同的变量和常量使用浮点值呢?例如,0.5秒的延迟和0.8秒的增益?
为了解决这个问题,浮点值被表示为有理数,即。,分子分母形式。正如您在这里看到的,以秒为单位的延迟和增益被表示为有理数。
然而,这并没有完全解决问题。这些有理数现在通过LCM重新排列在最终的输出方程中,从而得到一个公约数。这将把除法的数量减少到只有一个除法,从而最终减少了由于对无符号整数值进行除法而导致的精度损失。
正如你在这里看到的,这是回声效果的最终输出方程,它被重新安排为有一个公约数,因此只需要进行一次除法运算,这有助于达到更好的精度。
对,所以这是回音效果。接下来,让我们来看看混响效果。也被称为混响,这种效果是声音的持久性的声音已经产生后,通过多次反射的声音由不同的物体所吸收,最终衰变中产生的。这个装置的输出方程依赖于过去的音频输入采样以及过去的音频输出采样到反射分别模型以及衰减现象。
与回波输出方程一样,参数alpha控制效果的强度,tauD是与实际延迟(以秒为单位)相对应的延迟采样数。
为了多次反射和衰减进行建模,所述输出方程已经以级联方式三个不同TAUD值来实现,以便后续的反射和衰减进行建模。
好了,所以现在我们可以跳转到的混响效果MATLAB FCN模块实现。类似于回声效果,浮点变量和常量被表示为有理数和最终输出方程已经被重排以具有与单个除法运算的公约数,以减少的精度损失是由于无符号整数值的除法。
这是对应于第一个延迟值的第一个差分方程。该方程的输出作为输入输入到第二个差分方程对应于第二个延迟值,以此类推。
最后,输出与音频输入叠加,然后进行归一化处理,以处理饱和度。
好的,到目前为止我们已经讨论了echo和reverb算法。我们来谈谈这些算法的性能。声音片段的采样率为8KHz。这意味着,为了听到在声音片段上实现的有意义的音频效果,该算法需要在125uS内工作,这是8KHz的倒数。如果不这样做,将导致板上的算法溢出,音频效果将是不可取的。echo和reverb算法都经过了优化,使得Simulink中每个时间步的执行时间都小于125uS。万博1manbetx
好了,现在我们进入最后一个算法,也就是音高变化效应。这种效果是通过拉伸或压缩声音片段,然后以与拉伸或压缩因子相等的速率回放产生的信号来实现的,从而分别导致音高的增加或减少。例如,拉伸是通过将小窗口长度固定在相同间隔的声音剪辑上,然后通过在这些间隔中追加窗口来扩展声音剪辑来实现的。这实际上是在相同的时间间隔内复制声音片段。合成的声音剪辑的数量是现在的两倍。以两倍的采样速率或回放速率播放合成的声音剪辑,合成的声音剪辑在相同的时间内播放,但是音调会增加。与附加音频样本不同,可以以相同的间隔删除音频样本,然后以较慢的速率回放信号,从而降低音高。
现在有了这个理解,让我们回到Simulink模型,回到MATLAB Fcn模块实现的渐变效果。万博1manbetx这里实现了一个20ms的窗口长度。该算法先累积与窗口长度相等的音频样本,然后定期将其追加到原始声音剪辑中。
如前所述,与其他算法相比,使用pitch-shift算法时,我们需要将回放速度加倍,或者换句话说,将MATLAB Fcn块的采样时间减少一半。这个调度可以在Simulink中很容易地完成。万博1manbetx事实上,Simulink的核心优势之一就是它的调度特性。万博1manbetx在Simulink模型中为不同的块执行调度是非常方便的。万博1manbetx它就像从块参数设置示例时间一样简单。让我们右键单击一个特定的块。导航到块参数。这是样本时间。因此,对于pitch-shift MATLAB Fcn块,采样时间应该是其他块的一半,这意味着采样率是算法要求的两倍。
此外,我们将需要速率转换模块,它照顾的多速率建模在Simulink。万博1manbetx由于以两倍的采样率的音高移位MATLAB FCN块运行时,这些块是前和这个MATLAB FCN块之后插入。如果你没有在模型中的多的价格,不像我,你将不再需要他们。
不同的线颜色表示存在于该模型中的不同的采样时间。红色是最快和绿色最慢。粉红引荐为恒定,意味着具有无限采样时间。粉色是喜欢你的朋友!你最好要一个粉红色的线,以确保参数始终可用于模拟和行为就像一个常数和代码生成过程中,因此进入到闪存。
实际上,Simulink中的调度特性是令人难以置信的,因为在其他id万博1manbetxe中实现相同的调度特性有时会非常麻烦。
好了,这就是为这个应用程序设计的三个音频效果的三个MATLAB Fcn块实现。现在让我们在将代码部署到硬件之前在Simulink中模拟模型。万博1manbetx选择“正常模式”在主机上模拟模型,主机就是这台笔记本电脑。设置模拟的持续时间为5s,因为音频剪辑的长度为5s。
现在播放模拟数据。通常我可以从audio System Toolbox库中添加一个“audio write”块到这个模型中,然后播放声音。但是,如果没有,可以使用To-Workspace块在模拟结束时创建的变量从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国家站点不适合来自您所在位置的访问。