主要内容

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

这个例子展示了一个实用程序,可以用来分析为实时流应用程序设计的信号处理算法的定时性能。

介绍

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

这个例子展示了一个实用程序来剖析在MATLAB内音频信号处理算法的执行性能,并将其与可用的时间预算进行比较。

结果在此示例中获取在运行英特尔(R)Xeon(R)CPU的机器上,时钟速度为3.50 GHz和64 GB的RAM。结果因系统规格而异。

测量陷波器应用的性能

在这个例子中,你测量一个八阶陷波器的性能,使用dsp。BiquadFilter

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

audioexample。AudioLoopTimer实用程序是否用于配置执行性能并显示结果摘要。该实用程序使用简单的TIC / TOC命令记录模拟的不同阶段的定时。使用初始化时间(即在模拟环路开始之前实例化和设置变量和对象)的初始化时间ticInittocInit方法。单个仿真回路时间是使用ticLooptocLoop方法。在模拟循环完成后,将使用对象的性能报告生成性能报告generateReport方法。

执行helperAudioLoopTimerExample运行模拟并查看性能报告:

helperaudioloOptimerexample;

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

请注意,尽管中值循环时间在预算范围内,但最大循环时间超过了预算。从图的底部可以明显看出,在第一个循环通过时,预算被超过了,而随后的循环运行在预算之内。第一个仿真回路的相对较慢的性能是由于第一次调用步进方法导致的惩罚dsp。BiquadFilterdsp。AudioFileReader对象。第一次打电话触发执行不依赖于步骤的输入的一次性任务,例如硬件资源分配和状态初始化。通过在仿真环路之前执行一次性任务,可以减轻此问题。您可以通过调用来执行一次性任务设置初始化阶段模拟对象的方法。执行helperAudioLoopTimerExample(真正的)在启用预循环设置的情况下重新运行模拟。

helperAudioLoopTimerExample(真正的);

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