这个例子展示了一个实用程序,可以用来分析为实时流应用程序设计的信号处理算法的定时性能。
利用MATLAB实现实时音频信号处理算法原型的能力主要取决于其执行性能。性能受多种因素的影响,如算法的复杂度、采样频率和输入帧大小。最终,算法必须足够快,以确保它总是能够在可用的时间预算内执行,并且不丢失任何帧。当音频输入队列被新样本溢出(读取不够快)或音频输出队列被耗尽(写入不够快)时,帧将被丢弃。丢弃帧会在输出音频信号中产生不希望看到的伪影。
这个例子展示了一个实用程序来描述MATLAB中音频信号处理算法的执行性能,并将其与可用的时间预算进行比较。
本例中的结果是在一台运行Intel (R) Xeon (R) CPU的机器上获得的,CPU的时钟速度为3.50 GHz, RAM为64gb。结果因系统规格而异。
在本例中,您将测量使用dsp。BiquadFilter
。
helperAudioLoopTimerExample
定义并实例化算法中使用的变量。从文件中读取输入dsp。AudioFileReader
对象,然后流通过处理循环中的陷波过滤器。
audioexample。AudioLoopTimer用于分析执行性能并显示结果摘要的实用程序对象。该工具使用简单的tic/toc命令来记录模拟的不同阶段的时间。初始化时间(即在模拟循环开始之前实例化和设置变量和对象所花费的时间)是使用ticInit
和tocInit
方法。利用该方法对单个仿真回路的时间进行了测量ticLoop
和tocLoop
方法。在模拟循环完成后,将使用对象的性能报告生成generateReport
方法。
执行helperAudioLoopTimerExample
运行仿真并查看性能报表:
helperAudioLoopTimerExample;
性能报告图在顶部的图表中显示了循环执行时间的直方图。红线表示允许的最大循环执行时间,或预算,超过此值将丢弃样本。每个仿真环路的预算等于L/Fs,其中L为输入帧大小,f为采样率。在这个例子中,L = 512, f = 44100 Hz,每个循环的预算大约是11.6毫秒。性能报告还在底部图中显示单个模拟循环的运行时。同样,红线表示每个循环允许的预算。
注意,尽管中值循环时间在预算范围内,但最大循环时间超过了预算。从底部的图来看,很明显,在第一个循环通过时超出了预算,并且随后的循环运行在预算之内。第一个仿真环路的相对较慢的性能是由于在第一次调用步进方法时产生的惩罚dsp。BiquadFilter
和dsp。AudioFileReader
对象。第一个呼叫一步
触发不依赖于步进输入的一次性任务的执行,例如硬件资源分配和状态初始化。这个问题可以通过在模拟循环之前执行一次性任务来缓解。方法可以执行一次性任务设置
方法对仿真对象进行初始化。执行helperAudioLoopTimerExample(真正的)
在启用预循环设置的情况下重新运行模拟。
helperAudioLoopTimerExample(真正的);
所有循环运行现在都在预算之内。请注意,与第一个性能报告相比,最大和总循环时间大大减少了,但代价是增加了初始化时间。