ARM Cortex-M的音频性能解析

发布者:李国永最新更新时间:2012-09-03 来源: 21ic 关键字:ARM  Cortex-M  音频性能 手机看文章 扫描二维码
随时随地手机看文章

  近年来,便携式音乐播放器大放异彩,备受人们喜爱。其中的原因有很多,例如海量的压缩音乐内容,数据存储成本不断下降、操作简便和轻松访问不同流行元素的在线音乐内容。消费者对下一代音乐播放器日益挑剔,期盼更长的音频播放时间、更丰富的聆听体验。

  由此诞生了Cortex-M系列,这是新一代ARM低成本微处理器,采用低功耗设计。Cortex-M3内核和最近发布的Cortex-M4内核基于哈佛架构的3级流水线并采用Thumb-2指令集架构(ISA),内存要求更低。但这些MCU能否胜任音频处理任务?它们能否打造更出色的倾听体验,满足人们的期望?

  为了分析这些处理器是否适合处理音频,首先我们以MP3解码器和均衡器为例,大致了解一下音频解码器和后处理等音频部件中常用音频处理模块实施方案,然后按照高效实现这些模块对处理器指令集架构的要求,对模块加以分类。

  我们重点从指令集角度来探讨Cortex-M3和Cortex-M4内核在音频处理方面的优势。为此,我们先讨论不同音频部件的一些模块代码示例,随后分析这些处理器在循环和指令方面的独到优势,最后,将展示流行音频编解码器和音频后处理部件的典型性能指标以佐证这些处理器内核的音频能力。

  音频处理模块的功能块

  为了分析音频处理器要求,现先从音频处理模块所涉及的功能块,即音频编解码器和音频后处理部件谈起。本节框图中的模块用颜色标为3种不同类别。绿色表示乘加(MAC)密集模块、红色表示MAC和控制代码混合模块、蓝色表示控制代码模块。

  音频编解码器

  互联网提供了大量压缩音频数据,必然要求音乐播放器支持多种流行的音频解码器。音频编码器的处理功能涉及一系列功能块,我们接下来回顾一下。

图1:典型音频编码器框图。(电子系统设计)

图1:典型音频编码器框图。

  音频编码器:音频编解码器的用途是实现音频数据压缩,同时在给定比特率的限制下努力获得保真音质。典型编码器如图1所示。一般来说,音频编码器采用如下三步完成压缩:首先,通过数据滤波调节音频数据。然后,通过窗口化和重叠对音频数据进行帧化,等待进一步处理;接着,将此数据变换至频域,消除时域内的冗余。使用心理声学原理,对可能引入的、听不见的量化噪声数量进行计算;最后,对此数据进行量化并通过熵编码实现进一步无损压缩。此编码数据经紧密打包成为位流。尽管所实现的压缩有些损耗,但听觉难以分辨细微差别。

  音频解码器:将上述关于音频编码器的过程反向,即是音频解码器从位流中还原音频数据的原理。这里以MP3解码器为例进行讨论,高层模块分解如图2所示。框图以MP3文件格式的压缩音频作为输入并输出PCM格式的非压缩音频。

  这些模块以功能命名,并代表各自执行的操作

图2:MP3解码器框图。(电子系统设计)

图2:MP3解码器框图。

  “Bit Stream Demux”模块解析MP3位流

  “Entropy&Inv Q”模块执行霍夫曼解码和反向量化

  “IMDCT”模块对此数据进行反向修改离散余弦变换

  “Overlap and Add”模块执行窗口化、重叠和加法运算

  “Synthesis Filter Bank”从滤波器组域数据中重构时域样本[page]

  音频后处理

  两种情况一定需要音频数据后处理。首先,要求提供丰富的聆听体验。例如,可使用立体声加宽等空间定位器(Spatializer)来消除长时间使用耳机的听觉疲劳。即使是基本的音频播放,也需要后处理。例如,音乐播放器的DAC如果仅支持有限系列采样率的情况下,可能需要对音频数据进行重新采样。

图3:均衡器框图。(电子系统设计)

