基于定点DSP的MP3实时解码器的设计与实现
扫描二维码
随时随地手机看文章
关键词:DSP MP3解码器 嵌入式C语言 汇编语言
1 FD216 16位定点DSP特点简介
DSP(数字信号处理器)是一种特别适合于进行数字信号处理的微处理器,主要用于实时快速地实现各种数字信号处理算法。FD216是一个高效能而且易于使用的16位定点DSP,包含DSP内核、芯片内建数据存储器、程序内存、两个串行接口、一个定时器、12组可编程I/O、内部直接内存存取(IDMA)接口、外部内存接口和串行式在线仿真器(SICE)接口等,兼容ADSP-218X系列汇编代码,最高运行速度可达到190MIPS。FD216的CM(Code Memory)、PM(Program Memory)和DM(Data Memory)是严格区分的,在程序设计时要将放在PM区和DM区的数据分别说明。在移植ADSP2181汇编代码时,也要做相应修改。
2 MP3及其解码原理
MPEG-1 Audio Layer 3(MP3)是一个在低比特率下提供高保真音频的压缩标准。特别是在解码部分,它已经成功地应用于多种消费类电子产品中。
MP3解码原理:首选将MP3数据帧解包,解出帧头信息和边带信息;然后采用霍夫曼解码解出比特分配信息;接着在逆变换中利用频谱系数,在综合滤波器中将32位子带合并成一个宽带信号。18个频谱值执行32位IMDCT(逆改进型离散余弦变换),将生成的576个频谱值变换成长度为32的18个连续的频谱。通过18次运算,多相位综合滤波器将这些频谱转换到时域,完成波形重构,生成立体声PCM音频数据。MP3解码流程图如图1所示。
3 开发环境
目标系统为智原科技公司提供的FD216 DSP评估板,系统环境为WIN2K,软件环境为FD2XX工具包(DSP C compiler,assembler,linker,debugger)。
图2为FD216开发系统结构框图。
4 MP3解码器系统设计
4.1 设计要求
设计要求包括以下内容:
(1) 功能要求:以智原科技公司提供的FD216 DSP评估板作为目标系统,进行MP3解码器设计,标系统能实时解码采样频率为32kHz/44.1kHz/48kHz、数据码率从32到320kbps的MP3比特流。
(2) 解码精度要求:定点MP3解码精度应符合ISO/IEC 11172-4所规定的限制精度。
4. 2 硬件设计
硬件设计包括以下内容:
(1) 在FD216评估板上进行正确的硬件配置。
(2) 串口0配置。FD216评估板所采用的Audio Codec是Philips公司的UDA1345TS,它与FD216的串口0相连,输出16位或8位PCM线性数据。
(3) 串行ICE(SICE)仿真调试接口。
图2
4. 3 软件设计
软件设计包括以下内容:
(1) C运行时间库。C语言运行时间库(C Run Time Library)是整个C开发工具的核心之一,提供了大量的可以直接调用的库函数。
(2) 设置内存映射寄存器访问方式。
5 MP3解码器程序设计
MP3解码器程序设计包括以下内容:
(1) 定点算法设计。尽管定点DSP也支持浮点运算,但浮点运算会消耗大量的指令周期和内存,也会降低系统运行速度,不能应用于MP3实时解码。在程序设计中,首先要将MP3浮点C解码算法转换为定点C解码算法。浮点算法转换成定点算法实现过程比较复杂,本文不再多述。
(2) 在程序的头部建立正确的运行头(RunTImeHeader)文件。
(3) 内存分页/重叠。与ADSP-218X类似,FD216也是通过设置重叠存储器选择寄存器(PMOVLAY/DMOVLAY)来实现PM(CM)/DM存储器分页/重叠的。
图3
FD216的内存结构图如图3所示。
FD216系统说明文件FD216.SYS说明了FD216 DSP的内存分配方式,是支持DSP程序正确运行的系统文件。
数据、代码分布/重叠应首先在HOST(PC)上对数据、代码分别进行内存分页,接着使用FD2XX开发工具包进行编译、汇编、链接,生成目标代码,然后下载到目标板上运行。
(4)中断服务子程序。FD216中断控制器允许处理器响应十二个中断之一。在MP3解码应用中使用了如下三个中断服务子程序:
①eset中断服务子程序:程序运行时,首先进入reset中断服务子程序,即从start程序开始运行,其优先级量高。
Jump start; rti;rti;rti; /*Reset */
②ir2_get_data外部中断服务子程序:通过IDMA接口经过PCI总线从HOST(PC)硬盘读取数据的控制程序。
③intsp0中断服务子程序:向串口0发送数据的子程序。为了实现MP3文件在系统中的实时播放,设计了双Buffer通过串口0向Audio Codec传送解码后的声音样本数据。Intsp0中断服务子程序流程图如图4所示。
(5)代码移植:将MP3解码算法C程序序植为可在FD216 DSP系统中运行的嵌入式C程序。在此需要注意以下几点:
①由于DSP系统中没有文件I/O函数,应将C程序中的文件I/O函数方式改成嵌入式系统中的内存直接读、写方式。
②应注意数据类型的处理:将C程序中的int类型改成short或long类型,将unsigned int类型改成unsigned short或unsigned long类型,并且为了提高程序运行效率,应注意尽量少用(unsigned)long型,算法验证无误后再移植到DSP中。
③在保证程序正确性、稳定性的前提下,应通过修改C算法和数据结构,尽量缩减C程序中表数据的尺寸,使表在DSP内存中占据的空间尽量小。
screen.width-500)this.style.width=screen.width-500;" border=0>
6 MP3解码器实验结论
6.1 算法复杂度(COmplexity)评测
通过仿真调试工具debugger对MP3解码器在一定条件下进行性能评估(Profile),并计算出系统所需要的MIPS(Million Instruction Per Second)。
MP3解码算法复杂度为60.01MIPS,只占了系统最大运行能力(190MIPS)的31.58%。
6.2 实验结果
实验结论:系统功能、解码速度、精度均符合设计要求,并且实现了实时解码、回放。
本文简要介绍了MP3解码原理,并详细说明了MP3在FD216定点DSP上实现实时解码的设计、开发流程。在此基础上亦可开发、实现其它格式的压缩编码数字音频解码器,如Dolby AC-3[5]、MPEG-1 Advanced Audio Coding(AAC)、Microsoft (r ) Windows Media(tm) tudio(WMA)等。利用DSP可编程特性。可以开发出多格式音频解码器,而不需要增加其它硬件。