主要内容

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

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

介绍

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

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

本例的结果是在一台运行Intel (R) Xeon (R) CPU的机器上获得的,该CPU时钟速度为3.50 GHz, RAM为64 GB。根据系统规格的不同,测试结果会有所不同。

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

在本例中,您将测量八阶陷波滤波器的性能,该滤波器使用双四阶滤波器.

HelperAudioloOptimereExample定义并实例化算法中使用的变量。使用音频文件读取器对象,然后在处理循环中流过陷波滤波器。

audioexample.AudioLoopTimer是用于分析执行性能并显示结果摘要的实用程序对象。该实用程序使用简单的tic/toc命令来记录模拟的不同阶段的时间。初始化时间(即在模拟循环开始之前实例化和设置变量和对象所花费的时间)使用提契尼托尼特方法。单个模拟循环时间使用提克罗托克罗普方法。完成模拟循环后,将使用对象的发电机报告方法。

执行HelperAudioloOptimereExample要运行模拟并查看性能报告,请执行以下操作:

helperAudioLoopTimerExample;

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

请注意,虽然中间循环时间在预算范围内,但最大循环时间超过了预算。从下图可以明显看出,第一次循环通过时超出了预算,随后的循环运行在预算范围内。第一个模拟循环的相对较慢性能是由于e第一次在上调用step方法时双四阶滤波器音频文件读取器对象。第一个呼叫一步触发不依赖于步骤输入的一次性任务的执行,例如硬件资源分配和状态初始化。这个问题可以通过在模拟循环之前执行一次性任务来缓解。的方法可以执行一次性任务设置方法对初始化阶段的仿真对象进行处理。执行helperAudioLoopTimerExample(true)在启用预循环设置的情况下重新运行模拟。

helperAudioLoopTimerExample(true);

所有循环运行现在都在预算范围内。请注意,与第一个性能报告相比,最大循环时间和总循环时间已大幅减少,但以较高的初始化时间为代价。