图3:均衡器框图。

  我们以均衡器为例,探讨后处理器中用到的典型模块。均衡器一般是为了满足聆听者的偏好,同时也可用于校正耳机或扬声器的频响。图3所示为基本参数均衡器的高层模块分解。下列模块用于仅修改一小段音频频谱,具体做法是利用增益值、带宽和中心/截止频率的可控参数提供增益或衰减。要获得所需频响,可将多个此类二阶IIR滤波器级联。

  低频(LF)斜率滤波器:一种用于修改音频频谱低音部分的滤波器

  峰化滤波器:一种用于修改音频频谱中频范围的滤波器

  高频(HF)斜率滤波器:一种用于修改音频频谱高音部分的滤波器

  音频处理模块类别

  根据特性,音频处理模块广义上分为三类。我们将详细讨论每种模块及其特性,然后进一步分析高效实现这些模块对处理器的要求。表1概述了本节所述音频处理的处理器要求。

表1:音频处理模块及其处理器要求。(电子系统设计)

  表1:音频处理模块及其处理器要求。

  MAC密集模块

  这些模块属于计算密集型,主要执行乘加(MAC)运算,通常有一个预定的代码流。滤波(FIR、IIR滤波器)、窗口化、相关性及卷积等信号处理运算属于此类别的典型例子。此类模块的处理器要求稍后论述。

  高精度MAC:这些模块正常工作需要高精度乘加法。例如,IIR滤波器的稳定性要求高精度运算。输出的保真度和精度直接取决于MAC指令的精度。尽管可使用低精度指令来某些仿真高精度MAC指令(例如32位乘以32位,在64位结果内累加),但最好是使用高精度MAC指令来获得高效实现。

  SIMD能力:这些模块内的运算往往是少量指令的反复执行,从而产生精简循环内核。单指令多数据(SIMD)能力对于此类模块的高效执行最为理想。内置此功能的处理器更有利于处理此类模块。

  饱和算法:某些运算需要使用饱和算法。例如,当在运行时产生窗口系数或在产生PCM输出数据到所需位宽时。针对饱和算术的需求可以减少,但无法完全避免,因为中间结果的位宽更高。因此,支持饱和算法的指令是高效实现的理想之选。

  分支推测:这些模块有一个预定的代码流。由于这些模块需要对指令反复执行运算,简单的分支推测有利于减少因流水线清空所产生的开销。

  MAC和控制代码混合模块

  这些模块同样是计算密集型,但在MAC密集运算中还涉及控制代码运算。快速傅里叶变换(FFT)、滤波器组等变换运算是这一类型的典型例子。此类模块的处理器要求为:

  DSP指令:由于上述两类模块(MAC密集模块和MAC和控制代码混合模块)主要涉及MAC运算,因此,如果只有MAC和MLS(乘法和减法)指令而无运算累加的开销,一定能提高效率。

  混合位宽运算:运算对象的最小位宽取决于各种因素。例如,在滤波运算中,输出精度和滤波器稳定性决定滤波器系数的位宽。所以高效实现离不开能够处理混合位宽运算对象的指令。

  压缩数据处理:FFT等这类模块的运算一般使用称为旋转因子的16位系数。FFT基数越高,所涉及的旋转因子越多,但相对复杂度越低。这些旋转因子可通过打包成32位数据来降低内核循环中的任何寄存器不足。或者可通过将旋转因子载入到内核循环以外的寄存器来避免重复负载的可能开销。因此,能够运算压缩数据的指令是提高效率的理想之选。

  位反转:能够执行位反转的指令有利于需要位反转寻址的FFT等关键模块。

  控制代码模块

  这些模块主要涉及控制代码且代码流为数据依赖型。位流解复用器和熵解码运算就属于此类。例如,MP3解码器采用霍夫曼解码,而WMA解码器采用游程解码。接下来讨论此类模块的处理器要求。

  无符和按位运算:这些模块需要处理打包的数据流,而这需要数据提取。因此,能够执行按位运算、提取、打包、解包的指令和能够处理无符运算对象的指令都是高效实现所需要的。

  精简数据,减少占位:这些模块中的代码流主要为数据依赖型,因此不是预定的。所以,精简数据大小有助于减少缓存清空所引起的任何开销。 

