• 嵌入式音频处理基础


     


    或许:

    或许,您还不知道嵌入式音频是什么,那么以下为您介绍的嵌入式音频处理基础,对于任何具有音频处理功能的嵌入式系统来说,这都可以看做是一个起始点。


    一段引子:

    在多媒体应用中,音频功能起着关键的作用。一般情况下,音频需要的处理能力比视频要小的多,但是应该对这两种应用给予同样的重视。

    接下来将会讨论一下声音和音频信号的问题,然后简单介绍一下音频数据的存储和处理格式。

    此外,讨论一些关于嵌入式音频处理系统的软件构造快。对于音频处理来说,高效的数据传输时必须的。所以可以关注一下音频算法的数据存储。语音和音频压缩的一些知识也会有所涉及。


    嵌入式音频处理


    声音是什么:

    声音是一种通过空气或者其他介质传播的纵向波。声音具有两种属性:振幅和频率。

    声波的振幅是指对压强变化的度量。以分贝(dB)为测量单位。人类能够听到的最小的声波振幅称为“听觉阈值”,用0dBSPL来表示,这里的SPL是Sound Pressure Level的缩写,指声波压强级别。在这个SPL尺度上,参考压强定义为20微帕斯卡(uPa)。假定压强的变化为x,则 dBSPL的一般表达式为:

    dBSPL=20*log(xuPa/20uPa)

     各种常见声音的分贝值

    从上表可以看出,人类可以忍受并能够听到的声音范围是120dB。因此所有工程设计上的音频系统都可以使用120dB作为动态范围的上限。

    声音的另一个重要特征是频率,单位是赫兹(Hz)。或者说是每秒钟的周期数 。人类可听到的声音,频率范围是20Hz-20000Hz。

    实际上,人类最敏感的频率范围是2-4KHz。在有损音频压缩算法中利用了两种有用的现象,这就是时间屏蔽和频率屏蔽。

    在实践屏蔽中,高的音调可以淹没几乎同时发生的低音调。当某一频率的高音调渲染一些无法听到的附近频率的声音时会发生频率屏蔽。

     


    音频信号

    为了产生一个表示声波的模拟信号,必须使用转换器将机械的压强能量转换为电能量。即,麦克风。

    由于麦克风可以将声音转换为电压,所以需要使用一种新的分贝刻度来描述声波的振幅。这个刻度称为dBV。以1V作为基准参考点。描述电压x和dBV之间的关系等式如下:

    dBV=20*log(xVOLTS/1.0VOLTS)

    另一种模拟分贝刻度以0.775V作为参考电压,单位符号是dBu。

     


    模拟与数字音频信号之间转换

    将模拟信号数字化,可以通过模数转换器(ADC)来实现。将数字信号模拟话可以通过数模转化器(DAC)来实现。许多音频系统实际上是一种全双工媒体处理流程,所以在一个包中既有ADC和DAC,这个包称为“音频解码器”(audio codec)。

    所有的A/D和D/A转换都应遵循香浓-奈奎斯特(Shannon-Nyquist)采样定律。简单的说。这个定律规定,对模拟信号的采样频率必须大于信号中最高频率成分的两倍,只有这样才能在后面的D/A转换中对信号进行恢复。

                                                                                                                             (a)                                                                                                                    (b)

    (a) 用40KHz的频率去采样20KHz的信号可以正确捕捉到原始信号。

    (b) 用30KHz的频率去采样20KHz的信号会出现混淆信号。

    一般重建音乐信号时采用的最低采样频率为44.1KHz。在许多高品质的系统中,采用的48KHz的采样频率。

     常用的采样频率

    音频应用中常用的数字表示方法为脉冲编码调制(Pulse-Code-Modulated,PCM)信号。在这种表示方法中,每个采样周期用一个数字电平对模拟信号的幅度进行编码。得到的数字波形是一组采样自输入模拟波形的近似值。由于所有A/D转换器的分辨率都是有限的,所以在数字音频系统中,A/D转换器带来的量化噪声是不可避免的。

    PCM信号 


    举例:

    音频ADC AD1871功能框图

     

    多媒体处理器ADSP-BF533与AD1871之间的无粘合连接

    IIS是一种简单的三线串行接口,可以用来传输立体声数据。包含一根时钟线、一根数据线和一根左右声道同步线,用来选择当前正在传输的数据帧是左声道还是右声道。

    本质上讲,IIS总线是一种时分复用串行流,具有两个活动通道。时分复用是一种在一个无力链接上传输多个通道数据的方法。

    详细使用方法不在介绍,SPI总线不再详细介绍。 


    PWM输出:

    可以使用另一种类型的调制方法,称为脉冲宽度调制(Pulse-Width Modulation,PWM)。用这种方式驱动输出电路不需要任何DAC,这是一种降低成本的方案。

    在PCM中,每个采样周期都要对幅值进行编码,而在PWM信号中,描述幅值的占空比。PWM信号可以用通用的I/O引脚来产生,或者也可以直接由专门的PWM定时器驱动。

    为使PWM音频达到很好的质量,PWM载波的频率至少应该是信号带宽的12倍,定时器的精度应该是16位。随着高速处理器的快速发展,PWM传送更高的音频频谱也是有可能的。

    PWM数据流必须经过低通滤波,以便移出高频载波。在驱动扬声器的放大电路中经常这么做。在低成本应用中,声音质量不是很重要,PWM数可以用来充当低通滤波器过滤调高频载波。

    PWM信号 


    连接器:

     各种音频连接器 


    音频系统动态范围和精度:

     各种音频系统动态范围的比较

    上述动态范围数字的意义:

     音频系统中一些重要术语之间的关系

    人耳的动态范围(也就是人耳能够听到的最大声音和最小声音之比)大约是120dB。在一些存在噪声的系统中,动态范围的定义是最大的信号电平与最小的噪声之比,即动态范围(dB)=信号峰值(dB)-噪声最低限度(dB)

    SNR---信噪比(Signal-to-Noise Ratio,SNR)。在模拟系统中,这个术语是指名义信号与噪声最低限度之间的比值,线路电平(line level)是指名义 操作电平。在专业设备中,名义电平一般为1.228Vrms(电压有效值)。转换为分贝是+4dBu。动态余量(headroom)是指名义线路电平与峰值电平之间的差值,在峰值电平处开始发生信号的失真。在数字系统中,信噪比定义稍有不同,它直接定义为动态范围。

    6dB规则:

    这个规则对于动态范围与计算字宽之间的关系非常重要,公式如下:动态范围(dB)=6.02n+1.76=6n dB,这个公式的意义在于,数据位数每增加一位,动态范围增加6dB。注意的是,6dB规则并没有考虑音频系统中的模拟子系统,所以输入和输出端的转换器带来的影响必须进行单独考虑。

    6dB规则表示,使用的数据位宽越大,则系统的品质越高,实际上,切实可行的选择并不多。绝大多数适合于嵌入式多媒体处理的设备主要使用3种字宽:16位、24位和32位。 

    各种定点体系结构下的动态范围 


    音频的数字格式: 

    用于音频处理的两类主要的处理器结构分别是定点型和浮点型。定点型处理器用来处理整数和小数算法,通常本地支持16位、24位和32位。浮点型处理器则具有更强的性能,本地支持32位和64位浮点数据类型。浮点型处理器通常在成本和功耗上比定点型处理器高,而绝大多数系统必须在品质与工程成本之间作一个平衡。

    当忽略量化误差时,对于理想的16位96dB的SNR系统各种字宽额外比特的分配 

    当存在量化误差时,对于理想的16位96dB的SNR系统各种字宽额外比特的分配 

    运算方法: 

      • 定点运算

      • 浮点运算 

    详细算法这里不做介绍。  


    音频处理方法:

    数据输入到处理器内核:

    一般而言,与音频编解码器相连的处理器通常使用DMA将数据从编解码器接口传输到处理器内部的存储器中。这样的数据传输在后台进行的,无需处理器干预。处理器唯一的开销是设置DMA序列,当数据缓存或者发送完数据后处理中断。

    块处理与采样处理:

     采样处理和块处理是两种处理数字音频数据的方法。在基于采样的方法中,处理器在数据可用时立即进行处理。这种情况下,每次采样期间都会有些处理开销。许多滤波器都是利用这种方法实现的,它们要求的延迟非常小。

    另一种方法是块处理,利用一定深度的缓存先将数据存储起来,然后送到处理器进行处理。这种方法比采样处理更加有效。一方面,块处理极大的减少了每次采样时调用处理函数的开销,另一方面,许多嵌入式处理有多个ALU单元,可以并行计算 一个块的数据。

    双缓存:

    基于块处理系统中,一般利用DMA在处理器内核与设备之间传输数据,这时必须要有双缓存来分别处理DMA和处理器内核的数据。这样做是为了避免处理器内核与独立于处理器的DMA同时访问相同的数据,从而带来数据一致性问题。

    数据流处理的双缓存方案

    具体详细过程不再赘述。  


    滤波与算法:

    有限脉冲响应滤波器

      • 无线脉冲响应滤波器

      • 快速傅里叶变换 


    音频压缩:

    音频压缩技术指的是对原始数字音频信号流(PCM编码)运用适当的数字信号处理技术,在不损失有用信息量,或所引入损失可忽略的条件下,降低(压缩)其码率,也称为压缩编码。它必须具有相应的逆变换,称为解压缩或解码。音频信号在通过一个编解码系统后可能引入大量的噪声和一定的失真。

    音频编解码器分为无损编解码器和有损编解码器。无损编解码器是指压缩后的数据可以被完全恢复,恢复后的数据与原始输入信号完全一致。无损编解码器计算量比较大,可以将音频信号的比特率降低大约一半。有损编解码器可以将音频信号压缩的更多,从有损音频流解码得到的音频信号非常接近于原始信号,但 有些信息在编码过程中就损失掉了。

     各种音频编解码器

    MP3是一种音频压缩技术,其全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III),简称为MP3。它被设计用来大幅度地降低音频数据量。利用 MPEG Audio Layer 3 的技术,将音乐以1:10 甚至 1:12 的压缩率,压缩成容量较小的文件,而对于大多数用户来说重放的音质与最初的不压缩音频相比没有明显的下降。

    AAC(Advanced Audio Coding),中文名:高级音频编码,出现于1997年,基于MPEG-2的音频编码技术。由Fraunhofer IIS、杜比实验室、AT&T、Sony等公司共同开发,目的是取代MP3格式。2000年,MPEG-4标准出现后,AAC重新集成了其特性,加入了SBR技术和PS技术,为了区别于传统的MPEG-2 AAC又称为MPEG-4 AAC。

    AC-3是杜比公司开发的新一代家庭影院多声道数字音频系统。杜比定向逻辑系统是一个模拟系统。它的四个声道是从编码后的两个声道分解出来的,因此难免有分离度不佳、信噪比不高,对环绕声缺乏立体感,并且环绕声的频带窄等缺点。AC(Audio Coding)指的是数字音频编码,它抛弃了模拟技术,采用的是全新的数字技术。

    WMA(Windows Media Audio),它是微软公司推出的与MP3格式齐名的一种新的音频格式。由于WMA在压缩比和音质方面都超过了MP3,更是远胜于RA(Real Audio),即使在较低的采样频率下也能产生较好的音质。一般使用Windows Media Audio编码格式的文件以WMA作为扩展名,一些使用Windows Media Audio编码格式编码其所有内容的纯音频ASF文件也使用WMA作为扩展名。

    RealAudio(即时播音系统)是Progressive Networks公司所开发的软体系统。是一种新型流式音频 Streaming Audio文件格式。它包含在 RealMedia中,主要用于在低速的广域网上实时传输音频信息。有了RealAudio这套系统一般使用者只要自备多媒体个人电脑、14.4kbps数据机(它最低只占用14.4kbps的网路频宽)和PPP拨接帐号,就可以线上点播转播站或是聆听站台所提供的即时播音。

    Ogg全称应该是OGG Vorbis是一种新的音频压缩格式,类似于MP3等现有的音乐格式。但有一点不同的是,它是完全免费、开放和没有专利限制的。OGG Vorbis有一个很出众的特点,就是支持多声道,随着它的流行,以后用随身听来听DTS编码的多声道作品将不会是梦想。

    Vorbis 是这种音频压缩机制的名字,而Ogg则是一个计划的名字,该计划意图设计一个完全开放性的多媒体系统。目前该计划只实现了OggVorbis这一部分。

    FLAC中文可解释为无损音频压缩编码。FLAC是一套著名的自由音频压缩编码,其特点是无损压缩。不同于其他有损压缩编码如MP3 及AAC,它不会破坏任何原有的音频资讯,所以可以还原音乐光盘音质。2012年以来它已被很多软件及硬件音频产品(如CD等)所支持。


    版权所有权归卿萃科技,转载请注明出处 

    作者:卿萃科技ALIFPGA  

    原文地址:卿萃科技FPGA极客空间 微信公众号


     

      扫描二维码关注卿萃科技FPGA极客空间

  • 相关阅读:
    Android网络框架之Retrofit + RxJava + OkHttp 变化的时代
    网易与Google合作发布开源UI自动化测试方案 牛逼:Google 方面评价,这可能是目前世界上最好的 Android 游戏自动化测试方案。
    GitHub上受欢迎的Android UI Library
    推荐一些socket工具,TCP、UDP调试、抓包工具 (转载)
    pytest 一个测试类怎样使用多种fixture前置方法
    Appium服务器初始化参数(Capability)
    pytest执行用例:明明只写了5个测试用例, 怎么收集到33个!?
    解决VirtualBox 运行时报内存不能written
    VirtualBox 虚拟机怎样设置共享文件夹
    简单通俗讲解 android 内存泄漏
  • 原文地址:https://www.cnblogs.com/alifpga/p/7600101.html
Copyright © 2020-2023  润新知