0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深度解读ARM平台的MP3软解码算法研究与实现

电子工程师 来源:《电子设计工程》 作者:王飞飞 , 别,志远 2021-05-05 04:40 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

摘要:为了减少功耗与降低成本,根据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所示。

pIYBAGB5Wx6AeLy0AACyNxNThdc086.png

2 ARM处理器以及其程序设计优化

为了在ARM处理器下快速稳定的运行解码器,除了浮点转化为定点的策略,还要根据硬件特点进一步进行程序优化:首先减小运算强度,利用位移操作代替乘除运算,通常需要乘除以2的幂次方都可以用左右移n位来完成,比如3×8等价于33;利用乘法代替乘方运算,ARM核中内建有乘法器,因此可以通过乘法运算来代替调用C库函数乘方运算以节约函数调用开销;

利用与运算代替求余运算。通常and指令比%操作效率要高;使用内联函数,ARM下支持C语言inline关键字,这时的函数直接在调用处代码展开,省去了函数调用开销,不过它的缺点是代码量增加;使用寄存器变量,CPU对寄存器的存取要比对内存的存取快得多,因此为变量分配一个寄存器,将有助于代码的优化和运行效率的提高。

避免除法,ARM指令集中没有除法指令,其除法是通过调用C库函数实现,一个32位的除法通常需要20~140个时钟周期。因此,除法是程序效率的瓶颈,应尽量避免使用。用查表法代替计算,在CPU资源紧张而内存资源富裕的情况下,可以用空间来换取运行速度,例如在反离散余弦变换算法中需要频繁的计算正弦和余弦函数值,可以预先将函数值计算出来以常量放到内存里,需要计算时直接通过内存地址提取需要的值。

3 解码器结构设计与实现

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

o4YBAGB5WyiAEOa1AABtNwB-_u0313.png

3.1 解码器引擎初始化

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

数据流缓存提供的功能有以下几点:

初始化:该功能申请堆中的一块内存,用于以后存放缓存数据。

注销:负责释放初始化时申请的内存。

写入数据:向缓存的当前写入位置后写入指定大小的数据。

跳过指定大小数据:将当前读取位置移动到指定位置。

获取错误信息:返回操作过程中产生的错误信息。

帧同步:将读取位置跳转到下一帧开始位置。该操作的主要算法是每次读取缓存11个比特,若这些比特全为1,则把其当做下一帧的开始位置。通过研究可知,该种算法并不能准确判断下一帧的开始,但这种算法不进行帧头解码,也不会漏掉数据。从时间和空间上讲,都是一种比较好的选择。

解码引擎以帧为解码单位,每次输出一帧的解码输出结构,结构中包括pcm数据、长度、采样率、声道数,播放时间等信息。

o4YBAGB5WzaAIs7mAAB1lE8JGDc196.png

3.3 帧解码模块

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

o4YBAGB5W1iAGWzEAADrifEXR24342.png

从系统设计的角度上,该模块又可以划分为几个小模块:浮点计算模块、帧预处理模块、霍夫曼解码模块、层解码模块、滤波合成模块。

3.4 注销解码器引擎

该模块负责释放解码器申请的内存,删除解码器内建的播放索引,复位缓冲区。在解码完成后调用。

3.5 解码器外部调用接口

解码器提供了简洁而功能强大的调用接口,主要包括初始化、注销、单帧解码、IO控制、解码时间控制几个方面,具体如表1所示。

o4YBAGB5W3mAAuEyAAFKCy1IHmA424.png

