摘要:文中以TI公司的C5000系列通用型DSP芯片TMS320VC5509为核心,完成音频解码系统硬件平台的设计与实现,并研究MP3的解码算法以及其在该硬件平台上的实现。整个系统的硬件平台包括DSP核心模块、FLASH存储器、音频CODEC,电源等模块。该系统通过USB接口与计算机通信,下载MP3格式的数据流,并将其存储在Flash中,然后由DSP读取FLash中的MP3数据流,完成解码工作,并通过CODEC播放。同时可以对DSP进行其他解码算法的软件编程,实现多种数据流格式的音频编、解码,具有很强的软件升级灵活性,还解决了低功耗的问题。
MPEG(活动图像专家小组)是ISO/IEC组织的一个工作小组,负责制订有关活动图像、音频及其组合的压缩和解压缩处理等方面的技术标准。MPEG-1 Layer3(即MP3)是MPEG-1国际音频标准(ISO/IEC 11172)中的第三层编、解码算法,它具有压缩比高、声音还原质量好、算法复杂度适中等优点,采用这种标准制作的MP3格式的音乐在数字音频的存储、互联网上的多媒体音频传输等领域得到了广泛应用。
目前基于专用芯片的音频编解码方案软件升级灵活性不高,基于DSP的音频编解码方案又多基于C54x平台,而解决低功耗的技术方法是值得研究的问题。
基于上述背景,文中提出了基于DSP的音频解码系统的研究与实现这一解决方案。本课题的主要目的是:以TI公司的C5000系列通用型DSP芯片TMS320VC5509为核心,完成系统硬件平台的设计以及MP3的解码算法在该硬件平台上的实现。整个系统的硬件平台包括DSP核心模块、FLA SH存储器、音频CODEC,电源等模块。该系统通过USB接口与计算机通信,下载MP3格式的数据流,并将其存储在Flash中,然后由DSP读取Flash中的MP3数据流,完成解码工作,并通过CODEC播放。同时可以对DSP进行其他解码算法的软件编程,实现多种数据流格式的音频解码,具有很强的软件升级灵活性,还解决了低功耗的问题。
1 硬件平台的总体设计
目前业界对MP3解码系统的解决办法有两个方案:一是使用将解码算法固化到集成电路中去的专用芯片,这些芯片将一些片外资源集成到芯片内部,可以简化MP3解码系统实现所需的片外电路,便于整个系统的开发,但由于其算法固化到芯片内部,不能通过软件升级,而且此类芯片普遍价格偏高。另外一个方案,就是使用通用的DSP来实现MP3解码系统,这种解决方案对设计人员的软硬件技能提出了很高的要求,不过其有很好的升级特性,而且可以更方便的改进和优化解码算法,从而得到更好的音质回放效果,并且和第一种解决方案一样,其功耗比较低。
综合各方面的优劣条件,我们选择了第二种解决方案,即基于通用DSP芯片来实现整个解码系统的硬件平台。其硬件系统实现框图如图1所示。
这个框图大致的画出了解码系统的基本组成部分。在图中,我们采用了512 k的串行EEPROM芯片用于实现bootloader,用CF卡存储MP3音乐及解码程序。核心的处理器采用了TI公司的TMS320VC5509 DSP芯片,考虑到其内部的RAM容量有256 kB,而我们的程序大小为80 kB,因此我们在此设计中没有外扩RAM。
整个硬件平台的工作流程如下:首先通过USB接口,从PC机中复制MP3音乐,拷贝在大容量CF卡中。然后DSP读取CF卡的MP3数据进行解码,还原出PCM信号,再通过DSP的多通道带缓冲串口(McBSP)传送给音频CODEC芯片,最终播放出MP3音乐。
1.1 硬件平台的具体实现
1.1.1 核心DSP芯片介绍
本方案采用的TMS320C55x系列是TI公司推出的继C5000系列C5x、C54x后的新型产品。它采用了增强型的哈佛结构,具有专门的硬件乘法器,使用流水线操作,提供特殊的DSP指令,可用来快速地实现各种数字信号处理算法。为方便实际中的应用,C55X系列DSP具有各自不同的硬件结构,如在片存储器和片上外设等,可根据性价比和不同的应用场合灵活选用。由于采用了高度并行硬件结构、模块化设计,使得C55X系列DSP具有功耗低、速度快等优点。主要用在音频压缩、无线通讯等领域。
与5000系列其他芯片相比,TMS320VC5509以其独有高性能低功耗和低价格特性,使得一推出就受到业内用户的欢迎。
1.1.2 与计算机的接口设计
与计算机的接口设计使用的是当今十分流行的USB接口,实现从计算机下载数据,5509自带的USB接口完全符合USB2.0全速接口标准,可与任何外部微控制器实现高速并行接口(12M比特/秒)。
1.1.3 存储器设计
CF卡被用来存储音乐和数据文件,它通过DSP的外部存储器接口(EMIF)与DSP相连,它丁作在True—IDE模式和3.3 V的电压下。我们可以根据系统需要选择任意容量的CF卡。选用Microchip Tethnology公司的64 kB的EEPROM 24LC512存放的是启动程序,每当上电时,即将CF卡中的程序调入内存运行。
24LC512与DSP的接口采用I2C总线通信。I2C(Inter—Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据。存CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100 kbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如音量等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。其时序图如图4所示。
1.1.4 音频解码接口设计
音频CODEC芯片采用的是TI公司的TLV320AIC23。它的主要作用是将DSP解码后的PCM音频流通过D/A变换,转换成模拟声音信号进行播放。
TLV320AIC23 DSP Codec是德州仪器公司2001年推出的高性能单片立体声编码解码器,数据转换字长16/20/24/32可选,工作电压与TMS320C55xDSP的核心和I/O电乐兼容,可实现与C55x DSP串行口的无缝连接,功耗很低,带有的I2C和SPI总线兼容控制接口能使AIC23编码译码器与其他微处理器共同使用。
其主要特点如下:
1)高性能立体声编码解码器:支持8~96 kHz采样频率,90DB ADC,100DB DAC转换信噪比,1.42~3.6 V内核数字供电电压,2.7~3.6 V模拟供电电压均与C55x DSP兼容。
2)可编程多种串行口数据传输标准:支持I2C和SPI串口数据传输模式,均可以与C55x DSP的McBSP口兼容。
3)内置放大的立体声输入输出(增益可调节),耳机放大模块输出((30mW)。
4)低功耗电源管理:录音重放模式下19 mW,备用状态小于150 uW,停止状态小于15 uW。
音频CODEC与DSP的硬件接口电路如图5所示。
由上图我们可以看出,DSP VC5509与AIC23的接口可分成两部分:控制接口部分(MeBSP1)和音频数据接口部分(MeBSP0)。其中DSP的McBSP1口完成AIC23的控制部分功能,此控制口配置为常用的SPI接口模式;而McBSP0口完成音频数据的传输功能,此数据口配置为DSP格式。
AIC23的数字音频接口支持4种数据格式:Right—Justified;Left—Justified;I2S格式;DSP格式。控制接口的SPI模式时序以及数字音频接口的DSP模式时序分别如图6和图7所示。
1.1.5 电源模块设计
在电源模块中,我们选用了TI公司的三款芯片,分别是TPS61103,TPS60500,TPS73601。其中TPS61103用于将电池输入的1到3 V电压转换为固定的3.3 V,它为DSP的I/O及其他外设供电。TPS60500用于将3.3 V转换为DSP需要的内核电压1.6 V。此系统当通过USB接口与计算机相连时,就可以通过适当的跳线设置不用接电池,TPS73601用于将USB接口提供的5V电压转换为3.3V。
2 软件研究及算法实现
2.1 文件系统的实现
由于实现了FAT32文件系统,因此当此系统通过USB连接到PC机时,在Windows操作系统下将看到它作为一个独立的存储器出现,可是通过复制粘贴操作将音乐文件拷贝到CF卡上。
2.2 MP3解码算法的实现
本方案进行软件的开发平台是TI公司的C5000系列的集成开发环境Code Composer Studio 2.0。考虑到MP3解码软件的复杂度和可读性,整个解码软件采用DSP的C语言编写。DSP的C语言具有与标准ANSI C语言相同的语法特点,同时还和DSP硬件相结合,能够直接控制DSP的在片或外围设备资源。随着数字信号处理技术的不断发展,DSP的C语言编译器的编译效率也越来越高,5000系列的C语言编译器效率能达到
60%~70%,C6x系列的编译器效率高达80%。因此采用C语言来对DSP进行编程是必然的趋势。
本方案在LIBMAD的基础上对软件进行设计。MAD(LIBMAD)是一个开源的高精度MPEG音频解码库,支持MPEG-1(Laver I,Laver II和Laver III)。LIBMAD提供24-hit的PCM输出,完全是定点计算,非常适合在没有浮点支持的平台上使用。使用LIBMAD提供的一系列API,就可以非常简单地实现MP3数据解码工作。在LIBMAD的源代码文件目录下的mad.h文件中,可以看到绝大部分该库的数据结构和API等。
MP3解码算法虽然复杂,但是整个解码过程分成各个模块进行,各个模块之间相对比较独立。在整个解码软件的设计过程中,对各个模块采用子函数,各个模块之间的联系就表现为函数的参数传递。整个解码软件由一个主函数控制,调度各个模块的有序运行。
解码软件的程序流程如图9所示。从图中我们可以看到对输入音频流解码先经过帧同步,读入同步头的信息,得到该MP3码流的采样频率、码流速率等参数,并记录现在所解码的MP3码流的帧数。然后获得粒度信息、主信息及定标因子,根据同步头中所得的MP3码流的压缩类型来读取信息,获得对应于各自颗粒中的各自通道的相关参数。
然后对一帧中的两个颗粒进行解码,首先是从比特流中获取每个颗粒对应的定标因子,并对每个颗粒下的数据进行哈夫曼解码,这个哈夫曼解码过程需要32个哈夫曼码表之一来进行解码,可以根据边带信息中含有每个颗粒选择码表的信息来进行选择。经过哈夫曼解码的数据,接下来要经过反量化取样,在这步中,各个子带的数据根据所使用窗的类型,利用在边带信息中获得的参数反量化。接下来就是重排序和立体声处理模块,在这个模块中根据MP3码流所采用的压缩类型来进行相应的处理。
这样当处理完一个颗粒中所有通道的数据后,就可以把这一颗粒已解码好的数据输出到输出缓冲区中,当把下一颗粒的数据解码完毕并输出后,这样一帧数据就解码完成。这帧数据就可以输入到D/A部分进行播放,并将输出缓冲区清空,等待下一帧的解码数据的输入。解码程序一直到在比特流中再也找不到一帧的同步头时,就完成了这一音频流的解码。
3 结束语
MP3解码算法比较复杂,并且市面上大部分便携式MP3播放器都采用的是硬件解码器,也就是采用专门的音频解码芯片来实现的,然而随着数字信号处理技术的飞速发展,使得采用通用数字信号处理器(DSP)实现这一解码算法成为可能,而且存性价比、低功耗和软件升级灵活性上都优于采用硬件解码方案的mp3播放器,成为未来MP3市场的发展方向。