Meeshawn Marathe,MathWorks公司
发生了什么事,各位?我的名字是Meeshawn,欢迎收看这个关于如何使用Simulink将MATLAB脚本部署到Arduino的视频。万博1manbetx哇,这是新的!使用Simulink部署MATLAB脚本?万博1manbetx
你一定在想:这可能吗?
嗯,Simu万博1manbetxlink使您可以在MATLAB功能块内插入MATLAB脚本,然后立即生成代码。别担心,我们将在视频中稍后讨论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内存时很有用。为此,您需要将常量块的采样时间设置为Infinity,这已经为此块已经完成。其次,您需要将默认参数行为设置为内联,在代码生成优化设置中。让我们快速看看这个。让我们转到配置参数;在代码生成选项卡下,优化设置,可以找到默认参数行为。 It is already set to inlined.
好的,所以我们的下一个块是Arduino的模拟输出块。它在板上的指定DAC引脚上产生电压。它是Arduino的Simulink支持万博1manbetx包的一部分。万博1manbetx
我们的下一个块是to workspace块。它有助于我们将模拟输出保存到工作区中的变量,以便在MATLAB中执行任何后处理或分析数据。
接下来,让我们看看这个旋转旋钮。它是一个交互式UI块,通过将选定的值赋给一个变量或常量来帮助选择音频效果。正如您在这里看到的,在这个应用程序中实现了三种音频效果。回声效应、混响效应和音高偏移效应。“原始”选项是指没有音频效果的原始声音剪辑。由旋转旋钮选择的算法作为常量存储在这个常量块中。MATLAB函数块然后利用这个常数值来实现选定的音频效果。
现在,如果你有兴趣通过原始声音剪辑属性去,点击这个按钮。它启动MATLAB脚本读取的声音片段,并从它的属性然后将其在此Simulink模型用来定义了许多常量。万博1manbetx此脚本加载Simulink模型前最初运行。万博1manbetx
好的,所以我们看到了几个I / O和UI块。现在让我们专注于模型的大脑,这是Matlab功能块。在中心,您可以看到子系统块。该块组对应于在此Simulink模型中实现的音频处理应用程序的所有MATLAB功能块。万博1manbetx
第一个MATLAB功能块按照原样播放原始声剪辑。块内的脚本将每个音频样本写入电路板上的DAC引脚。此脚本中没有其他计算。现在,由于模拟输出块仅接受UINT16数据类型,因此Matlab FCN块内使用的所有变量和常数都是UINT16数据类型。
我们的第二个Matlab FCN块实现了回声音频效果。在进行脚本之前,首先要明白回声效果是什么。回声效果仅仅是电流和延迟音频样本的叠加。结果,人们可以同时感知到现在以及过去的音频样本。这种效果称为回波效果。如在该等式中所见,输出是当前和过去音频样本的加权和。参数alpha控制回声的强度。Taud是与实际延迟相对应的延迟样本的数量。使用表达式(1 + alpha)归一化最终输出方程,以在播放期间处理声音饱和度。
好了,现在我们理解了echo的工作原理,让我们回到MATLAB的Fcn块实现来实现echo效果。如前所述,uint16数据类型在所有的MATLAB Fcn块中使用,因为这是模拟输出块支持的。万博1manbetx但是我们如何在MATLAB脚本中对不同的变量和常量使用浮点值呢?例如,0.5秒的延迟和0.8?
为了解决这个问题,浮点值表示为有理数,即由分母形式的分子。正如你可以在这里看到,在几秒钟的延迟和增益被表示为有理数。
然而,这并不能完全解决问题。现在这些有理数被重新排列,通过采取LCM最终输出方程中,以便具有一个共同的除数。这减少了分割到只有一个的数量,这最终降低的精度损失是由于无符号整数值的除法。
正如您可以在此处看到的那样,这是回声效果的最终输出方程,它已被重新排列以具有常见的除法,因此发生了单独的操作,这有助于实现更好的精度。
对,所以这是回声效果。接下来,让我们来看看混响效果。又称混响,这种效果是在发出声音后的声音的持久性,由多个反射产生,这最终衰减,因为声音被不同的物体吸收。这意味着输出方程取决于过去的音频输入样本以及过去的音频输出样本,以分别模拟反射和衰减现象。
作为回波输出方程中,参数阿尔法控制的效果的强度和TAUD是对应在秒的实际延迟延迟的样本的数目。
为了模拟多个反射和衰减,输出方程已经用级联方式以三种不同的Taud值实现,以便模拟后续反射和衰减。
好吧,所以现在我们可以跳转到Matlab FCN阻止实现的混响效果。类似于回声效果,浮点变量和常数已表示为Rational Numbum,并且重新排列最终输出方程以具有单个划分的公共除数,以减少由于无符号整数值的划分而降低精度的损失。
这是对应于第一个延迟值的第一个差分方程。该方程的输出作为第二个差分方程的输入,对应于第二个延迟值,以此类推。
最后,随着音频输入叠加输出,然后归一化以照顾饱和度。
好吧,所以'直到现在我们已经讨论了回声和混响算法。让我们谈谈这些算法的性能。声音剪辑的采样率为8kHz。这意味着为了听到在声音剪辑上实现的有意义的音频效果,该算法需要在125US内工作,这是8kHz的逆。如果不这样做,将导致在电路板上的算法超越,音频效果将是不可取的。已经优化了回波以及混响算法,使得在Simulink中每次步骤的执行时间小于125U。万博1manbetx
好了,现在我们来看看最终的算法,也就是pitch-shift效应。这种效果是通过拉伸或压缩声音片段,然后以与拉伸或压缩因子相等的速率回放产生的信号来实现的,分别导致音调的增加或减少。例如,拉伸是通过在声音剪辑的等距上固定小窗口长度,然后在这些间隔上附加窗口来扩展声音剪辑来实现的。这实际上是以相同的时间间隔复制声音片段。现在合成的声音片段有两倍的样本数量。以两倍的采样率或回放率播放合成声音片段,合成声音片段将播放相同的时间,但音调会增加。不需要附加音频样本,而是可以以相等的间隔去除音频样本,然后以较慢的速率回放信号,以获得音调的降低。
现在有了这些理解,让我们回到Simulink模型,回到MATLAB Fcn模块,实现pitch-shif万博1manbetxt效果。这里实现了一个20毫秒的窗口长度。该算法累积等于窗口长度的音频样本,然后定期将其添加到原始音频剪辑中。
现在所讨论的,与俯仰移算法,我们需要加倍回放速率或,换言之,减少了一半MATLAB FCN块的采样时间,相比于其他的算法。这种调度可以在Simulink中轻松完成。万博1manbetx事实上,Simulink中的核心优势之一是它的调度功能。万博1manbetx这是非常方便的Simulink模型内执行不同的块调度。万博1manbetx它很简单,只要从该块参数设定采样时间。让我们在特定块上点击右键。导航到块参数。这里是采样时间。因此,对于音调移位MATLAB FCN块,采样时间应一半他人这意味着采样速率的两倍,所要求的算法。
此外,我们需要在Simulink中处理速率转换块,从而处理多速率建模。万博1manbetx由于音高移位MATLAB FCN块以采样率的两倍运行,因此在此MATLAB FCN块之前和之后插入这些块。如果您的模型中没有多率,与我不同,您将不需要它们。
不同的线条颜色表示模型中存在的不同样本时间。红色是最慢的最快和绿色。粉红色的推荐人常数,意思是具有无限的采样时间。粉红色就像你的朋友!您理想地希望粉红色线以确保参数始终可用于模拟,并表现得像常量,因此在代码生成期间进入闪存。
实际上,Simulink中的调度特征是令人难以置信的,因为它有时可以万博1manbetx太麻烦来实现其他IDE中的相同。
所有权利,那么这些是为此应用设计的三个音频效果的三个Matlab FCN块实现。现在让我们在将代码部署到硬件之前,模拟Simulink中的模型。万博1manbetx选择“普通模式”模拟主计算机中的模型,这是这台笔记本电脑。将模拟的持续时间设置为5S,因为音频剪辑的长度为5S。
好了,现在让我们玩的模拟数据。通常情况下,我可以从音频系统工具箱库中添加“音频写”块这种模式,然后播放声音。但是,如果你没有一个,你可以播放从MATLAB的声音,用在模拟由对工作区块结束创建的变量。引擎盖下该按钮触发,其从工作区拾取变量和从MATLAB播放它的回调函数。
这是原来的声音片段。现在,让我们来实现对夹一些音频效果。因此,这是怎样的回声的声音。接下来,让我们对混响和模拟点击。所以,这是混响效果。选择我们的最终使用的算法,音高变化效果。让我们模拟这种效果。完美的!所以,模拟与所有的算法进行得很顺利。
现在,我们将继续讨论Target硬件部署。一旦部署到硬件上,每次只有一个算法在硬件上运行。没有办法在算法之间动态切换,除非我们连接一些外部按钮开关,这只会增加越来越多的硬件到这个应用程序。
幸运的是,我们有一个机制,通过它我们可以,而他们是在目标上运行动态地从Simulink的算法之间切换。万博1manbetx这是通过运行在外部模式完成仿真。外部模式仿真是Simulink中的另一个有趣的功能,它可以帮助你的硬件上运行实时模型和Simulink模型的应用板现场参数变化。万博1manbetx因此,代码生成仅需要一次调整参数和监视信号。在我们的应用程序,我们将在代码中与外部模式模拟的帮助下,硬件上运行不同的算法之间的切换。
在开始之前,让我们快速查看一下硬件设置。这是一个简单的设置,Arduino MKR1000板通过微型USB线连接到笔记本电脑,3.5毫米音频插孔一端连接到笔记本电脑,另一端连接到接线板,如前所述,以记录最终的音频输出。在您的情况下,您只需将一个合适的3.5毫米耳机连接到接线板,而不是这个绿色音频线,就可以直接从Arduino听音频输出。
好吧,所以现在我们将开始外部模式仿真,将时间段设置为Infinity,因为我们将连续运行模拟。让我们点击运行按钮。默认情况下,该模型设置为播放原始声音剪辑。播放原始声剪辑后,我们将选择回波效果,然后是旋转旋钮的帮助和振荡效果。在外部模式仿真的帮助下,这些更改直接传送到板上运行的代码。
好吧,好吧,这是你的外部模式模拟。
通过这个模拟,我们来到了这个视频的末尾。在此视频中实现的音频应用程序只是一个小示例,演示了Matlab FCN块在Simulink中实现了MATLAB脚本的功能。万博1manbetx您可以使用Matlab脚本以及Matlab FCN块在Simulink中使用Matlab脚本来构建自己的应用程序。万博1manbetx
我希望你喜欢看这个视频。有关其他Matlab和Simulink产品的更多视频,请访问我们的网站s manbetx 845万博1manbetxwww.tianjin-qmedu.com/videos
你也可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。