[page]

  ARM Cortex-M3和Cortex-M4处理器

  本节将探讨ARM低功耗高性能微控制器Cortex-M3内核的功能,然后讨论Cortex-M系列的最新处理器内核M4的功能。Cortex-M系列内核的功能及示例指令和循环如表2所列。

  Cortex-M3功能:采用高精度MAC单元,可提供最高32位乘以32位数据的乘法精度,得出64位累加结果。其他有利功能包括DSP指令、范数计算辅助指令、分支推测、因Thumb-2的高代码密度以及硬件除法指令。这些功能都有利于音频处理。

  Cortex-M4功能:Cortex-M4内核是Cortex-M3的升级产品,除了继承全部现有功能外,还增加了单循环MAC单元和浮点单元(FPU)等额外功能。MAC单元只需要1个循环,即使对于最高精度运算也是如此,将32位乘以32位,得出64位累加结果。增加了具有SIMD功能的DSP指令和高精度MAC单元等新功能,Cortex-M4就是一种具有DSP功能的微控制器,即数字信号控制器(DSC)。这些功能对于音频处理非常有利,因为需要高精度来保持透澈的音质。

表2:Cortex-M3和Cortex-M4功能、指令及循环示例。(电子系统设计)

  表2:Cortex-M3和Cortex-M4功能、指令及循环示例。

  音频处理传统上在数字信号处理器(DSP)上实施,而由通用处理器(GPP)负责系统相关的功能。随着Cortex-M系列的问世,由于这些处理器完全适合音频处理应用,音频可在这些内核上获得高效实施而无需DSP。

  音频模块代码示例

  现在,我们将展示一些不同音频处理部件(音频解码器、编码器、后处理及通用信号处理等)的例程的代码示例。代码段内用粗体字表示的指令是最新引入Cortex-M4的。每条指令的循环次数在括号中给出。表格概述了每个示例所用的总循环、所需的指令数及所用的寄存器。

  窗口重叠加法模块

  重叠加法窗口化是大多数音频解码器采用的典型模块。它以MAC运算为主,属于计算密集型。图4所示为此模块的运算处理流程。此例的实施方案在等式1中给出。

图4:窗口重叠加法模块图。(电子系统设计)

图4:窗口重叠加法模块图。

等式1:窗口重叠加法模块。(电子系统设计)

  等式1:窗口重叠加法模块。

电子系统设计

[page]

  双二阶IIR滤波器模块

  双二阶滤波器是二阶IIR滤波器的常用名,是均衡器等音频编码器和后处理器模块的一种典型例程。本质上属于计算密集型,以MAC运算为主。图5所示为此模块的Direct Form-1版本。此例的实施方案在等式-2中给出。在此例中,两种处理器的寄存器用途和指令数完全相同。

等式2:窗口重叠加法模块。(电子系统设计)

  等式2:窗口重叠加法模块。

电子系统设计

  基2 FFT蝶形器模块

  FFT是一种通用信号处理运算。音频处理模块一般都需要FFT运算进行频域变换。它计算密集型,以MAC和控制代码混合运算为主。此例仅说明基2时间抽取算法(DIT)蝶形运算。输入输出数据的精度均为16位。图6所示为此模块的运算处理流程。此例的实施方案在等式3中给出。

图6:基2 DIT FFT蝶形运算。(电子系统设计)

图6:基2 DIT FFT蝶形运算。

等式3:基2时间抽取蝶形运算。(电子系统设计)

  等式3:基2时间抽取蝶形运算。

电子系统设计

  FIR滤波器模块

  FIR滤波器是一种典型的信号处理运算,常用于后处理模块。此模块也是计算密集型,以MAC运算为主。图7所示为此模块的运算处理流程。在此例中的实施方案在等式4中给出。

图7:FIR滤波器模块图。(电子系统设计)

图7:FIR滤波器模块图。

  等式4:FIR滤波器等式。(电子系统设计)

  等式4:FIR滤波器等式。

电子系统设计

