主要内容

度量流实时音频算法的性能

本例提供了一个实用程序,可用于分析为实时流应用程序设计的信号处理算法的定时性能。

简介

使用MATLAB实时原型音频信号处理算法的能力主要取决于其执行性能。性能受到许多因素的影响,如算法的复杂性,采样频率和输入帧大小。最终,算法必须足够快,以确保它总是可以在可用的时间预算内执行,而不会丢失任何帧。每当音频输入队列被新的样本溢出(读取速度不够快)或音频输出队列不足(写入速度不够快)时,帧就会被丢弃。丢失的帧会在输出音频信号中产生不希望看到的伪影。

本示例提供了一个实用程序,用于分析MATLAB中音频信号处理算法的执行性能,并将其与可用时间预算进行比较。

本例中的结果是在一台运行Intel (R) Xeon (R) CPU、时钟速度为3.50 GHz和64 GB RAM的机器上获得的。结果因系统规格而异。

陷波滤波器应用的性能测量

在本例中,您测量一个八阶陷波滤波器的性能,该滤波器使用dsp。BiquadFilter

helperAudioLoopTimerExample定义并实例化算法中使用的变量。属性从文件中读取输入dsp。AudioFileReader对象,然后流通过陷波滤波器在处理循环。

audioexample。AudioLoopTimer用于分析执行性能并显示结果摘要的实用程序对象。该实用程序使用简单的tic/toc命令来记录模拟的不同阶段的时间。初始化时间(即在模拟循环开始之前实例化和设置变量和对象所花费的时间)使用ticInit而且tocInit方法。单个模拟循环时间使用ticLoop而且tocLoop方法。模拟循环完成后,将使用对象的性能报告生成性能报告generateReport方法。

执行helperAudioLoopTimerExample运行仿真并查看性能报告。

helperAudioLoopTimerExample;

性能报告图在顶部的图中显示了循环执行时间的直方图。红线表示允许的最大循环执行时间或预算,超过这个时间样本将被丢弃。每个模拟循环的预算等于L/Fs,其中L是输入帧大小,Fs是采样率。在本例中,L = 512, Fs = 44100 Hz,每个循环的预算约为11.6毫秒。性能报告还在底部图中显示各个模拟循环的运行时。同样,红线表示每个循环允许的预算。

注意,尽管中值循环时间完全在预算之内,但最大循环时间超过了预算。从下面的图中可以明显看出,在第一次循环传递时超出了预算,而随后的循环运行都在预算范围内。第一个模拟循环的相对较慢的性能是由于第一次在上调用step方法时所招致的惩罚dsp。BiquadFilter而且dsp。AudioFileReader对象。第一次调用一步触发不依赖于step的输入的一次性任务的执行,例如硬件资源分配和状态初始化。这个问题可以通过在模拟循环之前执行一次性任务来缓解。方法来执行一次性任务设置方法的初始化阶段的模拟对象。执行helperAudioLoopTimerExample(真正的)要重新运行启用预循环设置的模拟。

helperAudioLoopTimerExample(真正的);

现在所有循环运行都在预算范围内。注意,与第一个性能报告相比,最大循环时间和总循环时间都大大减少了,但代价是初始化时间增加了。