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