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块实现了回声音频效果。在浏览脚本之前,让我们先了解什么是回声效果。回声效应仅仅是电流和延迟音频样本的叠加。因此,一个人可以同时感知现在和过去的音频样本。这种效应被称为回声效应。正如在这个等式中看到的,输出是当前和过去音频样本的加权和。参数阿尔法控制着回波的强度。TauD为实际延时所对应的延时采样数,以秒为单位。最后的输出方程使用表达式(1+alpha)进行规范化,以处理回放期间的声音饱和度。
好吧,所以现在我们了解回声如何工作,让我们回到Matlab FCN阻止实现的回声效果。如前所述,UINT16数据类型在所有MATLAB FCN块中使用,因为这是模拟输出块支持的支持。万博1manbetx但是,我们如何利用我们的Matlab脚本中不同变量和常量的浮点值?例如,延迟0.5秒和增益0.8?
为了解决这个问题,将浮点数表示为有理数,即分子除以分母的形式。正如你在这里看到的,以秒为单位的延迟和增益已经被表示为有理数。
然而,这并不能完全解决问题。这些有理数现在通过取LCM重新排列在最终输出方程中,以便有一个公约数。这将除法的次数减少到1次,最终减少了因无符号整数值除法而造成的精度损失。
正如您可以在此处看到的那样,这是回声效果的最终输出方程,它已被重新排列以具有常见的除法,因此发生了单独的操作,这有助于实现更好的精度。
对,所以这是回声效果。接下来,让我们来看看混响效果。又称混响,这种效果是在发出声音后的声音的持久性,由多个反射产生,这最终衰减,因为声音被不同的物体吸收。这意味着输出方程取决于过去的音频输入样本以及过去的音频输出样本,以分别模拟反射和衰减现象。
在回波输出方程中,参数alpha控制效果的强度,tauD是与实际延迟(以秒为单位)相对应的延迟样本数。
为了模拟多个反射和衰减,输出方程已经用级联方式以三种不同的Taud值实现,以便模拟后续反射和衰减。
好了,现在我们可以跳到MATLAB的混响效应Fcn块实现。类似于echo效应,浮点变量和常量被表示为有理数,最终的输出方程被重新安排为具有单个除法运算的公约数,以减少因无符号整数值除法而造成的精度损失。
这是与第一延迟值相对应的第一差分等式。将该等式的输出作为对应于第二延迟值等的第二差分方程的输入来馈送。
最后,随着音频输入叠加输出,然后归一化以照顾饱和度。
好吧,所以'直到现在我们已经讨论了回声和混响算法。让我们谈谈这些算法的性能。声音剪辑的采样率为8kHz。这意味着为了听到在声音剪辑上实现的有意义的音频效果,该算法需要在125US内工作,这是8kHz的逆。如果不这样做,将导致在电路板上的算法超越,音频效果将是不可取的。已经优化了回波以及混响算法,使得在Simulink中每次步骤的执行时间小于125U。万博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中的调度特征是令人难以置信的,因为它有时可以万博1manbetx太麻烦来实现其他IDE中的相同。
所有权利,那么这些是为此应用设计的三个音频效果的三个Matlab FCN块实现。现在让我们在将代码部署到硬件之前,模拟Simulink中的模型。万博1manbetx选择“普通模式”模拟主计算机中的模型,这是这台笔记本电脑。将模拟的持续时间设置为5S,因为音频剪辑的长度为5S。
好,现在让我们播放模拟数据。通常情况下,我可以从音频系统工具箱库中添加一个“音频写入”块到这个模型中,然后播放声音。但是,如果你没有,你可以在MATLAB中播放声音,使用在模拟结束时由To-Workspace块创建的变量。引擎盖下的这个按钮触发一个回调函数,该函数从工作区中获取变量,并在MATLAB中播放它。
这是最初的声音片段。现在让我们在剪辑上实现一些音频效果。这就是回音的声音。接下来,让我们点击混响和模拟。这就是混响效应。选择我们最终的算法,pitch-shift效果。让我们模拟一下这种效果。完美!所以所有算法的模拟都很顺利。
现在我们将继续执行硬件部署。部署到硬件后,一次只在硬件上运行一个算法。除非我们连接一些外部按钮开关,否则无法动态地在算法之间切换算法。只会将越来越多的硬件添加到此应用程序。
幸运的是,我们确实有一种机制,通过这种机制,我们可以在运行于目标上的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.
好吧,所以现在我们将开始外部模式仿真,将时间段设置为Infinity,因为我们将连续运行模拟。让我们点击运行按钮。默认情况下,该模型设置为播放原始声音剪辑。播放原始声剪辑后,我们将选择回波效果,然后是旋转旋钮的帮助和振荡效果。在外部模式仿真的帮助下,这些更改直接传送到板上运行的代码。
好吧,好吧,这是你的外部模式模拟。
通过这个模拟,我们来到了这个视频的末尾。在此视频中实现的音频应用程序只是一个小示例,演示了Matlab FCN块在Simulink中实现了MATLAB脚本的功能。万博1manbetx您可以使用Matlab脚本以及Matlab FCN块在Simulink中使用Matlab脚本来构建自己的应用程序。万博1manbetx
我希望你喜欢看这个视频。有关其他Matlab和Simulink产品的更多视频,请访问我们的网站s manbetx 845万博1manbetxwww.tianjin-qmedu.com/videos
您还可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。