您可以添加到网摘 让更多人关注此文章:
为了使用单片DSP实现MPEG音频实时解码,本文对MPEG音频解码算法的运算量和存储量要求进行了分析,并根据编码质量和处理器速度的要求结合计算机仿真结果,介绍了充分利用ADSP2181为音频处理优化的硬件结构,对MPEG解码算法及DSP设计优化的方法。
MPEG音频解码过程是通过I/O口获得MPEG音频码流数据,依照MPEG标准进行解码,并以PCM码流格式存放在数据空间的缓冲单元中,供直接存储器存取(DMA)方式使用。MPEG音频解码的主程序流程如下:开始-->输入比特流查找标题-->侧信息解码-->比例因子解码-->哈夫曼数据解码-->反量化采样-->频谱重排序-->减小混叠-->通过IMDCT综合并重叠-->通过多相滤波器组综合-->输出PCM样点-->结束。
可以看出对输入码流进行解码先要经过帧同步,读入同步头的信息,得到该MPEG音频码流的采样频率、码流速率等参数,并且记录所解码的MPEG码流的帧数,接着获取侧信息。从侧信息中根据同步头中所得的MPEG码流的压缩类型来读取信息,获得对应于各自颗粒中各自通道的相关参数。然后,对一帧中的两个颗粒进行解码,首先从码流中获取每个颗粒所对应的比例因子,并对每个颗粒下的数据进行霍夫曼解码,这个霍夫曼解码过程需要34个霍夫曼码表之一进行解码,可以从侧信息中含有的每个颗粒选择码表的信息来进行选择。
经过霍夫曼解码的数据接下来要经过反量化采样。在这一步中,各个子带的数据根据所使用窗的类型,利用在侧信息中获得参数反量化。然后是立体声处理模块,这个模块根据MP3码流所采用的压缩类型进行相应的处理。如果MPEG音频码流是立体声或双声道压缩的,那么就要对每一个通道的音频数据进行如下处理:
重新排序处理:根据窗变换标记和所使用窗的类型所决定长窗、短窗和混和窗三种方式进行数据的重新排列;
抗锯齿处理:这一步中使用抗锯齿蝶型对每个子带中的数据进行处理;
IMDCT:对每通道中的32个子带的数据根据所使用窗的不同进行变换,在这一步中需要两组144点的表用以存储窗类型数据和正弦数据;
多相频率倒置:对于经过IMDCT的子带数据按照在偶数号子带中偶数号数据符号取反的原则进行处理,然后将所得数据输入到子带合成滤波器的输入缓冲中;
子带合成:这一步需要4.5KB的缓冲用来存储同步滤波器参数和同步窗数据。
这样,当处理完一个颗粒中所有通道的数据后,就可以将这一颗粒已解码好的数据输出到输出缓冲区中。当将下一颗粒的数据解码并输出后,这样一帧数据解码完成,这帧数据就可以输入到D/A部分进行播放,并将输出缓冲清空,等待下一帧的解码数据输入。解码程序直到码流中再也找不到一帧的同步头时,就完成这一音频流的解码。
MPEG音频解码系统设计
MPEG音频解码器的解码算法完全由DSP芯片实现,其控制部分用CPLD实现。电路的整体设计与开发需要综合考虑前面两部分程序算法接口内容,可以在进行详细程序设计的基础上进行。这样,可以把MPEG音频解码器的开发工作分为两大模块:MPEG音频解码程序DSP实现,即软件设计,以及CPLD控制程序开发和电路板设计部分,即硬件设计。各个模块的开发工作针对该开发模块的特点进行。MPEG音频解码系统开发从模块上可以划分为硬件开发和软件开发两个部分。软件主要实现MPEG音频解码算法,硬件实现存储器访问控制、MPEG音频文件播放控制以及电源供给等功能。系统总体的功能结构如图1所示。
[1] [2] 下一页
|