历史上的今天
返回首页

历史上的今天

今天是:2025年02月05日(星期三)

正在发生

2018年02月05日 | 基于ARM的嵌入式系统的MP3软解码器研究与实现

2018-02-05 来源:eefocus

    为了减少功耗与降低成本,根据ARM芯片对C语言良好支持的特点,在深度剖析MP3解码算法、分析C语言在ARM芯片上编程的优化方法的基础上,通过软件形式实现MP3音频解码器,便一些无硬件解码器支持的ARM嵌入式系统完成MP3解码任务,从而实现基于ARM的嵌入式系统的MP3软解码器,可以有效地降低系统功耗,提高解码效率,更好地扩展和增强便携嵌入式系统多媒体功能。

    随着便携式嵌入式系统的发展,嵌入式多媒体技术正在影响并改变着人们的日常生活,多媒体音频编码解码技术也越来越受到关注和重视。笔者提出了一种MP3音频解码通过软件方式在嵌入式系统上实现的解决方案。该方案以目前比较高效的MP3解码算法为基础,灵活的取代了基于DSP的硬件解码方案,在低消耗处理器资源的前提下,实现能与硬件解码相媲美的效果。从而节省了研发或购买DSP芯片的费用,还可以方便快捷的兼容MPEG新提出的解码标准,这是该方案最重要的现实意义。
    目前国外在MP3软解码方面的研究有两大成果,一个是开源MP3解码项目mpg123,一个是开源嵌入式MP3解码库libmad。这两个开源项目中使用的解码算法参考了很多国际学术论文。前者被广泛用于播放器软件,例如Mplaver,千千静听等;后者则更加适用于嵌入式系统,已经被成功移植到Symbian手机系统上。

1 MP3解码算法分析
    MP3解码主要包括以下过程:预处理(Preprocessing)、霍夫曼编码(HufFMan decoding)、反量化(Requantization)、重排列(Reorder ing)、立体声解码(Stereo decoding)、混迭消除(Alias reduction)、反离散余弦变换(IMDCT transform)、频域转换(Frequency invers ion)、子带合成滤波(Synthesis fiLTErbank),最后生成声卡可以直接读取的PCM采样。MP3解码流程具体如图1所示。

a.JPG

    

2 ARM处理器以及其程序设计优化
    为了在ARM处理器下快速稳定的运行解码器,除了浮点转化为定点的策略,还要根据硬件特点进一步进行程序优化:首先减小运算强度,利用位移操作代替乘除运算,通常需要乘除以2的幂次方都可以用左右移n位来完成,比如3×8等价于3<<3;利用乘法代替乘方运算,ARM核中内建有乘法器,因此可以通过乘法运算来代替调用C库函数乘方运算以节约函数调用开销;利用与运算代替求余运算。通常and指令比%操作效率要高;使用内联函数,ARM下支持C语言inline关键字,这时的函数直接在调用处代码展开,省去了函数调用开销,不过它的缺点是代码量增加;使用寄存器变量,CPU对寄存器的存取要比对内存的存取快得多,因此为变量分配一个寄存器,将有助于代码的优化和运行效率的提高。
    避免除法,ARM指令集中没有除法指令,其除法是通过调用C库函数实现,一个32位的除法通常需要20~140个时钟周期。因此,除法是程序效率的瓶颈,应尽量避免使用。用查表法代替计算,在CPU资源紧张而内存资源富裕的情况下,可以用空间来换取运行速度,例如在反离散余弦变换算法中需要频繁的计算正弦和余弦函数值,可以预先将函数值计算出来以常量放到内存里,需要计算时直接通过内存地址提取需要的值。

3 解码器结构设计与实现
    在对现有算法进行研究的基础上,笔者设计出一个性能优良、结构灵活、可移植性强的MP3软解码器。解码器主要包括以下模块:解码器引擎初始化,缓冲区输入输出控制,帧解码模块,注销解码器引擎等。

b.JPG


    3.1 解码器引擎初始化
    用MP3文件初始化解码器,初始化过程中,解码器读取每一帧的帧头信息而不对数据进行解码,快速计算出该文件的播放时间,并根据文件大小以秒或分钟为单位内建解码位置索引。解码位置索引的目的是为了快速的根据时间定位待解码数据在文件中的位置。

c.JPG

 

