消费类音频产品的历史
消费类音频产品的历史最早可以追溯到130年前,在开始的100年间,音频回放只能采用模拟技术。那时采用数字技术的产品体积庞大,价格昂贵,对于消费类产品来说也过于复杂。直到1982年,CD光盘和CD播放器的出现彻底改变了这种局面,黑胶唱片设备似乎一夜之间就消失了。
与此同时,个人电脑的迅速普及使消费类音频产品与数字技术紧密结合在一起。基于磁盘和闪存的MP3(如iPOD)等数字音乐播放器已经取代了磁带设备。今后音频产品的发展方向是什么呢?那就是更加真实的还原声音。声音还原技术一直在不断的发展完善,从早期的单声道到立体声,再到用多个扬声器营造的3D环绕音效。短短几年间,家庭影院系统已经从5.1声道进化为10.1声道。每次技术的飞跃都伴随着更多声道,更高的采样位数,以及更强的处理能力。
日趋复杂的音频编解码格式对性能的需求不断增长,要求处理器的主频也不断提高。然而,提高主频会给设计带来一系列的问题,更高的主频意味着更高的功耗,更多的发热量,需要容量更大的电池,为了散热而增加的风扇也会增加产品成本,并会带来令人讨厌的噪音。SoC设计过程中,更高的处理器主频同时会使时序收敛变得更困难。所有这些问题都应该引起设计者的注意。
迄今为止,销量最大的数字音频播放器是移动电话。除了拨打电话的功能,现在的移动电话实际上都是小型的多媒体终端,既可以播放音视频内容,又能运行包含了复杂音效的游戏,这些功能要求移动电话具有强劲的音频处理能力,同时功耗又要尽可能的低,因为消费者总是希望他们购买的手机有足够长的待机时间,同时希望MP3播放器在提供优秀音质的同时也能长时间播放。
伴随着音频的数字化,视频也已经完成了数字化。如今大多数的视频播放设备都兼容多种音频标准。在汽车音响领域,数字化也在如火如荼的进行中。多年以前,CD被作为标准装备装入汽车,近年来,随着高保真卫星广播的普及,数字收音机也进入了汽车电子领域。在GPS导航设备中,需要文本到语音的转换,某些GPS设备还兼具个人媒体播放器的功能。
音频编解码
编解码格式是所有数字音频应用中的核心元素,它定义了模拟音频信号如何数字化并被压缩成比特流,以及比特流如何被解压并还原为模拟音频信号。
在消费类产品领域最流行的压缩算法是MP3格式,它于1991年同MPEG-1视频标准一起推出,90年代中期,诞生了第一台MP3播放器。随后,厂商们不停在推广其他可以提供更高保真度和更低比特率的算法格式,但MP3仍然在音频标准中占有重要地位,当前几乎所有的消费类产品都支持MP3格式。
大多数的音频编解码算法都采用有损压缩来降低所需的比特率。有损压缩可以减小数据交换和存储的带宽需求,从而降低成本,这也是厂商们采用有损压缩的原因。然而,有损压缩也会降低音频的质量,质量下降的程度与压缩算法有关。只要有足够强大的处理能力,就可以将声音损失控制在人耳无法分辨的水平,因此压缩算法研究人员依然在不断改进他们的算法。不同的应用需要根据自身特点在音频质量和带宽需求之间作出平衡,造成了多种数字音频编解码格式并存的局面。
当你开始考虑如何实现一种音频编解码算法时,你实际上有4种备选方案
1. 在通用处理器上依靠软件实现音频编解码。例如在PC上运行的MP3播放器程序。
2. 利用专用的硬件实现音频编解码,早期的便携MP3播放器采用这种方案。
3. 在DSP处理器上依靠软件实现音频编解码。
4. 在基于通用处理器进行扩展的音频专用处理器上用软件实现音频编解码。
方案1,用一个通用处理器来实现所有系统功能,包括用户界面,I/O和数字音频编解码。这个方案有以下几个优点。首先,音频编解码只是通用处理器上运行的一段软件程序,唯一的硬件开销也许只是增加少量的指令内存。其次,由于采用了软件实现编解码,可以实现多种编解码算法。最后,当出现新的编解码算法时,只需要升级软件就可以支持。
这种方案也的缺点也很明显。数字音频对于暂时失灵很敏感,因为人耳可以捕捉到非常细小的错误。在这一点上音频应用比视频应用的要求更苛刻。在视频应用中,一个错误的像素往往不会被注意到,而音频应用中则不然。采用通用处理器来进行音频编解码,由于处理器还会执行其他的任务,其带宽并非音频专用,这样增加了音频编解码暂时失灵的概率。
除此以外,大多数的通用处理器没有音频专用指令,不能高效的执行音频编解码程序,从而不得不提高处理器的主频,在单位时间里执行更多的指令来达到性能要求。
硬件实现编解码
方案2,采用一颗性能相对较低的处理器搭配专门的音频处理硬件,所有的音频处理任务都由专用硬件来完成。通常,这块硬件作为外设挂在系统总线上。音频采样由处理器通过总线送给编解码硬件,或者由编解码硬件通过DMA直接从内存中读取。在这种方案中系统总线也是共享的。
使用专用编解码硬件的优点在于针对某种特定的编解码格式,它的面积和功耗与其他方案比较是最优的。因此90年代中期的MP3播放器都采用这种方案。它的缺点是每种编解码格式都要增加硬件模块来支持。如图1的设计中,为了支持3种编解码格式,就必须在设计中增加3块硬件逻辑。因此,在需要多格式音频的设计中,这种方案就不再具有优势,而几乎当前所有的SoC设计都需要支持多格式音频编解码。其次,如果编解码算法进行了升级或者出现了bug,为了修复问题,整个SOC芯片就必须重新流片,而不可能通过软件升级来修正错误。此外,实现新的编解码算法时,必须要设计新的硬件模块,将它集成到系统设计中,并重新流片。
图1:在使用专用编解码硬件的方案中,每种编解码格式都需增加硬件模块来支持。
方案3,在通用DSP处理器上通过软件来实现音频编解码,系统中同时包括一颗用来作控制的主处理器(这里的通用DSP处理器是指没有专门针对音频处理做过优化的DSP处理器)。采用DSP处理器的方案有很多优点。首先,DSP处理器中都有硬件乘法器,可以极大提高音频编解码程序的执行效率。其次,因为采用软件方式实现,只增加少量的存储器开销就可以支持多格式音频编解码。实现新的编解码算法也仅仅需要编写新的软件,不必重新流片,从而延长产品的生命周期。
采用DSP的方案也有缺点。大多数DSP的C编译器效率都比较低,所以一般不用DSP来做控制。系统的控制需要通用处理器来完成。而且,16或32位的DSP处理器对音频处理来说并不是最理想的。虽然当前大多数编解码算法采用16位采样,但在运算的中间过程中为了避免舍入错误,需要留有一定余量。所以16位DSP处理器在实现复杂音频算法时会带来问题。使用双精度整数计算可以避免问题,但效率又不够高导致需要更高的处理器主频。反过来,32位DSP处理器又不能被充分利用。实际上,对于音频算法而言,24位DSP处理器是最适合的。
音频专用RISC处理器
基于上述考虑,我们提出了第4种方案,即采用音频专用处理器。基于通用处理器进行音频处理的扩展,使处理器在高效执行音频编解码程序的同时,保持C编译器的效率。图2所示就是一个采用音频专用处理器进行编解码的系统。
图2:采用音频专用处理器进行编解码的系统。
这种设计方案有很多优点。首先,音频专用扩展使处理器更加高效的执行音频算法,在较低的主频下提供算法所需的性能,从而显著降低系统功耗。与基于DSP的方案一样,此方案便于实现多格式的音频编解码,也可以通过升级软件来支持新的编解码算法。它的不足之处在于大家对于音频专用处理器的概念还很陌生,下面我们就来介绍一下音频专用处理器。
Tensilica Hi-Fi2音频处理引擎是基于32位Tensilica Xtensa RISC处理器经过配置和扩展得到的,它可以非常高效的完成音频处理任务。顾名思义,Hi-Fi2音频处理引擎是Tensilica第二代音频处理器。Hi-Fi2音频处理引擎中最关键的扩展就是增加了两个24位的硬件乘法器,它们可以大大提高音频计算的速度。
然而,乘法器本身并不会减少执行音频算法需要的周期数,周期数减少是因为Hi-Fi2音频处理引擎每个周期可以执行1到2条指令。48位或56位宽的寄存器可以存放2个24位的采样值。利用这些寄存器文件可以高效的处理立体声音频数据。Tensilica总共在Xtensa RISC处理器上添加了300条音频专用指令,创建了一个灵活高效的音频算法处理引擎。
一套优秀的音频SOC解决方案不仅限于高性能的硬件,还需要有编解码软件,而由于时间的原因,你可能并不打算自己编写程序。虽然从互联网上可以找到一些音频处理程序,但是这些程序并没有经过优化,执行起来效率不高。其次,像Dolby音频编解码这样需要授权的程序是很难在互联网上找到的。目前流行的音频编解码算法都已经移植到了Tensilica的Hi-Fi2音频处理引擎上,而且支持的格式还在不断增加,如图3所示,所有这些编解码程序都是用C语言编写的。处理器的RISC基本指令和音频扩展指令都允许程序员继续用C语言来编程,在保证性能的前提下,提高了软件的可维护性。
图3:目前流行的音频编解码算法都已经移植到了Tensilica的Hi-Fi2音频处理引擎上。
Hi-Fi2音频处理引擎是采用Tensilica可配置技术,针对Xtensa LX2处理器的一套扩展指令。Tensilica利用这些扩展指令,配置出了Diamond 330Hi-Fi音频处理器,因此在330Hi-Fi处理器上可以运行所有基于Hi-Fi2音频处理引擎的编解码程序。Tensilica的Hi-Fi音频处理引擎应用于多项产品,在不同的工艺下得到了验证,出货量已经达到千万。当前的最主要的应用还在移动电话领域,今后产品的应用将会扩展到视频产品,消费类广播,超便携PC等领域。