Meeshawn Marathe, MathWorks
这是怎么回事,人呢?我的名字是Meeshawn,欢迎来到这个视频就如何利用Simulink您的MATLAB脚本部署到Arduino的。金宝app哇,这是新的!部署利用Simulink MATLAB脚本?金宝app
你一定在想:这可能吗?
嗯,Simu金宝applink使您可以在MATLAB功能块内插入MATLAB脚本,然后立即生成代码。别担心,我们将在视频中稍后讨论Matlab函数块,但现在让我快速地演示我在Simulink中开发的音频处理应用程序。金宝app我已经在声音剪辑上实现了音频效果,使用Simulink生成的代码,然后从Simulink部署到Arduino MKR1000板的代码。金宝app
这是一个带有MATL金宝appAB功能块的Simulink模型,其中包含音频效果的实现。Simulink生成的代码在此板上实时运行,我使用Simulink通过外部模式调整参数和监控信号。
所以,你刚才听到的原始声音片段,接着是三个不同的音频效果,对夹来实现;即,回波效果,混响和音高移效应。很有趣,不是吗?
现在,让我们仔细看看在Simulink中开发的音频应用程序,从Matlab功能块开始。金宝app让我们打开一个空白的Simulink模金宝app型,然后导航到Simulink库。在用户定义的函数下,您可以找到MATLAB功能块。让我们将其添加到空白模型中。您还可以在Simulink编辑器中的任何位置开始键入matlab函数并获取此块。金宝app让我们添加一个常量块,然后添加一个显示块。现在,让我们双击此块。所以,这是您将在哪里实现MATLAB脚本。让我们看看一个简单的标量乘法示例。将输入乘以2.现在让我们刚刚运行此Simulink模型。金宝app Perfect! The answer is 2, as expected.
我们刚刚在Simulink中看到了一个非常基本的MATLAB函数块实现。在我们的Simulink模型中实现的音频效果背后的算法作为MATL金宝appAB脚本开发,然后在Simulink的这些MATLAB功能块中使用。然后从Simulink生成代码并直接部署到Arduino MKR1000板。音频输出在板的DAC引脚处可用。为了听到这个,我只使用了一个3.5毫米的音频转接板,然后将其连接到板上的DAC引脚和GND引脚。现在,可以将耳机/耳机连接到此转接板上以听到声音。如果没有这个音频转接板,请不要担心。您只需将电线缠绕在耳机/耳机的音频插孔上,并将其适当连接到电路板上的DAC和GND引脚。
就是这样!所以对于这个音频应用程序,您只需要一个耳机,arduino和simulink!金宝app
好吧现在,有了这些信息,让我们回到Simulink模型。除了MATLAB功能块外,此应用程序中还使用了一些其他i/o块。这是一个金宝app常量块,用于访问声音片段以实现音频效果。这里需要注意的一件有趣的事情是,Simulink允许将数据(如此处的声音片段)存储在闪存中,这在目标硬件没有足够的RAM内存时非常有用。为了做到这一点,您需要将常量块的采样时间设置为无穷大,这已针对该块完成。其次,在代码生成优化设置中,需要将默认参数行为设置为inline。让我们快速看一下这个。让我们转到配置参数;在“代码生成”选项卡的“优化设置”下,可以找到默认参数行为。它已设置为内联。
好的,所以我们的下一个块是Arduino的模拟输出块。它在板上的指定DAC引脚上产生电压。它是Arduino的Simulink支持金宝app包的一部分。金宝app
我们的下一个块是To工作区块。它帮助我们将仿真输出保存到工作空间中的变量,以便在MATLAB中执行任何数据后处理或分析。
接下来,让我们来看看这个旋转旋钮。它是一个交互式的UI块,这有助于由所选择的值赋值给一个变量或常数选择的音频效果。正如你所看到的,也有在这个应用中实现三个音频效果。回声效果,混响效果,间距移效应。选项“原始”是指原来的声音片段,没有音频效果。通过旋转旋钮选择的算法被存储为在该恒定块的常数。MATLAB函数块然后利用以实现所选择的音频效果这个恒定值。
现在,如果你对原始声音剪辑的属性感兴趣,点击这个按钮。它启动一个MATLAB脚本,读取声音剪辑,并从其属性定义许多常量,然后在这个Simulink模型中使用。金宝app这个脚本在加载Simulink模型之前开始运行。金宝app
好的,我们看到了几个i/o和UI块。现在让我们关注模型的大脑,它是MATLAB功能块。在中间,您可以看到一个子系统块。此块将与在此Simulink模型中实现的音频处理应用程序相对应的所有MATLAB功能块分组。金宝app
第一个MATLAB功能块按照原样播放原始声剪辑。块内的脚本将每个音频样本写入电路板上的DAC引脚。此脚本中没有其他计算。现在,由于模拟输出块仅接受UINT16数据类型,因此Matlab FCN块内使用的所有变量和常数都是UINT16数据类型。
我们的第二个MATLAB Fcn块实现了回声音频效果。在浏览脚本之前,让我们先了解什么是回声效果。回声效应仅仅是电流和延迟音频样本的叠加。因此,一个人可以同时感知现在和过去的音频样本。这种效应被称为回声效应。正如在这个等式中看到的,输出是当前和过去音频样本的加权和。参数阿尔法控制着回波的强度。TauD为实际延时所对应的延时采样数,以秒为单位。最后的输出方程使用表达式(1+alpha)进行规范化,以处理回放期间的声音饱和度。
好了,所以现在我们明白了如何呼应的作品,让我们回过头来回声效果MATLAB FCN模块实现。正如前面所讨论的,UINT16数据类型是在所有的MATLAB FCN块中使用,因为这是在模拟输出块载体。金宝app但是,那么我们该如何利用浮点值的对我们的MATLAB脚本不同的变量和常量?例如,0.5秒的延迟和增益0.8?
为了解决这个问题,将浮点数表示为有理数,即分子除以分母的形式。正如你在这里看到的,以秒为单位的延迟和增益已经被表示为有理数。
然而,这并不能完全解决问题。这些有理数现在通过取LCM重新排列在最终输出方程中,以便有一个公约数。这将除法的次数减少到1次,最终减少了因无符号整数值除法而造成的精度损失。
正如您在这里所看到的,这是回声效果的最终输出方程,它已被重新安排为具有公约数,因此发生单除法运算,这有助于实现更好的精度。
对,所以这是回声效果。接下来,让我们来看看混响效果。又称混响,这种效果是在发出声音后的声音的持久性,由多个反射产生,这最终衰减,因为声音被不同的物体吸收。这意味着输出方程取决于过去的音频输入样本以及过去的音频输出样本,以分别模拟反射和衰减现象。
在回波输出方程中,参数alpha控制效果的强度,tauD是与实际延迟(以秒为单位)相对应的延迟样本数。
为了模拟多个反射和衰减,输出方程已经用级联方式以三种不同的Taud值实现,以便模拟后续反射和衰减。
好了,现在我们可以跳到MATLAB的混响效应Fcn块实现。类似于echo效应,浮点变量和常量被表示为有理数,最终的输出方程被重新安排为具有单个除法运算的公约数,以减少因无符号整数值除法而造成的精度损失。
这是对应于所述第一延迟值的第一差分方程。该方程的输出被馈送作为输入到对应于第二延迟值等等第二差分方程。
最后,将输出与音频输入叠加,然后进行归一化以处理饱和度。
好的,到现在为止,我们已经讨论了回声和混响算法。让我们谈谈这些算法的性能。声音片段的采样率为8KHz。这意味着,为了在声音剪辑上听到有意义的音频效果,算法需要在125uS范围内工作,这是8KHz的倒数。否则将导致电路板上的算法溢出,音频效果不理想。回声和混响算法都经过了优化,使得Simulink中每个时间步的执行时间小于125uS。金宝app
好了,现在让我们给我们的最终使用的算法,这是音高移位效应移动。这种效果是通过拉伸或压缩的声音片段,然后播放的速度得到的信号等于所述扩展或压缩因子,分别导致在间距的增加或减少来实现的。例如,拉伸通过在声音片段的相等的间隔在小窗口长度固定,然后通过在这些间隔附加窗口延伸的声音片段来实现。这实质上复制在相等的时间间隔的声音片段。将得到的声音片段现在有样品的数量的两倍。播放以两倍的采样率或回放速率所得的声音剪辑播放对于相同的持续时间所得到的声音片段,但具有增加的节距。代替追加的音频样本,可以以相等的间隔除去音频样本,然后以较慢的速率回放信号以获得在所述间距的减小。
所以,现在有这样的认识,让我们回到我们的Simulink模型,以实现间距变化效果的MATLAB FCN块金宝app。20毫秒的窗口长度已经在这里实现。该算法累积音频样本等于窗口长度,然后将其附加到以规则间隔的原始声音片段。
如前所述,使用pitch-shift算法,与其他算法相比,我们需要将回放速率加倍,或者换句话说,将MATLAB Fcn块的采样时间减少一半。这种调度可以很容易地在Simulink中完成。金宝app事实上,Simulink的核心优势之一就是它的调度特性。金宝app在Simulink模型中执行不同块的调度非常方便。金宝app它与通过块参数设置样本时间一样简单。让我们右击一个特定的块。导航到块参数。这是样本时间。因此,对于pitch-shift MATLAB Fcn块,根据算法要求,采样时间应该是其他块的一半,即采样率的两倍。
此外,我们需要在Simulink中处理速率转换块,从而处理多速率建模。金宝app由于音高移位MATLAB FCN块以采样率的两倍运行,因此在此MATLAB FCN块之前和之后插入这些块。如果您的模型中没有多率,与我不同,您将不需要它们。
不同的线条颜色表示样品在模型中出现的时间不同。红色最快,绿色最慢。粉色代表一个常数,意味着有无限的采样时间。粉红色就像你的朋友!理想情况下,您希望有一条粉红色的线,以确保参数总是可以用于模拟,并像常量一样运行,因此在代码生成期间进入闪存。
事实上,Simulink中的调度功能令人难以置信,因为它有时会变得过金宝app于繁琐,无法在其他IDE中实现相同的功能。
好的,这就是为这个应用程序设计的三个音频效果的三个MATLAB Fcn块实现。现在,在将代码部署到硬件之前,让我们在Simulink中模拟模型。选择“正常模式”模拟主机(即本笔记本电脑)中的模型。将模拟的持续时间设置为5s,因为音频剪辑的长度为5s。金宝app
好,现在让我们播放模拟数据。通常情况下,我可以从音频系统工具箱库中添加一个“音频写入”块到这个模型中,然后播放声音。但是,如果你没有,你可以在MATLAB中播放声音,使用在模拟结束时由To-Workspace块创建的变量。引擎盖下的这个按钮触发一个回调函数,该函数从工作区中获取变量,并在MATLAB中播放它。
这是最初的声音片段。现在让我们在剪辑上实现一些音频效果。这就是回音的声音。接下来,让我们点击混响和模拟。这就是混响效应。选择我们最终的算法,pitch-shift效果。让我们模拟一下这种效果。完美!所以所有算法的模拟都很顺利。
现在,我们将移动到目标硬件配置。一旦部署到硬件,在同一时间只有一个算法会在硬件上运行。有没有办法动态除非我们连接一些外部按钮开关将仅越来越多的硬件添加到该应用程序的算法之间进行切换。
幸运的是,我们确实有一种机制,通过这种机制,我们可以在运行于目标上的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.
好吧,所以现在我们将开始外部模式仿真,将时间段设置为Infinity,因为我们将连续运行模拟。让我们点击运行按钮。默认情况下,该模型设置为播放原始声音剪辑。播放原始声剪辑后,我们将选择回波效果,然后是旋转旋钮的帮助和振荡效果。在外部模式仿真的帮助下,这些更改直接传送到板上运行的代码。
好吧,好吧,这是你的外部模式模拟。
通过这个模拟,我们来到了这个视频的末尾。在此视频中实现的音频应用程序只是一个小示例,演示了Matlab FCN块在Simulink中实现了MATLAB脚本的功能。金宝app您可以使用Matlab脚本以及Matlab FCN块在Simulink中使用Matlab脚本来构建自己的应用程序。金宝app
我希望你喜欢看这个视频。有关其他MATLAB和Simulink产品的更多视频,请访问我们的网站下载188bet金宝搏金宝appwww.tatmou.com/videos
您还可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。
本网站使用cookie来改善您的用户体验,个性化内容和广告,并分析网站流量。继续使用本网站,即表示您同意我们使用cookies。请参阅我们的隐私政策要了解有关cookie的更多信息以及如何更改设置。