主要内容

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

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

介绍

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

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

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

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

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

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

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

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

HelperAudioloOptimereExample;

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

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

helperAudioLoopTimerExample(true);

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