3.2 缓冲区输入输出控制
    考虑到嵌入式系统内存较小的情况,解码器输入缓冲区定义为8 kB,这样既可以流畅的解码数据,又不会暂用很大缓冲区内存,解码引擎以bit为单位读取数据,所以输入控制应该实现快速读取缓冲区中1个或多个bit数据的操作。
    对于文件形式的MP3数据,在解码器输入缓冲区上层内建一个文件缓冲结构,减少系统IO操作次数,首先将文件中一部分待解码数据读入文件缓冲,当解码引擎发出数据请求时,由文件缓存向解码器输入缓冲区写入数据。
d.JPG
    文件缓冲提供以下操作:
    文件缓冲创建:以打开的文件指针创建文件缓冲区,返回缓冲结构指针。
    缓冲区注销:释放缓冲区创建时的在堆中申请的内存,并关闭打开的文件指针。
    缓冲区结束判断:当缓冲区读取指针到达缓冲区结尾时,eof被复制为真,返回eof的值。
    获取缓冲区操作错误:每次操作中,若出现错误error被赋值为对应的错误值,否则赋值为0。返回error的值。
    读取指定大小的内容:从缓冲区当前读取位置,读取指定大小的字节,并返回读取到的数据开始位置指针。
    对于以流形式的MP3数据,当解码引擎发出数据请求时,直接由数据流缓存向解码器输入区写入数据。
e.JPG
    
    数据流缓存提供的功能有以下几点:
    初始化:该功能申请堆中的一块内存,用于以后存放缓存数据。
    注销:负责释放初始化时申请的内存。
    写入数据:向缓存的当前写入位置后写入指定大小的数据。
    跳过指定大小数据:将当前读取位置移动到指定位置。
    获取错误信息:返回操作过程中产生的错误信息。
    帧同步:将读取位置跳转到下一帧开始位置。该操作的主要算法是每次读取缓存11个比特,若这些比特全为1,则把其当做下一帧的开始位置。通过研究可知,该种算法并不能准确判断下一帧的开始,但这种算法不进行帧头解码,也不会漏掉数据。从时间和空间上讲,都是一种比较好的选择。
    解码引擎以帧为解码单位,每次输出一帧的解码输出结构,结构中包括PCM数据、长度、采样率、声道数,播放时间等信息。
   g.JPG


3.3 帧解码模块
    该模块为解码引擎核心模块,按照顺序完成预处理、霍夫曼编码、反量化、重排列、立体声解码、混迭消除、反离散余弦变换、频域转换、子带合成滤波,最后生成声卡可以直接读取的PCM采样。

h.JPG

    从系统设计的角度上,该模块又可以划分为几个小模块:浮点计算模块、帧预处理模块、霍夫曼解码模块、层解码模块、滤波合成模块。
3.4 注销解码器引擎
    该模块负责释放解码器申请的内存,删除解码器内建的播放索引,复位缓冲区。在解码完成后调用。
3.5 解码器外部调用接口
    解码器提供了简洁而功能强大的调用接口,主要包括初始化、注销、单帧解码、IO控制、解码时间控制几个方面,具体如表1所示。

i.JPG

    4 结束语
    本文根据MPEG官方文档,详细剖析了MP3帧解码的算法及其优化,并在上述基础上设计软件解码器接口,在ARM平台上实现了软件解码器。本解码器具有无浮点计算、引入文件缓存机制、内建解码位置索引等优点。但是也存在一定的局限性:如时间精度低,解码器没有实现网络功能,但是提供了流解码接口,如果需要播放网络上的MP3文件,需要在解码器的上层设计网络引擎。


推荐阅读

史海拾趣

DZUS公司的发展小趣事

随着公司实力的增强,DZUS公司开始拓展国际市场。通过参加国际展览、与海外客户建立合作关系等方式,公司逐渐打开了国际市场的大门。同时,公司还针对不同国家和地区的市场需求,推出了定制化的产品和服务。这些举措使DZUS公司的品牌知名度和市场份额不断提升。

Continental Industries公司的发展小趣事

在电子行业的发展过程中,Continental Industries注重与其他企业的合作与共赢。公司与多家知名企业建立了长期稳定的合作关系,共同开展技术研发和产品创新。通过资源共享和优势互补,双方实现了互利共赢,共同推动了电子行业的进步。

科山芯创(COSINE)公司的发展小趣事

科山芯创深知品质是企业的生命线。他们建立了严格的质量管理体系,从原材料采购到生产流程再到成品检测,每一个环节都严格把关。同时,他们还不断提升服务水平,为客户提供全方位的技术支持和解决方案。这些努力使得科山芯创在客户中赢得了良好的口碑和信任。

