近年来,便携式音乐播放器大放异彩,备受人们喜爱。其中的原因有很多,例如海量的压缩音乐内容,数据存储成本不断下降、操作简便和轻松访问不同流行元素的在线音乐内容。消费者对下一代音乐播放器日益挑剔,期盼更长的音频播放时间、更丰富的聆听体验。
由此诞生了Cortex-M系列,这是新一代ARM低成本微处理器,采用低功耗设计。Cortex-M3内核和最近发布的Cortex-M4内核基于哈佛架构的3级流水线并采用Thumb-2指令集架构(ISA),内存要求更低。但这些MCU能否胜任音频处理任务?它们能否打造更出色的倾听体验,满足人们的期望?
为了分析这些处理器是否适合处理音频,首先我们以MP3解码器和均衡器为例,大致了解一下音频解码器和后处理等音频部件中常用音频处理模块实施方案,然后按照高效实现这些模块对处理器指令集架构的要求,对模块加以分类。
我们重点从指令集角度来探讨Cortex-M3和Cortex-M4内核在音频处理方面的优势。为此,我们先讨论不同音频部件的一些模块代码示例,随后分析这些处理器在循环和指令方面的独到优势,最后,将展示流行音频编解码器和音频后处理部件的典型性能指标以佐证这些处理器内核的音频能力。
音频处理模块的功能块
为了分析音频处理器要求,现先从音频处理模块所涉及的功能块,即音频编解码器和音频后处理部件谈起。本节框图中的模块用颜色标为3种不同类别。绿色表示乘加(MAC)密集模块、红色表示MAC和控制代码混合模块、蓝色表示控制代码模块。
音频编解码器
互联网提供了大量压缩音频数据,必然要求音乐播放器支持多种流行的音频解码器。音频编码器的处理功能涉及一系列功能块,我们接下来回顾一下。
图1:典型音频编码器框图。
音频编码器:音频编解码器的用途是实现音频数据压缩,同时在给定比特率的限制下努力获得保真音质。典型编码器如图1所示。一般来说,音频编码器采用如下三步完成压缩:首先,通过数据滤波调节音频数据。然后,通过窗口化和重叠对音频数据进行帧化,等待进一步处理;接着,将此数据变换至频域,消除时域内的冗余。使用心理声学原理,对可能引入的、听不见的量化噪声数量进行计算;最后,对此数据进行量化并通过熵编码实现进一步无损压缩。此编码数据经紧密打包成为位流。尽管所实现的压缩有些损耗,但听觉难以分辨细微差别。
音频解码器:将上述关于音频编码器的过程反向,即是音频解码器从位流中还原音频数据的原理。这里以MP3解码器为例进行讨论,高层模块分解如图2所示。框图以MP3文件格式的压缩音频作为输入并输出PCM格式的非压缩音频。
这些模块以功能命名,并代表各自执行的操作
图2:MP3解码器框图。
“Bit Stream Demux”模块解析MP3位流
“Entropy&Inv Q”模块执行霍夫曼解码和反向量化
“IMDCT”模块对此数据进行反向修改离散余弦变换
“Overlap and Add”模块执行窗口化、重叠和加法运算
“Synthesis FiLTEr Bank”从滤波器组域数据中重构时域样本