摘要: 介绍VisualAudio设计和开发环境,一个用于设计和开发音频系统的软件工具。
VisualAudio设计与开发环境是一种用于设计和开发音频系统的新型软件工具。它的实时架构特别适合音频产品开发的挑战。本文简要介绍了VisualAudio,然后介绍了VisualAudio的框架、音频模块以及在音频产品开发中的应用。
如今,音频系统开发人员面临着设计复杂音频系统的日益增长的需求——尤其是家庭音频/视频接收器(avr)和汽车信息娱乐系统——既要快速又要经济高效。为什么?
正常使用的离散音频通道的数量已经从2个到4个增加到5.1个,最近增加到7.1个。
不同的,有时是竞争的,多声道音频格式的数量一直在迅速增加,其中包括杜比 Pro Logic ,杜比数字,DTS 5.1,杜比数字环绕EX 和DTS- es 。
产品必须与数字网络接口,例如面向媒体系统传输(MOST )总线,需要网络堆栈,内容加密和解密以及采样率转换-所有这些都在音频处理器内。
消费者已经开始期望高端和主流产品都具有复杂的后处理功能,例如空间化、自动均衡和低音管理。
为了应对这些因素,开发人员正在转向数字信号处理器(dsp),因为它们的可编程性允许系统针对特定的市场利基和应用进行定制。来自Devices 的SHARC 处理器系列特别适合这项任务,因为它提供了诸如大内存、浮点精度和高性能计算单元等特性。最近发布的第三代SHARC处理器通过集成专门为方便音频产品设计而引入的附加功能,进一步推进了这一步骤。这些功能包括硬件采样率转换器、加密和解密、复杂的数字音频接口和包含多个音频解码器的片上ROM。
DSP用户所面临的历史挑战是软件的开发,使处理器时钟周期的最佳利用和内存的有效利用。长期以来,用汇编语言手工编码音频信号处理算法的方法已经变得越来越不可行。当所需的大部分工作都投入到创建标准的“检查表”和“模仿”功能上,而不是专注于用增值功能区分产品时,情况尤其如此。需要一种更好的方法来开发音频产品软件。
为了满足这一需求,我们开发了一个图形化环境visualaudio -作为设计和开发使用SHARC处理器系列的音频系统的辅助工具。VisualAudio为音频系统开发人员提供了大多数软件构建块,以及一个直观的图形界面,如图1所示,用于设计、开发、调优和测试音频系统。
VisualAudio包括一个基于pc的图形用户界面(GUI,图形工具),一个DSP内核(框架)和一个可扩展的音频算法库(音频模块)。VisualAudio与VisualDSP++ 集成开发和调试环境(IDDE)一起工作,生成的产品就绪代码在速度(每秒数百万条指令(MIPS))和内存使用方面都进行了优化。通过简化开发复杂数字信号处理软件的过程,VisualAudio降低了开发成本、风险和时间。因此,音频系统开发人员能够通过将其音频产品与竞争对手区分开来,专注于增加价值。
VisualAudio的核心是处理音频I/O和后处理的实时软件架构。为了可行,生成的DSP代码必须在MIPS和内存方面高效,并且足够灵活以处理各种音频产品类别。下面介绍VisualAudio实时体系结构,首先是框架,然后是音频处理模块。
框架是处理系统初始化、音频I/O、位流检测(1)、实例化和调用音频解码器以及与主机通信的DSP代码的一部分。VisualAudio为用户提供了avr和汽车音频系统框架的示例。通过编写特定于平台的驱动程序,VisualAudio用户可以自定义框架的许多方面,以满足特定的产品需求。在某些情况下,如果需要进行内部更改以获得最佳性能,还将向VisualAudio用户提供框架源代码。
音频产品具有控制框架设计的特定要求。每个音频产品都有两个主要功能:(1)实时音频处理,(2)控制该处理。这两个函数的时间尺度大不相同。实时处理(所有内部操作完成)必须以采样率进行,否则将在输出音频中出现不可接受的弹出和点击。控制功能可以以慢得多的速率发生,10 Hz到100 Hz,仍然是可以接受的。因此,MIPS的大量使用发生在实时处理中,而软件复杂性的大部分发生在控制功能中。为了简化产品设计和开发,VisualAudio将实时和控制功能分离到单独的线程中。效率是通过手动优化的实时音频处理模块实现的,而控制代码的复杂性是通过允许开发人员用C语言编写并在单独的线程中运行来管理的。
传统上,有两种不同的音频处理方法。在流处理中,音频样本到达时一次处理一个,而在块处理中,几个音频样本被缓冲,然后作为一个组进行处理。每种方法都有不同的优点和缺点。流处理在数据内存方面是有效的,因为不需要音频数据的缓冲。流处理的主要限制是不能容忍多个函数调用的开销。这迫使音频处理代码以内联方式编写,通常使用汇编语言。这样的代码很难模块化和维护。
块处理需要额外的I/O缓冲存储器和临时存储器。典型的块大小在32到256个样本之间。由于一次处理许多样本,因此函数调用的开销会分摊到大量样本上。这将导致mips高效的实现(以额外的内存为代价),但这是首选,因为可以采用结构化编程方法。块处理也很适合生成音频块的音频解码器。例如,杜比数字和DTS解码器在256个采样块中生成音频。
VisualAudio使用的块处理方法还有几个额外的优点。VisualAudio中的所有音频I/O都是双缓冲的,并使用直接内存访问(DMA)进行管理。处理器每个块接收一次中断,而不是每个采样接收一次中断,因此中断开销比流处理少得多。此外,通过利用SHARC处理器的链式DMA功能,双缓冲由DMA控制器管理,大大增加了在处理音频输入/输出(I/O)中断时允许的延迟。
VisualAudio框架将音频以块的形式传送到后处理网络。对块大小有一定的限制。首先,由于某些音频模块的单指令多数据(SIMD)行为,它必须是偶数。其次,最小块大小是8个样本——由于某些音频模块中的流水线。最后,在具有音频解码器的系统中,后处理块大小必须是解码器块大小的一个因素。例如,使用杜比数字,可能的块大小为8、16、32、64、128和256个样本。
在VisualAudio汽车框架的示例中可以看到音频I/O和缓冲,如图2所示。音频从MOST网络或从A/D转换器到达,并被分成多个流。主要的娱乐流是由DVD播放机产生的,另外的单声流是由远程信息处理系统或编钟产生的。DVD数据首先经过数字传输复制检测(DTCP)解密,然后被送入位流检测器。位流检测器的输出被打包成块;当一个完整的数据帧可用时,音频解码器被执行。DVD播放机产生自己的采样率,它不同于后处理使用的采样率。因此,音频解码器的输出必须通过异步采样率转换器。该块将所有输入数据流转换为固定的输出采样率。此时,音频后处理以32个样本的固定块大小执行。作为最后一步,音频通道被馈送到D/ a转换器或返回到MOST网络。
汽车框架包含多个音频解码器,一次只有一个是活动的。为了减少解码器内存需求,VisualAudio管理一个在所有可能的解码器之间共享的解码器内存池。将解码器的输出送入后处理网络;这个驱动D/A转换器。
VisualAudio使用一个简单的中断驱动内核来管理多个线程。例如,示例汽车框架总共包含6个线程。从最高优先级到最低优先级依次是:
主机通信-与主机交换消息-通常通过SPI。消息在DSP用户控制代码(如下所述)内被缓冲和解释。
音频传输中断-由串口中断触发。管理到dac的DMA输出,并格式化要返回到MOST网络的数据。触发用户中断0内的音频处理。
音频接收中断-将音频分成不同的流。执行DTCP解密,并将编码的数据打包成帧。适当时,触发用户中断1中的音频解码器。
音频处理(用户中断0)-对32个样本块执行后处理。大部分处理都在这个线程中进行。
音频解码器(用户中断1)-执行音频解码功能。
DSP用户控制码(UCC)-在没有活动中断时运行,并作为应用程序的主循环。用户产品的控制功能发生在这个线程中。
示例AVR框架中的典型线程活动如图3所示。每个水平切片代表一个不同的线程。音频I/O、解码器和后处理以定期间隔运行,UCC以最低优先级运行。注意,当处理器忙于音频处理时,UCC可能会在几毫秒内不运行。
VisualAudio分区控制功能之间的主机微控制器和DSP。这种分区是任意的,甚至可以支持没有专用主机微控制器的系统。如上所述,UCC以最低优先级执行-使用任何未被中断处理程序消耗的空闲周期。框架通过消息和通知定期调用UCC。
消息是从主微控制器发送到DSP的命令。这些命令用于控制音频处理(例如,“将音量设置为- 20db”,“将低音控制设置为+ 3db”)或查询音频处理状态(例如,“系统是否受限?”)。VisualAudio框架在内部处理一些命令,而其余的则传递给UCC。在每个时间点,主机和DSP之间只能有一个待处理的消息,并且DSP必须在每个命令被处理后发送确认。
通知由框架异步生成,并在几种情况下发生。第一个通知发生在系统初始化期间——在启用任何实时处理之前。系统或应用程序特定的初始化可以在这个时候完成。第二个通知,以大约200hz的频率周期性生成,用于控制实时音频处理,例如,自动增益控制(AGC)计算和更新。最后一类通知由音频解码器响应编码位流中的变化而生成。当采样率发生变化,输入通道的数量发生变化,或者在传入比特流中检测到循环冗余检查(CRC)错误时,就会发生这种类型的通知。这些通知允许UCC在音频处理中做出适当的改变。
由于UCC被实时音频处理抢占了,所以它可能在几毫秒之后才执行,如图3所示。VisualAudio包含几个功能,可以简化编写经常受到中断的UCC。首先,由于主机通信接口只允许在主机和DSP之间挂起一条主机消息,因此不存在消息缓冲区溢出或主机消息相互覆盖的危险。另一个特性是通知队列,其中相同类型的通知相互覆盖。例如,如果在执行UCC之前生成两个采样率通知的时间间隔很近,那么UCC将只接收第二个通知——最终采样率。此外,由于通知的数量有限,因此通知队列的长度也必然有限。
UCC还必须仔细编写以更新某些音频模块参数。某些模块参数,如无限脉冲响应(IIR)滤波器系数,必须在不被音频处理中断的情况下自动更新。
每个VisualAudio框架都有一个关联的XML平台文件,该文件描述了VisualAudio应用程序的目标平台的功能,还包含构建可执行文件所需的源、对象和库文件列表。软件设计和开发通常开始于一个非常可用的评估或开发平台,例如来自的EZ-KIT Lite评估工具包,然后在完成后迁移到实际的目标硬件。VisualAudio的Change Platform Wizard使软件在硬件平台之间的迁移过程自动化。
VisualAudio包含一个大约100个音频处理模块的库,这些模块针对SHARC处理器进行了优化。这些模块按功能分类,包括音量控制,音调控制,过滤器,混音器等-足够的功能类型来开发各种各样的音频产品。这些标准音频模块可以通过实现专有后处理功能的自定义模块来增强。
图4展示了一个10阶IIR滤波器的块处理效率,该滤波器由5个双组滤波器级联实现。每个样本的操作次数绘制为块大小的函数。大多数效率增益都是通过64个样本块实现的,而更大的块的收益会递减。对于该滤波器,核心内环每个样本包含21个乘法累加(mac);但是通过使用SIMD指令同时操作两个数据,循环减少到大约15个周期。
每个音频模块都通过关联的XML文件描述给VisualAudio应用程序。该文件包含模块的内存数据结构、内存分配规则、输入和输出音频通道列表、高级接口变量(显示在模块的图形表示或检查器上)和设计方程的描述。XML语言由标记结构化数据的标签组成。例如,考虑一个简单的音频模块,它将单音频信号按固定增益进行缩放。该模块将包含一个单独的渲染变量amp,该变量指定要应用的增益。在模块的XML文件中,变量amp由如下所示的XML代码描述:
& lt; renderVariable>
<description type= " string " > /description>
& lt;名称类型=“字符串”祝辞amp< / name>
& lt; float>
& lt;最小类型=“浮动”修改= " true "祝辞-1.0 & lt; / min>
& lt;马克斯类型=“浮动”修改= " true "祝辞1.0 & lt; / max>
& lt;默认类型=“浮动”的在1.0 & lt; / default>
& lt; / float>
& lt;使用类型=“字符串”祝辞parameter< / usage>
& lt; designSettable类型=“bool”祝辞true< / designSettable>
& lt;可调类型=“bool”祝辞true< / tunable>
& lt; / renderVariable>
description标签提供了变量的简短摘要。name标记指示数据结构中的变量名称。该变量被描述为浮点型,具有可修改的默认范围[-1 +1],默认值为1.0。VisualAudio将把这个变量作为设计可设置和可调的参数,允许在设计时以及之后的实时调优期间对其进行修改。这个单音频固定增益示例演示了VisualAudio XML格式可以描述的许多变量类型中的一种。
VisualAudio在后处理布局中为音频模块的每个实例创建一个单独的数据结构。所有数据结构都共享一个共同的5字头,描述模块与框架的运行时接口。接下来是模块特定的参数和-state变量。例如,上面描述的scaler模块的数据结构的类型声明是:
类型定义结构体
{
AMF_Module b;//通用5字头
浮动&//实例特定的变量
} AMF_Scaler;
VisualAudio中的音频处理函数遵循统一的调用顺序。每个函数调用时有三个参数:一个指向实例数据结构的指针,一个指向输入和输出缓冲区指针数组的指针(首先是输入缓冲区,然后是输出缓冲区),以及一个指定块大小的整数。继续缩放器的例子,它的实时处理函数定义如下。
void AMF_Scaler_Render(AMF_Scaler *instance, float ** buffers,int blockSize) {
int我;
Float *in = buffers[0];
Float *out = buffers[1];
Float amp = instance->&
(我= 0;i< blockSize;我+ +){
Out [i] = in[i] * &
}
}
请注意,这个例子是用C编写的,以澄清其描述。VisualAudio包含的实际渲染函数是用优化的汇编语言编写的,以提高执行速度。
音频产品中数字信号处理软件的复杂性不断增加。为了解决这个问题,Devices开发了VisualAudio,一个图形音频系统设计和开发环境。VisualAudio通过为开发人员提供音频系统中的许多关键软件构建块,通过直观的图形界面进行管理,简化了音频产品的设计和开发。VisualAudio实时架构足够灵活,可以支持各种产品类型,并且在MIPS和内存方面也很高效。整个VisualAudio工具链启动产品开发;减少开发成本、时间和风险;并使工程师能够专注于创新和产品差异化。
社群二维码
关注“华强商城“微信公众号
Copyright 2010-2023 hqbuy.com,Inc.All right reserved. 服务热线:400-830-6691 粤ICP备05106676号 经营许可证:粤B2-20210308