MeShawn 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生成的代码在此板上实时运行,我金宝app正在使用Simulink来调谐参数和通过外部模式监视信号。
所以,你刚才听到的原始声音片段,接着是三个不同的音频效果,对夹来实现;即,回波效果,混响和音高移效应。有趣,不是吗?
现在,让我们仔细看看在Simulink中开发的音频应用程序,从Matlab功能块开始。金宝app让我们打开一个空白的Simulink模金宝app型,然后导航到Simulink库。在用户定义的函数下,您可以找到MATLAB功能块。让我们将其添加到空白模型中。您还可以在Simulink编辑器中的任何位置开始键入matlab函数并获取此块。金宝app让我们添加一个常量块,然后添加一个显示块。现在,让我们双击此块。所以,这是您将在哪里实现MATLAB脚本。让我们看看一个简单的标量乘法示例。将输入乘以2.现在让我们刚刚运行此Simulink模型。金宝app 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?
为了解决这个问题,浮点值表示为Rational Numbers,即,通过分母形式表示在分子中。正如您在这里看到的那样,延迟以秒数和增益表示为Rational Numbers。
但是,这并没有完全解决问题。现在通过采用LCM在最终输出方程中重新排列这些律数量,以便具有常见的除法。这减少了仅仅是一个部门的数量,最终会导致未签名整数值的划分导致的精度丢失。
正如您可以在此处看到的那样,这是回声效果的最终输出方程,它已被重新排列以具有常见的除法,因此发生了单独的操作,这有助于实现更好的精度。
对,所以这是回声效果。接下来,让我们来看看混响效果。又称混响,这种效果是在发出声音后的声音的持久性,由多个反射产生,这最终衰减,因为声音被不同的物体吸收。这意味着输出方程取决于过去的音频输入样本以及过去的音频输出样本,以分别模拟反射和衰减现象。
与回声输出方程一样,参数alpha控制效果的强度和Taud是延迟样本的数量,其实际延迟以秒为单位。
为了模拟多个反射和衰减,输出方程已经用级联方式以三种不同的Taud值实现,以便模拟后续反射和衰减。
好吧,所以现在我们可以跳转到Matlab FCN阻止实现的混响效果。类似于回声效果,浮点变量和常数已表示为Rational Numbum,并且重新排列最终输出方程以具有单个划分的公共除数,以减少由于无符号整数值的划分而降低精度的损失。
这是对应于所述第一延迟值的第一差分方程。该方程的输出被馈送作为输入到对应于第二延迟值等等第二差分方程。
最后,随着音频输入叠加输出,然后归一化以照顾饱和度。
好吧,所以'直到现在我们已经讨论了回声和混响算法。让我们谈谈这些算法的性能。声音剪辑的采样率为8kHz。这意味着为了听到在声音剪辑上实现的有意义的音频效果,该算法需要在125US内工作,这是8kHz的逆。如果不这样做,将导致在电路板上的算法超越,音频效果将是不可取的。已经优化了回波以及混响算法,使得在Simulink中每次步骤的执行时间小于125U。金宝app
好了,现在让我们给我们的最终使用的算法,这是音高移位效应移动。这种效果是通过拉伸或压缩的声音片段,然后播放的速度得到的信号等于所述扩展或压缩因子,分别导致在间距的增加或减少来实现的。例如,拉伸通过在声音片段的相等的间隔在小窗口长度固定,然后通过在这些间隔附加窗口延伸的声音片段来实现。这实质上复制在相等的时间间隔的声音片段。将得到的声音片段现在有样品的数量的两倍。播放以两倍的采样率或回放速率所得的声音剪辑播放对于相同的持续时间所得到的声音片段,但具有增加的节距。代替追加的音频样本,可以以相等的间隔除去音频样本,然后以较慢的速率回放信号以获得在所述间距的减小。
所以,现在有这样的认识,让我们回到我们的Simulink模型,以实现间距变化效果的MATLAB FCN块金宝app。20毫秒的窗口长度已经在这里实现。该算法累积音频样本等于窗口长度,然后将其附加到以规则间隔的原始声音片段。
现在如上所述,通过音高换档算法,我们需要加倍播放速率,或者换句话说,与其他算法相比,将MATLAB FCN块的采样时间降低了一半。在Simulink中可以轻松完成此调度。金宝app事实上,Simulink的核心优势之一是其调度特征。金宝app在Simulink模型中执行针对不同块的调度非常方便。金宝app它与从块参数设置采样时间一样简单。让我们右键单击特定块。导航到块参数。这里是采样时间。因此,对于播放时间,采样时间应为其他一半,即算法的要求,这意味着采样率的两倍。
此外,我们需要在Simulink中处理速率转换块,从而处理多速率建模。金宝app由于音高移位MATLAB FCN块以采样率的两倍运行,因此在此MATLAB FCN块之前和之后插入这些块。如果您的模型中没有多率,与我不同,您将不需要它们。
不同的线条颜色表示模型中存在的不同样本时间。红色是最慢的最快和绿色。粉红色的推荐人常数,意思是具有无限的采样时间。粉红色就像你的朋友!您理想地希望粉红色线以确保参数始终可用于模拟,并表现得像常量,因此在代码生成期间进入闪存。
实际上,Simulink中的调度特征是令人难以置信的,因为它有时可以金宝app太麻烦来实现其他IDE中的相同。
所有权利,那么这些是为此应用设计的三个音频效果的三个Matlab FCN块实现。现在让我们在将代码部署到硬件之前,模拟Simulink中的模型。金宝app选择“普通模式”模拟主计算机中的模型,这是这台笔记本电脑。将模拟的持续时间设置为5S,因为音频剪辑的长度为5S。
好的,现在让我们播放模拟数据。通常情况下,我可以从音频系统工具箱库中添加“音频写”块这种模式,然后播放声音。但是,如果您没有,则可以使用朝向工作区块结束时创建的变量从MATLAB播放声音。引擎盖下的此按钮触发了一个回调函数,该函数从工作区中拾取变量并从Matlab播放。
这是原始的声音剪辑。现在让我们在剪辑上实现一些音频效果。所以这就是回声的声音。接下来,让我们点击ReverB并模拟。所以,这是混响的效果。选择我们的最终算法,音高换档效果。让我们模拟这种效果。完美的!因此,所有算法都进展顺利。
现在,我们将移动到目标硬件配置。一旦部署到硬件,在同一时间只有一个算法会在硬件上运行。有没有办法动态除非我们连接一些外部按钮开关将仅越来越多的硬件添加到该应用程序的算法之间进行切换。
幸运的是,我们确实拥有一种机制,我们可以在算法之间从Simulink在目标上运行时动态地在算法之间切换。金宝app这是通过在外部模式下运行模拟来完成的。外部模式仿真是Simulink的另一个有趣功能,它可以帮助您实时运行模型,并在硬件上实时运行模型,并将Simulink模型中的Live金宝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.mathwands.com/videos.
您还可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。