块或子系统的计算延迟与执行该块或子系统所涉及的操作数量有关。例如,在256个样本输入上操作的FFT块需要Simulink金宝app®软件对每个输入帧执行一定数量的乘法。这些操作所消耗的实际时间在很大程度上取决于计算机硬件和底层软件层(如MATLAB)的性能®环境和操作系统。因此,特定模型的计算延迟可能因计算机平台的不同而不同。
模型状态栏上的仿真时间(可以通过Simulink数字时钟块访问)不提供任何关于计算延迟的信息。金宝app例如,根据Simulink定时器,上面提到的FFT是即时执行金宝app的,没有任何延迟。在模拟时间t=25.0时对FFT块的输入被处理,并在模拟时间t=25.0时输出,而不管FFT算法执行了多少次操作。Simu金宝applink定时器只反映算法延迟,不反映计算延迟。
有许多方法可以减少计算延迟,而无需在更快的硬件上实际运行模拟。首先,你应该熟悉一下手动性能优化(金宝app模型)它描述了一些基本的策略。下面的信息讨论了提高性能的几种选项。
提高性能的第一步是分析您的模型,并消除或简化过度增加计算负荷的元素。这些元素可能包括范围显示和数据日志记录块,这些是您为了调试目的而放置的,但不再需要。除了这些特定于模型的调整之外,您还可以采取一些更通用的步骤来提高任何模型的性能:
使用尽可能地进行基于帧的处理。整个模型以帧为基础是有利的。看到基于帧的处理的好处获取更多信息。
使用DSP Simuli金宝appnk模型模板对Simulink进行数字信号处理建模。有关更多信息,请参见配置信号处理模型的Simul金宝appink环境.
关闭Simulink状态栏金宝app。在建模选项卡中,取消选择环境>状态栏.模拟速度将提高,但时间指示器将不可见。
sim (gcs)
这种启动模拟的方法可以大大提高模拟速度,但也有几个局限性:
您不能与模拟交互(例如,调优参数)。
你必须按Ctrl + C停止模拟,或指定开始和停止时间。
在MATLAB s函数中没有图形更新。
使用金宝app仿真软件编码器™代码生成软件生成通用实时(GRT)针对您的主机平台的代码,并使用生成的可执行文件运行模型。看到金宝app仿真软件编码器文档获取更多信息。
算法延迟是块或子系统算法固有的延迟,与CPU速度无关。在本指南中,块的算法延迟被简单地称为块的延迟。它通常用块的输出滞后于相应输入的样本数量来表示。此延迟直接与该块执行期间Simulink计时器上所消耗的时间相关。金宝app
特定块的算法延迟可能取决于块参数设置和通用Simulink设置。金宝app为了简化问题,使用以下类别对块的延迟进行分类是有帮助的:
以下主题解释了延迟的不同类别,以及模拟和参数设置如何影响特定块所经历的延迟级别。
FFT块就是一个没有算法延迟的组件的例子。当块计算金宝app输入的FFT时,Simulink计时器不记录任何时间通道,并且转换后的数据在接收输入的同一时间步长内可用于输出。还有许多其他块具有零算法延迟,例如矩阵和线性代数库中的块。这些块中的每一个都在单个时间步中处理其输入并生成其输出。
normalized块是零算法延迟块的一个例子:
在MATLAB命令提示符下,键入ex_normalization_tut
.
规范化示例T1模型打开。
双击Signal From Workspace块。的源块参数:来自工作区的信号对话框。
设置block参数如下:
信号=1:100
样品时间=1/4
每帧样本=4
保存这些参数并单击关闭对话框好吧.
运行模型。
该模型将Simulink定时器的当前值从数字时钟块输出到每个输出帧。金宝app
Signal From Workspace块每秒钟生成一个包含四个样本的新帧(T佛=π* 4)。前几个输出帧是:
(t=0) [1 2 3 4]' (t=1) [5 6 7 8]' (t=2) [9 10 11 12]' (t=3) [13 14 15 16]' (t=4) [17 18 19 20]'
在MATLAB命令提示符下,键入挤压(dsp_examples_yout)的
.
归一化输出,dsp_examples_yout
,转换为易于阅读的矩阵格式。结果,答
,如图所示:
Ans = 0 0.0333 0.0667 0.1000 0.1333 1.0000 0.0287 0.0345 0.0402 0.0460 2.0000 0.0202 0.0224 0.0247 0.0269 0.0000 0.0154 0.0165 0.0177 0.0189 4.0000 0.0124 0.0131 0.0138 0.0146 5.0000 0.0103 0.0108 0.0113 0.0118
的第一列答
为数字时钟块提金宝app供的Simulink时间。你可以看到第一个输入的2模的平方,
[1 2 3 4]'. / sum([1 2 3 4]'.^2)
出现在输出的第一行(在时间t=0),与块接收输入的时间步长相同。这表明归一化块具有零算法延迟。
当几个零算法延迟的块在反馈回路中连接时,Simulink可能会报告一个代数回路错误,性能通常会受到影响。金宝app可以通过向反馈循环中注入至少一个延迟样本来防止代数循环,例如,通过包含一个delay块延迟> 0。有关更多信息,请参见代数循环概念(金宝app模型).
可变整数延迟块是具有算法延迟的块的一个例子。在下面的例子中,你使用这个块来演示这个概念:
在MATLAB命令提示符下,键入ex_variableintegerdelay_tut
.
打开可变整数延迟示例T1。
双击Signal From Workspace块。的源块参数:来自工作区的信号对话框。
设置block参数如下:
信号=1:100
样品时间=1
每帧样本=1
保存这些参数并单击关闭对话框好吧.
双击Constant块。的源块参数:常量对话框。
设置block参数如下:
恒定值=3.
将向量参数解释为1-D=清除此复选框
样品时间=1
点击好吧,保存并关闭对话框。
的输入延迟
端口的可变整数延迟块指定了在输入到在
端口被释放到输出。此值表示块的算法延迟。在本例中,由于输入到延迟
端口是3.
, In端口和Delay端口的采样周期为1,则该时刻到达块In端口的采样周期为1t=0被释放到输出t= 3。
双击可变整数延迟块。的功能块参数:可变整数延迟对话框。
设置初始条件参数-1
,然后按好吧.
在调试选项卡上,选择信息覆盖>信号的维度而且Nonscalar信号.
运行模型。
该模型应该类似于下图。
在MATLAB命令提示符下,键入dsp_examples_yout
输出结果如下所示:
Dsp_examples_yout = 0 -1 1 -1 2 -1 3 1 4 2 5 3
第一列是数字时钟块提供的Simulink时间。金宝app第二列是延迟的输入。如预期的那样,输入块在t=0被延迟了三个样本,并作为第四个输出样本出现,在t= 3。您还可以看到Variable Integer Delay块的前三个输出继承了该块的值初始条件参数,-1
.这段时间,从模拟开始直到第一个输入传播到输出,有时称为初始延迟块的。
许多DSP System Toolbox™模块具有一定程度的固定或可调算法延迟。这包括任何算法依赖于延迟或存储元素的块,如过滤器或缓冲区。通常,但不总是,这样的块提供初始条件参数,该参数允许您指定块在初始延迟期间生成的输出值。在其他情况下,初始条件在内部设置为0。
有关特定DSP系统工具箱块的延迟特性,请参阅块参考页。
在某些条件下,Simulink可能会强制块延迟输入的金宝app时间超过块算法严格要求的时间。这种多余的算法延迟被称为任务延迟,因为它来自于Simulink任务模式的同步要求。金宝app一个块的总体算法延迟是其基本延迟和任务延迟的总和。
算法延时=基本算法延时+任务延时
特定块的任务延迟可能取决于以下块和模型特征:
金宝appSimulink有两种任务处理模式:
单一任务
多任务处理
在建模选项卡上,单击模型设置.在解算器窗格中,选择类型>固定步
.扩大解算器的细节.选择,指定多任务模式将每个离散速率视为单独的任务.指定单任务模式,清除将每个离散速率视为单独的任务.
请注意
许多多速率块在Simulink单任务模式下减少了延迟。金宝app查看多速率块的参考页面的“延迟”部分了解详细信息。也看到基于时间的调度和代码生成(金宝app仿真软件编码器).
当一个块的所有输入和输出端口都以相同的帧速率工作时,它被称为单速率。当至少有一个输入或输出端口具有与其他端口不同的帧速率时,一个块被称为多速率。
许多区块是永久的单一速率。这意味着所有输入和输出端口总是具有相同的帧速率。对于其他块,块参数设置确定该块是单速率还是多速率。只有多速率块会受到任务延迟的影响。
请注意
金宝app如果Simulink检测到一个完全由多速率块组成的反馈循环,它可能会报告一个代数循环错误。为了打破这种代数循环,插入一个具有非零延迟的单速率块,例如单元延迟块。有关更多信息,请参见代数循环概念(金宝app模型).
当模型中所有块的所有端口都以单一帧速率运行时,该模型称为单帧速率。当模型包含不同帧速率的块,或至少一个多速率块时,该模型称为多速率模型。请注意,Simuli金宝appnk通过生成错误来防止单速率模型在多任务模式下运行。
许多块可以在基于样本或基于帧的处理模式下操作。要进行选择,可以设置输入处理块的参数列作为通道(基于帧)
或作为通道的元素(基于示例)
.
由块参数和模拟设置的特定组合所创建的任务延迟的具体数量将在块的参考页面的“延迟”部分进行讨论。在本主题中,您将使用UpsampleBlock的参考页面来预测模型的任务延迟:
在MATLAB命令提示符下,键入ex_upsample_tut1
.
打开Upsample Example T1模型。
在建模选项卡上,单击模型设置.
在解算器窗格,从类型列表中,选择固定步
.从解算器列表中,选择离散(无连续状态)
.
扩大解算器的细节.选择将每个离散速率视为单独的任务并点击好吧.
大多数多速率块只有在Simulink多任务模式下才会经历任务延迟。金宝app
双击Signal From Workspace块。的源块参数:来自工作区的信号对话框。
按如下参数配置块参数,单击好吧:
信号=1:100
样品时间=1/4
每帧样本=4
表单输出后,最终数据值由=设置为零
双击Upsample块。的功能块参数:上样对话框。
按如下参数配置块参数,单击好吧:
上抽样因子,L=4
样本偏移量(0到L-1)=0
输入处理=列作为通道(基于帧)
率的选择=允许多速率处理
初始条件=-1
的率的选择参数使模型多速率,因为输入和输出帧速率将不相等。
双击数字时钟块。的源块参数:数字时钟对话框。
设置样品时间参数0.25
,然后按好吧.
这与Upsample块输出的采样周期相匹配。
运行模型。
模型现在应该类似于下图。
该模型将Simulink定时器的当前值从数字时钟块前置到每个输出帧。金宝app
在这个例子中,Signal From Workspace块每秒钟生成一个包含四个样本的新帧(T佛=π* 4)。前几个输出帧是:
(t=0) [1 2 3 4] (t=1) [5 6 7 8] (t=2) [9 10 11 12] (t=3) [13 14 15 16] (t=4) [17 18 19 20]
Upsample块对输入进行4倍的上采样,在每个输入样本之间插入3个零。速率的变化被模型中的Probe块所证实,它显示了从T开始帧周期的减少fi= 1到T佛= 0.25。
在MATLAB命令提示符下,键入挤压(dsp_examples_yout)的
.
模拟的输出以矩阵格式显示。结果的前几个样本,答
,有:
Upsample块的参考页中的“Latency and Initial Conditions”表示当Simulink处于多任务模式时,块的输入的第一个样本作为样本出现在输出中金宝app米我L + D + 1,米我是输入帧的大小,L是Upsample因素, D为样本抵消.这个公式预测本例中的第一个输入应该作为输出示例17出现(即4*4+0+1)。
输出的第一列是数字时钟块提供的Simulink时间。金宝app每个时间的右边的四个值是当时输出帧中的值。可以看到前四个输出帧中的第一个样本都继承了Upsample块的值初始条件参数。由于任务延迟,第一个输入值作为第5个输出帧的第一个样本出现t= 1)。这是样本17。
现在试着在单任务模式下运行这个模型。
在建模选项卡上,单击模型设置.
在解算器窗格,从类型列表中,选择固定步
.从解算器列表中,选择离散(无连续状态)
.
清除将每个离散速率视为单独的任务参数。
运行模型。
该模型现在以单任务模式运行。
在MATLAB命令提示符下,键入挤压(dsp_examples_yout)的
.
结果的前几个样本,答
,有:
在Upsample块的参考页面中的“延迟和初始条件”表明该块在Simulink单任务模式下对所有多速率操作具有零延迟。金宝app
输出的第一列是数字时钟块提供的Simulink时间。金宝app每个时间的右边的四个值是当时输出帧中的值。第一个输入值作为第一个输出帧的第一个样本出现t= 0)。这是零延迟条件的预期行为。对于本例中使用的特定参数设置,运行upsample_tut1
在单任务模式下,消除了在多任务模式下运行模型时出现的17个样本延迟。
现在,您已经成功地使用了Upsample块的参考页面来预测模型的任务延迟。