4 结束语

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

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • dsp
    dsp
    +关注

    关注

    561

    文章

    8275

    浏览量

    368227
  • ARM芯片
    +关注

    关注

    1

    文章

    128

    浏览量

    22824
  • ARM嵌入式系统

    关注

    1

    文章

    14

    浏览量

    11665
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    探秘SCF5249集成ColdFire®微处理器:性能与应用的深度剖析

    MP3音乐播放器,尤其是便携式MP3 CD播放器,作为系统控制器/解码器。它采用32位ColdFire核心,配备增强型乘法累加(EMAC)单元,为MP3
    的头像 发表于 04-10 13:40 122次阅读

    AT8xC51SND1C:集成MP3解码与丰富外设的单芯片解决方案

    AT8xC51SND1C:集成MP3解码与丰富外设的单芯片解决方案 在电子设计领域,一款功能强大且集成度高的芯片往往能为产品开发带来诸多便利。AT8xC51SND1C就是这样一款值得关注的单芯片闪存
    的头像 发表于 04-06 09:05 256次阅读

    芯知识|MP3语音芯片如何成为现代智能设备的“声音心脏”?

    在智能化浪潮席卷全球的今天,从智能家居的温声细语到车载导航的清晰指引,背后都离不开一个核心元器件的驱动——MP3语音芯片。这种高度集成的MP3音频解码芯片,凭借其卓越的性能,已成为现代电子产品
    的头像 发表于 01-05 08:50 330次阅读
    芯知识|<b class='flag-5'>MP3</b>语音芯片如何成为现代智能设备的“声音心脏”?

    多封装长录音:WT2003H系列MP3录音芯片满足全场景音频需求

    系列MP3录音芯片在8K采样率下支持最长达70秒的连续录音,这一时长指标在同类产品中表现优异。通过优化的存储架构和高效的压缩算法,芯片在保证语音清晰度的同时,实现
    的头像 发表于 10-16 09:12 1088次阅读
    多封装长录音:WT2003H系列<b class='flag-5'>MP3</b>录音芯片满足全场景音频需求

    广州唯创WT2003H录音芯片-高精度ADC/DAC+64mA驱动MP3音频芯片

    一、产品概述:WT2003H系列MP3录音芯片的技术优势1.1芯片定位与市场价值广州唯创电子作为国内领先的语音IC厂家,推出的WT2003H系列MP3音频芯片集高精度信号处理和强大驱动能力于一体。该
    的头像 发表于 10-16 09:03 694次阅读
    广州唯创WT2003H录音芯片-高精度ADC/DAC+64mA驱动<b class='flag-5'>MP3</b>音频芯片

    广州唯创电子WT2003Hx高品质MP3语音芯片:重塑智能设备音频体验

    32位处理器与工业级品质的完美结合,为智能设备注入卓越音频性能在智能化浪潮席卷各行各业的今天,音频体验已成为衡量智能设备品质的重要标准。广州唯创电子推出的高品质MP3音频解码语音芯片WT2003Hx
    的头像 发表于 09-29 09:27 732次阅读
    广州唯创电子WT2003Hx高品质<b class='flag-5'>MP3</b>语音芯片:重塑智能设备音频体验

    新品|Unit AudioPlayer,支持 MP3/WAV 播放的音频播放单元

    UnitAudioPlayer是一款自带MP3解码功能的音频播放单元,内置高性能音频解码芯片N9301,自带microSD卡座。该产品采用UART通信接口,用户可通过配置指令实现音频播
    的头像 发表于 06-20 15:59 1052次阅读
    新品|Unit AudioPlayer,支持 <b class='flag-5'>MP3</b>/WAV 播放的音频播放单元

    芯知识|广州唯创电子WT2003HX系列MP3语音芯片声道特性解析与应用指南

    集成度:单芯片集成MP3解码、存储控制、功放驱动低功耗设计:D类功放效率>85%,适配电池供电设备简化电路:省去外置功放电路,降低BOM成本注:单声道输出对智能家居提
    的头像 发表于 06-17 09:41 1074次阅读
    芯知识|广州唯创电子WT2003HX系列<b class='flag-5'>MP3</b>语音芯片声道特性解析与应用指南

    请问k230如何读取sd卡并播放其中的mp3音频,他有库支持吗?

    k230如何读取sd卡并播放其中的mp3音频,他有库支持吗?
    发表于 06-04 06:24

    MX6200语音芯片使用手册V1.4

    MX6200语音芯片是一款高性能的MP3解码芯片。该芯片支持外挂TF卡和SD卡方案(支持SPI-Flash+U盘),最大支持32GB的存储容量。MX6200-16S解码芯片采用了先进的数字信号处理技术,能够
    发表于 05-30 14:49 1次下载

    ARM Mali GPU 深度解读

    ARM Mali GPU 深度解读 ARM Mali 是 Arm 公司面向移动设备、嵌入式系统和基础设施市场设计的图形处理器(GPU)IP
    的头像 发表于 05-29 10:12 4916次阅读

    Arm 公司面向 PC 市场的 ​Arm Niva​ 深度解读

    面向 PC 市场的 ​ Arm Niva ​ 深度解读Arm Niva ​ 是 Arm 公司为 PC 市场推出的核心计算
    的头像 发表于 05-29 09:56 1870次阅读

    Arm 公司面向移动端市场的 ​Arm Lumex​ 深度解读

    面向移动端市场的 ​ Arm Lumex ​ 深度解读Arm Lumex ​ 是 Arm 公司面向移动设备市场推出的新一代计算
    的头像 发表于 05-29 09:54 4562次阅读

    Arm 公司面向汽车市场的 ​Arm Zena​ 深度解读

    面向汽车市场的 ​ Arm Zena ​ 深度解读 Arm Zena 是 Arm 公司面向智能汽车领域推出的核心计算
    的头像 发表于 05-29 09:51 2692次阅读

    芯资讯|广州唯创电子MP3语音芯片IC的音频解码方式解析

    音频解码是语音芯片的核心功能之一,决定了音质表现和应用场景的适配性。广州唯创电子作为国内领先的语音芯片厂商,其MP3语音芯片系列(如WT2003H)以灵活的解码能力和高兼容性著称。本文将从音频格式
    的头像 发表于 05-28 08:48 1011次阅读
    芯资讯|广州唯创电子<b class='flag-5'>MP3</b>语音芯片IC的音频<b class='flag-5'>解码</b>方式解析