[page]

  基于ARM Cortex-M处理器的音频解决方案

  Ittiam公司基于Cortex-M处理器的音频解决方案包含低功率音频编解码器和高品质后处理部件。表3列出了Cortex-M3和Cortex-M4处理器所选的代表性音频部件的典型性能。

  处理器的音频功能:该音频编解码器进一步优化了性能,充分发挥了Cortex-M3的DSP指令和Cortex-M4的SIMD潜能。这款优化的音频解决方案提高了处理器频率的使用效率,延长了音频播放时间。音频后处理器部件通过高效利用高精度MAC单元来实现卓越音质。借助Cortex-M处理器的这些功能,Ittiam音频解决方案实现了低功耗、高音质。

  音频能力:这些典型性能指标针对立体声模式和44.1kHz采样率。解码器和编码器采用128kbps配置。参数均衡器采用3频带配置。所有性能指标假设零等待状态内存配置。硬件性能会随实际内存配置而有所不同。

表3:Cortex-M3和Cortex-M4音频部件的处理器资源利用率。(电子系统设计)

表3:Cortex-M3和Cortex-M4音频部件的处理器资源利用率。

  为了计算处理器的负载百分比,假设Cortex-M3的时钟频率为100MHz,Cortex-M4为150MHz。执行一次音频解码并施加两个效应(例如MP3解码以及随后的均衡器和立体声加宽)的一般处理器负载在Cortex-M3上约为40%,而在Cortex-M4上约为15%。这表明这些处理器不仅音频能力超高,还可增强聆听体验。

表4:Cortex-M3和Cortex-M4音频部件的内存资源要求。(电子系统设计)

表4:Cortex-M3和Cortex-M4音频部件的内存资源要求。

  内存占用更小:表4列出了Cortex-M3和Cortex-M4处理器所选的代表性音频部件的内存要求。这些内存资源要求分别针对RAM和ROM内存。由于Cortex-M4功能更先进,所以ROM要求比Cortex-M3更低。Cortex-M系列处理器的Thumb-2功能使音频部件的内存占用更小,内存要求低,因而成本更低。

  本文小结

  通过对各种音频处理模块的分析以及对音频处理的处理器要求的分析,我们可以看出,ARM Cortex-M3和Cortex-M4处理器内核的功能和能力可以实现高效的音频处理。由于低功耗、高性能,Cortex-M处理器非常适合音频应用。这些处理器超强的音频能力可用于低功耗产品设计,实现更长的音频播放时间,同时提供更丰富的聆听体验。

关键字:ARM  Cortex-M  音频性能 引用地址:ARM Cortex-M的音频性能解析

上一篇:Cortex-M3的生态物联网数据采集分站设计
下一篇:Cortex—M3的SRAM单元故障软件的自检测研究

推荐阅读最新更新时间:2024-03-16 13:07

