Meeshawn Marathe, MathWorks
每个人都发生了什么?我的名字是Meeshawn,欢迎来到这个视频如何使用Simulink将Matlab脚本部署到Arduino。金宝app哇,那是新的!使用Simulink部署Matlab脚本?金宝app
你必须思考:这是可能的吗?
好的,Sim金宝appulink允许你在MATLAB函数块中插入MATLAB脚本,然后从Simulink直接生成代码。别担心,我们稍后会讨论MATLAB函数块,但现在,让我给你们一个音频处理应用的快速演示它是我在Simulink中开发的。金宝app我已经在一个声音剪辑上实现了音频效果,使用Simulink生成代码,然后将代码从Simulink部署到Arduino MKR1000板上。金宝app
这是一个使用MATL金宝appAB功能块的SIMULINK模型,其中包含音频效果的实现。从Simulink生成的代码在此板上实时运行,我金宝app正在使用Simulink来调谐参数和通过外部模式监视信号。
因此,您刚刚听到原始声音剪辑,然后是三种不同的音频效果,在剪辑上实现;即,回声效应,混响和俯仰效果。有趣,不是吗?
现在,让我们仔细看看在Simulink中开发的音频应用程序,从MATLAB函数块开始。金宝app让我们打开一个空白的Simulink模金宝app型,然后导航到Simulink Library。在用户定义函数下,可以找到MATLAB函数块。让我们将此添加到空白模型中。您也可以开始在Simulink编辑器的任何地方输入MATLAB函数,并获得此块。金宝app让我们添加一个常量块和一个显示块。现在,让我们双击这个区块。因此,这里是您将实现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内存时很有用。为此,您需要将常量块的采样时间设置为Infinity,这已经为此块已经完成。其次,您需要将默认参数行为设置为内联,在代码生成优化设置中。让我们快速看看这个。让我们转到配置参数;在代码生成选项卡下,优化设置,可以找到默认参数行为。 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块实现回声音频效果。在浏览脚本之前,让我们先了解什么是回音效果。回声效应只是电流和延迟音频样本的叠加。因此,我们可以同时感知现在和过去的音频样本。这种效应被称为回声效应。从这个等式中可以看出,输出是当前和过去音频样本的加权和。参数alpha控制回声的强度。TauD是实际延时对应的延时采样数,以秒为单位。最后的输出方程使用表达式(1+alpha)归一化,以处理播放期间的声音饱和度。
好吧,所以现在我们了解回声如何工作,让我们回到Matlab FCN阻止实现的回声效果。如前所述,UINT16数据类型在所有MATLAB FCN块中使用,因为这是模拟输出块支持的支持。金宝app但是,我们如何利用我们的Matlab脚本中不同变量和常量的浮点值?例如,延迟0.5秒和增益0.8?
为了解决这个问题,将浮点值表示为有理数,即分子分母形式。正如你在这里看到的,以秒为单位的延迟和增益被表示为有理数。
然而,这并不能完全解决问题。这些有理数现在通过取LCM在最终的输出方程中重新排列,以便有一个公约数。这将除法的次数减少到只有一个,这最终减少了由于无符号整数值的除法而造成的精度损失。
正如您可以在此处看到的那样,这是回声效果的最终输出方程,它已被重新排列以具有常见的除法,因此发生了单独的操作,这有助于实现更好的精度。
这就是回声效应。接下来,让我们来看看混响效果。这种效果也被称为混响,是声音产生后的一种持续的声音,由多次反射产生,最终随着声音被不同的物体吸收而衰减。这意味着输出方程分别依赖于过去的音频输入样本和过去的音频输出样本来模拟反射和衰减现象。
正如在回波输出方程中,参数alpha控制效应的强度,tauD是对应于实际延迟秒数的延迟采样数。
为了模拟多个反射和衰减,用三个不同的tauD值串级实现了输出方程,以模拟后续的反射和衰减。
好了,现在我们可以跳到MATLAB Fcn块实现来实现混响效果。与回波效应类似,浮点变量和常数被表示为有理数,最终的输出方程被重新安排为具有一个单独除法运算的公约数,以减少无符号整数值被除法造成的精度损失。
这是与第一延迟值相对应的第一差分等式。将该等式的输出作为对应于第二延迟值等的第二差分方程的输入来馈送。
最后,随着音频输入叠加输出,然后归一化以照顾饱和度。
好吧,所以'直到现在我们已经讨论了回声和混响算法。让我们谈谈这些算法的性能。声音剪辑的采样率为8kHz。这意味着为了听到在声音剪辑上实现的有意义的音频效果,该算法需要在125US内工作,这是8kHz的逆。如果不这样做,将导致在电路板上的算法超越,音频效果将是不可取的。已经优化了回波以及混响算法,使得在Simulink中每次步骤的执行时间小于125U。金宝app
好的,所以现在让我们继续前进到我们的最终算法,这是摇摆效果。通过拉伸或压缩声音夹,然后以等于拉伸或压缩因子的速率播放所得到的信号来实现这种效果,导致节距的增加或减少。例如,通过在声音剪辑的相等间隔的小窗口长度上固定在小窗口长度上来实现拉伸,然后通过以这些间隔附加窗口来延伸声剪辑。这基本上以相等的时间间隔重复声音夹。结果剪辑现在的样本数量是两倍。在样品速率或播放速率下播放所产生的声音剪辑,结果声音剪辑播放同时持续时间,但随着音高的增加。而不是附加音频样本,可以以相等的间隔移除音频样本,然后以较慢的速率播放信号以获得音高的减少。
所以现在通过这种理解,让我们返回我们的Simulink模型,到Matlab FCN块实现音高换档效果。金宝app这里实现了20ms的窗口长度。该算法累积等于窗口长度的音频样本,然后定期将其附加到原始声音剪辑。
现在,正如所讨论的,与其他算法相比,我们需要加倍播放速率,或者换句话说,减少MATLAB Fcn块的采样时间一半。这个调度可以在Simulink中很容易地完成。金宝app事实上,Simulink的核心优势之一就是它的调度特性。金宝app在Simulink模型中为不同的块执行调度是非常方便的。金宝app这就像从块参数设置采样时间一样简单。让我们右键点击一个特定的块。导航到块参数。这是样本时间。所以对于pitch-shift MATLAB Fcn块,采样时间应该是其他块的一半,也就是采样率的两倍,这是算法要求的。
此外,我们还需要速率转换块,用于在Simulink中进行多速率建模。金宝app由于pitch-shift MATLAB Fcn块以两倍的采样率运行,这些块在MATLAB Fcn块之前和之后被插入。如果你的模型中没有多重速率,不像我,你就不需要它们。
不同的线条颜色表示模型中出现的不同样本时间。红色是最快的,绿色是最慢的。粉色指的是一个常数,意味着有无限的采样时间。粉色就像你的朋友!理想情况下,您可能希望用一条粉色线来确保参数始终可用于模拟,并表现得像一个常量,因此在代码生成期间进入闪存。
实际上,Simulink中的调度特征是令人难以置信的,因为它有时可以金宝app太麻烦来实现其他IDE中的相同。
所有权利,那么这些是为此应用设计的三个音频效果的三个Matlab FCN块实现。现在让我们在将代码部署到硬件之前,模拟Simulink中的模型。金宝app选择“普通模式”模拟主计算机中的模型,这是这台笔记本电脑。将模拟的持续时间设置为5S,因为音频剪辑的长度为5S。
好,现在让我们播放模拟数据。通常我可以从audio System Toolbox库中添加一个“音频写入”块到这个模型中,然后播放声音。然而,如果您没有,您可以使用To-Workspace块在模拟结束时创建的变量,从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脚本和MATLAB Fcn块在Simulink中构建自己的应用程序。金宝app
我希望你喜欢看这个视频。有关其他Matlab和Simulink产品的更多视频,请访问我们的网站下载188bet金宝搏金宝appwww.tatmou.com/videos
您还可以从以下列表中选择一个网站:
请选择表现最佳的中国网站(中文或英文)。MathWorks的其他国家网站并没有针对您所在位置的访问进行优化。
该网站使用cookies来改善您的用户体验,个性化内容和广告,并分析网站流量。如果您继续使用本网站,即表示您同意我们使用cookies。请参阅我们的隐私政策要了解有关cookie的更多信息以及如何更改设置。