Elprotronic Inc.公司的发展小趣事

在电子行业中,客户服务质量直接关系到企业的声誉和市场竞争力。Elprotronic Inc.深知这一点,因此一直致力于优化客户服务体系。他们建立了专业的客户服务团队和客户服务热线电话等多种渠道来及时解答客户的咨询和问题。同时,公司还定期开展客户满意度调查活动收集客户反馈和建议以便及时改进和优化产品和服务。这些努力使得Elprotronic Inc.在客户服务方面赢得了良好的口碑和信誉也为公司的长期发展奠定了坚实的基础。

请注意,以上故事均为虚构内容,旨在展示Elprotronic Inc.公司可能的发展路径和故事。实际情况可能有所不同,具体细节请以公司官方发布的信息为准。

Block USA Inc.公司的发展小趣事

Block USA Inc.最初以其线下支付业务Square在电子支付领域崭露头角。公司创始人杰克·多尔西洞察到小型商户在支付处理方面的需求,并推出了简单易用的磁条卡读卡器Square Reader。这一创新产品迅速受到市场欢迎,帮助无数小型企业和个体经营者实现了便捷、安全的电子支付。随着Square品牌的知名度不断提升,Block逐渐在支付领域建立了坚实的地位。

Deutronic Elektronik GmbH公司的发展小趣事

随着技术的不断进步和市场的扩大,Deutronic Elektronik GmbH开始寻求技术突破和业务拓展。公司加大了研发投入,推出了一系列具有创新性的电源供应器、电子模块和测试检查系统。这些产品不仅满足了客户的多样化需求,还为公司带来了显著的经济效益。同时,公司也积极拓展海外市场,逐步建立了全球销售和服务网络。

问答坊 | AI 解惑

[求助] LM386 Pspice model

[请问哪位大侠知道去哪可以下到LM386 Pspice model,不胜感谢!…

查看全部问答>

2010年新兴视频监控技术指南(序列二)

IP摄像机(标清)潜在优势     使用IP摄像机最突出的优势在于它可以直接把摄像机连接到IP网络或计算机网络上,而在模拟摄像机系统中则需要另外再增加一个计算机(通常是编码器或者DVR),因此,在某些情况下,使用IP网络能很大程度上减 ...…

查看全部问答>

VC中的三种CString转数值的方法在eVC中全部失效

void CStyCString2ValueDlg::OnButton1() {         char *s=\"123\", *stops;         int i;         //这三种方法无论在VC还是eVC均正常         i=strtol( ...…

查看全部问答>

AXD调试器的教程

有谁用ADS1.2的吗?谁有AXD的教程,推荐下,谢谢…

查看全部问答>

最近很郁闷……

我是一个比较最求效率的人,最近帮一个朋友做了一个高速放大电路,让我很郁闷!板子弄好了,但是测试时却出现了非常诡异的事情,由于缺乏测试工具(示波器)使得我的工作停滞了很多天,再加上朋友的催,让我很不安心!考试快来了,时间不多了,但是 ...…

查看全部问答>

享受32位的乐趣---EJ-STM32体验板,请各路大侠拍砖!

人人都能有机会享受32位的乐趣了!   重庆优易特电子公司最新推出的EJ-STM32,是一款基于意法半导体(ST)STM32系列高性能32位处理器(Cortex-M3内核)的DEMO板。该板采用底板与核心板组合的工作方式,只需通过换插不同的CPU核心 ...…

查看全部问答>

24系列的DSP指令中,RPT指令的问题.

RPT # N指令可以使其后面的指令执行很多次,但那些指令可以和RPT指令配合产生N次有效的操作呢?…

查看全部问答>

用锂电池,430的vcc脚还需要接电容来滤波吗?

看到很多原理图上,430单片机电源脚接104电容来滤波。但是,如果采用3.6伏锂电电池供电,那么电源引脚还用得着接电容来滤波吗?…

查看全部问答>

用于 LED 照明应用的恒流非隔离式电源

$(\'swf_K8k\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/XMjcyNjgxNDUy/v.sw ...…

查看全部问答>

外型更加犀利 ABT发布了奥迪Q3改装套件

日前,德国改装公司Abt Sportsline发布了奥迪Q3改装套件。 外观套件包括前格栅,前扰流板,车门饰条,集成了排气系统的后保险杠和尾翼。 动力方面,Abt将提供汽油发动机不同程度的升级,针对2.0 TSI发动机,经过提升后从原来的21 ...…

查看全部问答>