Meeshawn Marathe,MathWorks公司
这是怎么回事,人呢?我的名字是Meeshawn,欢迎来到这个视频就如何利用Simulink您的MATLAB脚本部署到Arduino的。金宝app哇,这是新的!部署利用Simulink MATLAB脚本?金宝app
你一定在想:这可能吗?
Simuli金宝appnk允许您将MATLAB脚本插入到MATLAB函数块中,然后立即从Simulink生成代码。不用担心,我们会在后面的视频中讨论MATLAB函数块,但是现在,让我给你们快速演示一下我在Simulink中开发的一个音频处理应用程序。金宝app我在一个声音剪辑上实现了音频效果,使用Simulink生成代码,然后将代码从Simulink部署到Arduino MKR1000板上。金宝app
这是一个带有MATL金宝appAB函数块的Simulink模型,其中包含了音频效果的实现。从Simulink生成的代码在这个板上实时运行,金宝app我使用Simulink来调优参数并通过外部模式监视信号。
所以,你刚才听到的原始声音片段,接着是三个不同的音频效果,对夹来实现;即,回波效果,混响和音高移效应。很有趣,不是吗?
现在,让我们仔细看看在Simulink中开发的音频应用程序,首先从MATLAB函数块开始。金宝app让我们打开一个空白的Simulink模金宝app型,然后导航到Simulink库。在用户定义函数下,可以定位MATLAB函数块。让我们把这个添加到空白模型中。您还可以在Simulink编辑器的任何地方输入MATLAB函数,并获得这个代码块。金宝app让我们添加一个常量块,然后是一个显示块。现在,我们双击这个block。那么,这里就是您将实现MATLAB脚本的地方。让我们看一个简单的标量乘法例子。输入乘以2。 Now let’s just run this Simulink model. Perfect! The answer is 2, as expected.
我们在Simulink中看到了一个非常基本的MATLAB函数块实现。金宝app我们在Simulink模型中实现的音频效果背后的算法是作为MATLAB脚本开发的,然后在Simulink中的这些MAT金宝appLAB函数块中使用。然后生成代码并直接从Simulink部署到Arduino MKR1000板。金宝app音频输出可在板的DAC引脚。为了听到这个,我只用了一个3.5毫米的音频断接板,然后把它连接到板上的DAC插脚和GND插脚上。耳机/耳机现在可以连接到这个突破板听到的声音。如果你没有这个音频断接板,不要担心。您可以简单地将电线缠绕在耳机/耳机的音频插孔上,并将其适当地连接到板上的DAC和GND插脚。
就是这样!因此,对于这个音频应用程序,您只需要一个耳机,Arduino和Simulink!金宝app
好吧。现在,有了这些信息,让我们回到Simulink模型。金宝app除了MATLAB函数块之外,此应用程序中还使用了其他几个i/o块。这是一个常量块,用于访问实现音频效果的声音剪辑。这里需要注意的一件有趣的事情是,Simulink允许在闪存中存储数据,比如这里的声音金宝app片段,这在目标硬件没有足够的RAM内存时非常有用。为了做到这一点,你需要将常数块的采样时间设为无穷大,这个块已经这样做了。其次,您需要在代码生成优化设置中将默认的参数行为设置为inline。让我们快速看一下这个。我们来看配置参数;在“代码生成”选项卡“优化设置”下,可以找到默认的参数行为。 It is already set to inlined.
下一个模块是Arduino的模拟输出模块。它在板上指定的DAC引脚上产生电压。它是Arduino的Simulink支持金宝app包的一部分。金宝app
我们的下一个块是To Workspace块。它帮助我们将仿真输出保存到工作空间中的一个变量中,以便在MATLAB中执行任何数据的后处理或分析。
接下来,让我们来看看这个旋转旋钮。它是一个交互式的UI块,这有助于由所选择的值赋值给一个变量或常数选择的音频效果。正如你所看到的,也有在这个应用中实现三个音频效果。回声效果,混响效果,间距移效应。选项“原始”是指原来的声音片段,没有音频效果。通过旋转旋钮选择的算法被存储为在该恒定块的常数。MATLAB函数块然后利用以实现所选择的音频效果这个恒定值。
现在,如果你有兴趣通过原始声音剪辑属性去,点击这个按钮。它启动MATLAB脚本读取的声音片段,并从它的属性然后将其在此Simulink模型用来定义了许多常量。金宝app此脚本加载Simulink模型前最初运行。金宝app
好的,我们看到了一些i/o和UI块。现在让我们关注模型的大脑,也就是MATLAB函数块。在中间,你可以看到一个子系统块。该模块将与Simulink模型中实现的音频处理应用程序相对应的所有MATLAB功能模块进行分组。金宝app
第一个MATLAB函数块按原样播放原始声音片段。块内的脚本将每个音频样本写入板上的DAC引脚。在此脚本中不进行其他计算。现在,由于模拟输出块只接受uint16数据类型,MATLAB Fcn块中使用的所有变量和常量都是uint16数据类型。
第二个MATLAB Fcn块实现了回声音频效果。在遍历脚本之前,让我们先了解什么是echo效果。回声效应只是电流和延迟音频样本的叠加。因此,人们可以同时感知现在和过去的音频样本。这种效应被称为回声效应。从这个方程中可以看出,输出是当前和过去音频样本的加权和。参数alpha控制回波的强度。TauD是与实际延时(以秒为单位)对应的延迟采样数。最后的输出方程是规范化的,使用表达式(1+alpha)来处理回放期间的声音饱和度。
好了,所以现在我们明白了如何呼应的作品,让我们回过头来回声效果MATLAB FCN模块实现。正如前面所讨论的,UINT16数据类型是在所有的MATLAB FCN块中使用,因为这是在模拟输出块载体。金宝app但是,那么我们该如何利用浮点值的对我们的MATLAB脚本不同的变量和常量?例如,0.5秒的延迟和增益0.8?
为了解决这个问题,浮点值表示为有理数,即由分母形式的分子。正如你可以在这里看到,在几秒钟的延迟和增益被表示为有理数。
然而,这并不能完全解决问题。现在这些有理数被重新排列,通过采取LCM最终输出方程中,以便具有一个共同的除数。这减少了分割到只有一个的数量,这最终降低的精度损失是由于无符号整数值的除法。
正如你在这里看到的,这是回声效果的最终输出方程,它被重新安排为有一个公约数,因此只需要进行一次除法运算,这有助于达到更好的精度。
对,这就是回声效应。接下来,我们来看看混响效应。这种效果也被称为混响,是声音产生后声音的持续存在,由多次反射产生,最终随着声音被不同的物体吸收而衰减。这意味着输出方程分别依赖于过去的音频输入样本和过去的音频输出样本来模拟反射和衰减现象。
作为回波输出方程中,参数阿尔法控制的效果的强度和TAUD是对应在秒的实际延迟延迟的样本的数目。
为了对多次反射和衰减进行建模,以级联方式实现了三个不同tauD值的输出方程,以便对后续的反射和衰减进行建模。
好了,现在我们可以跳到MATLAB Fcn模块实现的混响效果。类似于echo效应,浮点变量和常量被表示为有理数,最终的输出方程被重新安排为使用单一除法运算的公约数,以减少由于对无符号整数值进行除法而造成的精度损失。
这是对应于所述第一延迟值的第一差分方程。该方程的输出被馈送作为输入到对应于第二延迟值等等第二差分方程。
最后,输出与音频输入叠加,然后进行归一化处理,以处理饱和度。
好的,到目前为止我们已经讨论了echo和reverb算法。我们来谈谈这些算法的性能。声音片段的采样率为8KHz。这意味着,为了听到在声音片段上实现的有意义的音频效果,该算法需要在125uS内工作,这是8KHz的倒数。如果不这样做,将导致板上的算法溢出,音频效果将是不可取的。echo和reverb算法都经过了优化,使得Simulink中每个时间步的执行时间都小于125uS。金宝app
好了,现在让我们给我们的最终使用的算法,这是音高移位效应移动。这种效果是通过拉伸或压缩的声音片段,然后播放的速度得到的信号等于所述扩展或压缩因子,分别导致在间距的增加或减少来实现的。例如,拉伸通过在声音片段的相等的间隔在小窗口长度固定,然后通过在这些间隔附加窗口延伸的声音片段来实现。这实质上复制在相等的时间间隔的声音片段。将得到的声音片段现在有样品的数量的两倍。播放以两倍的采样率或回放速率所得的声音剪辑播放对于相同的持续时间所得到的声音片段,但具有增加的节距。代替追加的音频样本,可以以相等的间隔除去音频样本,然后以较慢的速率回放信号以获得在所述间距的减小。
所以,现在有这样的认识,让我们回到我们的Simulink模型,以实现间距变化效果的MATLAB FCN块金宝app。20毫秒的窗口长度已经在这里实现。该算法累积音频样本等于窗口长度,然后将其附加到以规则间隔的原始声音片段。
现在所讨论的,与俯仰移算法,我们需要加倍回放速率或,换言之,减少了一半MATLAB FCN块的采样时间,相比于其他的算法。这种调度可以在Simulink中轻松完成。金宝app事实上,Simulink中的核心优势之一是它的调度功能。金宝app这是非常方便的Simulink模型内执行不同的块调度。金宝app它很简单,只要从该块参数设定采样时间。让我们在特定块上点击右键。导航到块参数。这里是采样时间。因此,对于音调移位MATLAB FCN块,采样时间应一半他人这意味着采样速率的两倍,所要求的算法。
此外,我们还需要速率转换块,它负责在Simulink中进行多速率建模。金宝app由于pitch-shift MATLAB Fcn块的运行速度是采样率的两倍,所以在MATLAB Fcn块之前和之后插入这些块。如果你的模型中没有多费率,不像我,你就不需要它们。
不同的线条颜色表示模型中出现的不同的采样时间。红色是最快的,绿色是最慢的。粉红色引用到一个常数,意味着有无限的采样时间。粉红色就像你的朋友!理想情况下,您需要一条粉红色的线,以确保该参数始终可用于模拟,并且表现得像一个常量,因此在代码生成期间进入闪存。
实际上,Simulink中的调度特性是令人难以置信的,因为在其他id金宝appe中实现相同的调度特性有时会非常麻烦。
好了,这就是为这个应用程序设计的三个音频效果的三个MATLAB Fcn块实现。现在让我们在将代码部署到硬件之前在Simulink中模拟模型。金宝app选择“正常模式”在主机上模拟模型,主机就是这台笔记本电脑。设置模拟的持续时间为5s,因为音频剪辑的长度为5s。
好了,现在让我们玩的模拟数据。通常情况下,我可以从音频系统工具箱库中添加“音频写”块这种模式,然后播放声音。但是,如果你没有一个,你可以播放从MATLAB的声音,用在模拟由对工作区块结束创建的变量。引擎盖下该按钮触发,其从工作区拾取变量和从MATLAB播放它的回调函数。
这是原来的声音片段。现在,让我们来实现对夹一些音频效果。因此,这是怎样的回声的声音。接下来,让我们对混响和模拟点击。所以,这是混响效果。选择我们的最终使用的算法,音高变化效果。让我们模拟这种效果。完美!所以,模拟与所有的算法进行得很顺利。
现在,我们将移动到目标硬件配置。一旦部署到硬件,在同一时间只有一个算法会在硬件上运行。有没有办法动态除非我们连接一些外部按钮开关将仅越来越多的硬件添加到该应用程序的算法之间进行切换。
幸运的是,我们有一个机制,通过它我们可以,而他们是在目标上运行动态地从Simulink的算法之间切换。金宝app这是通过运行在外部模式完成仿真。外部模式仿真是Simulink中的另一个有趣的功能,它可以帮助你的硬件上运行实时模型和Simulink模型的应用板现场参数变化。金宝app因此,代码生成仅需要一次调整参数和监视信号。在我们的应用程序,我们将在代码中与外部模式模拟的帮助下,硬件上运行不同的算法之间的切换。
在我们开始之前,让我们赶紧来看看硬件设置。It’s a simple setup with an Arduino MKR1000 board connected to the laptop with a micro USB cable and a 3.5 mm audio jack connected to the laptop at one end and the breakout board at the other end, as discussed previously, to record the final audio output. In your case, you would be simply connecting a suitable 3.5 mm headset to the breakout board, instead of this green audio cable, to listen to the audio output directly from Arduino.
好了,现在我们将开始外部模式模拟,将时间周期设为无穷大,因为我们将连续运行模拟。让我们点击运行按钮。默认情况下,模型被设置为播放原始声音剪辑。在播放完原声剪辑后,我们会选择回声效果,然后是混响和变音效果,通过旋转旋钮来实现。通过外部模态模拟,将这些变化直接传达到板上运行的代码。
好了,这就是外部模式模拟。
通过这个模拟,我们来到了本视频的结尾。本视频中实现的音频应用程序只是一个小示例,演示了MATLAB Fcn块在Simulink中实现MATLAB脚本的功能。金宝app您可以继续使用MATLAB脚本和Simulink中的MATLAB Fcn块构建自己的应用程序。金宝app
希望你们喜欢这个视频。有关其他MATLAB和Simulink产品的更多视频,请访问我们的网站下载188bet金宝搏金宝appwww.tatmou.com/videos
您还可以选择从下面的列表中的网站:
选择最佳的网站性能的中国网站(在中国或英文)。其他MathWorks的国家网站都没有从您的位置访问进行了优化。