arm汇编语言中调用C库函数printf
今天在写一个ARM汇编代码时,本来想在程序中显示字符串信息,结果不成功,开始以为是C库中printf的实现的原因,下午终于解决问题,原来是没有在汇编程序中初始化C库。 遇到这个问题时,为了简单起见,我直接用汇编写了一个调用printf函数显示字符串hello的程序,如下: area |hello$code|,code,readonly code32 entry import _printf import ||Lib Request armlib||,weak hello adr r0,strhello bl _printf strhello dcb hello!/n/0
[单片机]
ARM的函数指针、指针函数的区别和用法
在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,和大家的一些总结,整理到此。和大家分享。 首先它们之间的定义: 1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。 表示: float *fun(); float *p; p = fun(a); 注意指针函数与函数指针表示方法的不同,千万不要混淆
[单片机]
ARM---解决ads工程转到MDK(keil)可能出现的error
最近把ADS1.2工程转到MDK4.03出现一些error,罗列了可能出现的error,并给予相关的办法,让大家在以后的转换中尽快搞定 1:error : No section matches selector –no section to be FIRST/LAST. 把原来的Init 代码段名修改成RESET: ; AREA Init,CODE,READONLY AREA RESET,CODE,READONLY 2:error Undefined symbol Main (referred from 2440init.o). error: scatter-load file declares no hea
[单片机]
<font color='red'>ARM</font>---解决ads工程转到MDK(keil)可能出现的error
嵌入式ARM微处理器选型指南
要选好一款处理器,要考虑的因素很多,不单单是纯粹的硬件接口,还需要考虑相关的操作系统、配套的开发工具、仿真器,以及工程师微处理器的经验和软件支持情况等。微处理器选型是否得当,将决定项目成败。当然,并不是说选好微处理器,就意味着成功,因为项目的成败取决于许多因素;但可以肯定的一点是,微处理器选型不当,将会给项目带来无限的烦恼,甚至导致项目的流产。 1 嵌入式微处理器选型的考虑因素 在产品开发中,作为核心芯片的微处理器,其自身的功能、性能、可靠性被寄予厚望,因为它的资源越丰富、自带功能越强大,产品开发周期就越短,项目成功率就越高。但是,任何一款微处理器都不可能尽善尽美,满足每个用户的需要,所以这就涉及选型的问题。 (1)
[单片机]
ARM与Linux些许问题》第二章:Linux操作系统与ARM工作模式
====================================================================================================================================== 首先,ARM开发板在刚上电或复位后都会首先进入SVC即管理模式,此时、程序计数器R15-PC值会被赋为0x0000 0000;bootloader就是在此模式下,位于0x0000 0000的NOR FLASH或SRAM中装载的,因此、开机或重启后bootloader会被首先执行。 接着,bootloader引导Linux内核,此时、Linux内核一样运行在A
[单片机]
基于嵌入式ARM的LCD图像显示系统设计
0 引 言 随着嵌入式技术迅猛发展和Linux在信息行业中广泛应用,利用嵌入式Linux系统实现图像采集处理已有可能。实时获得图像数据是实现这些应用的重要环节。本文使用的系统硬件平台采用Samsung公司的处理器S3C2410,并以此为基础,在基于嵌入式Linux系统平台上设计了建立图像视频的一种方法。 1 系统硬件电路设计 S3C2410芯片处理器内部集成了ARM公司ARM920T处理器核的32位微控制器,资源丰富,带独立的16 kB的指令Cache和16 kB数据Cache、LCD(液晶显示器)控制器、RAM控制器、NAND闪存控制器、3路UART、4路DMA、4路带PWM的定时器、并行I/O口、8路10位ADC、Tou
[嵌入式]
ARM收购视频公司 巩固媒体处理上的地位
      2009年2月11日,ARM 在上海宣布其已收购瑞典视频IP公司Logipard AB。私营的Logipard AB主要为移动和消费市场设计高能效的视频编码和解码加速技术,为全球最领先的的移动技术供应商之一提供视频IP,此供应商服务于LG电子和其他两个领先的移动手持设备OEM厂商所使用的平台。迄今为止已经有超过3千万已出货的移动电话应用了Logipard视频IP。此次收购促成ARM为市场带来ARM® Mali™-VE多标准视频引擎家族产品。       这次收购将视频和图像技术加入到ARM产品方案中,使ARM成为唯一拥有深度经验和独到见解的IP提供商,能够满足市场对于各种类型的系统元件的要求,包括从存储控制器,互联
[半导体设计/制造]
基于ARM的单相电力计量装置现场监测仪实现
  电力计量装置现场监测仪是根据国家相关规程标准,专为电力管理部门降线损、防窃电在线检测的智能化仪表。仪表可在不停电、不改变计量回路接线的情况下,在线测出单相计量箱的综合误差及电能表、互感器的误差,并打印结果。进而判断回路的断路、短路、接触不良、CT 极性接反、CT变化与铭牌不符等计量故障,是电力管理部门查窃电、查故障、追补电费的得力工具。   1 系统总体设计   1.1 技术要求   配备精密钳形电流互感器,在不断电、不改变计量回路的情况下,检测计量装置、电能表及互感器的误差。显示瞬时检测状态下的一次电流、二次电流、电压、互感比。具有光电采样和手动采样、脉冲输入3种测量方式。精度等级达到0.2级。具有低频脉冲信号输出,
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved