新闻中心

EEPW首页 > 消费电子 > 设计应用 > 嵌入式音频处理基础(二)

嵌入式音频处理基础(二)

—— Fundamentals of Embedded Audio Processing (Part 2)
作者:David Katz, Rick Gentile和Tomasz Lukasiak ADI公司时间:2008-09-18来源:电子产品世界收藏

  在本文的第2部分中,我们首先对动态范围与精度的论题进行探讨,然后再对数据格式进行深入的讨论,因为数据格式是与处理相关的。

本文引用地址:http://www.eepw.com.cn/article/88167.htm

动态范围与精度

  您也许已经见到过dB的规范,这是在目前市场上用于描述各种产品而随处可见的。表1列出了几种产品以及它们的信号质量,以dB为单位。

表1  各种系统的动态范围比较

  那么,这些数值究竟代表什么意思呢?让我们从确定一些定义来开始。把图1作为对下列基本规范的“仿制数据手册(cheat sheet)”的一个参考信号。


图1  系统中一些重要术语之间的关系

  人耳的动态范围(最响的信号电平与最安静 的信号电平之比值)约为120 dB。在存在噪声的系统中,动态范围被描述为最大信号电平与本底噪声之间的比值。这就是说,

  动态范围(dB)=峰值电平(dB)—本底噪声(dB)

  纯模拟系统中的本底噪声来自系统本身的电特性。建立在模拟系统之上的数字音频信号也会从ADC和DAC中获得噪声,而且还可以从模拟数据采样过程所产生的量化误差中获得噪声。

  另一个重要的术语是信噪比(SNR)。在模拟系统中,信噪比的意思是标称信号对于本底噪声的比值,其中的“线电平”是标称工作电平。对于专业设备,标称电平通常为1.228 Vrms,这可以转换为+4 dBu。余量是标称电平与峰值电平之间的差值,峰值电平指开始出现信号失真的电平。数字系统中的SNR定义有些不同,即SNR被定义为动态范围。

  现在,有了对动态范围的理解,我们就可以开始讨论动态范围在实际中有怎样的用途。不做冗长的推导,让我们简单介绍一下什么是6 dB规则。这个规则是动态范围与计算字长之间关系的关键所在。完整的公式推导在式1中说明,但这里使用了简便的表示法,意思是每增加1位的精度,将使动态范围增加6 dB。应该注意,这个6 dB的规则并没有考虑到音频设计中的模拟子系统,所以,输入端和输出端的传感器的非理想性必须另作考虑。

  动态范围(dB)= 6.02n + 1.76 ≈ 6n dB
  其中n =精度位的数目
  式1:6 dB规则

  “6 dB规则”指出,使用的位数越多,我们能获得的系统质量就越高。但实际上,只有少数几个真正可用的选择。大多数适用于媒体处理的器件有三种字长形式:16位、24位和32位。表2总结了这三类的动态范围。

  由于我们在讨论6 dB规则,所以有必要对中常被使用的非线性量化方法进行一些讨论。电话质量的线性PCM编码需要12位的精度。但是,我们的耳朵对小幅度时音频信号变化的敏感度要超过大幅度时。因此,电话通讯中使用的线性PCM采样方法的位数用得过多。A律和μ律压扩标准中使用的对数量化只用8位精度就达到了12位PCM的质量等级。为了使我们的生活更加方便,有些厂商已经把A律和μ律压扩标准做到了器件的串行端口中。这使内核无需进行对数计算。

  在查看了表2之后,我们又一次回想起人耳的动态范围约为120 dB。基于这个原因,16位数据的表示法对于高质量音频并不是太合适。因此,供应商引入了对16位系统的动态范围进行扩展的24位处理器。这些24位的系统从C编译器的观点来看有点不标准,所以近年来的许多音频设计使用了32位的处理方式。

表2  各种定点架构的动态范围

  选择了正确的处理器并不是万事大吉了,因为一个音频系统的总体质量是由“达到最低质量”元件的等级所决定的。除了处理器外,整个系统还包括像话筒和扬声器这样的一些模拟元件,以及使信号在模拟域与数字域之间变换的。模拟域超出了这次讨论的范围,而音频则涉及到了数字域。

  假设您想使用AD1871进行音频采样。的数据手册中把它解释为一个24位的转换器,但它的动态范围不是144 dB,而是105 dB。其原因是转换器不是一个完美无缺的系统,而供应商只给出了有用的动态范围。

  如果您真的想把AD1871与24位处理器相连,那么,您整个系统的SNR将为105dB。本底噪声将达到144dB-105dB=39dB。图2是这一情况的图形表示。但是,在数字音频系统中还有另一个组件 我们还没有讨论:处理器内核内的计算。


图2  一个音频系统的SNR由最弱元件的SNR构成

  使数据经过处理器的计算单元会潜在地引入各种误差。其中之一就是量化误差。这种误差可以在一连串导致数据值被截取或舍入(向上或向下)的计算中产生。例如,一个16位处理器可以对一个16位数据组成的向量作加法,然后把结果存入一个扩展字长的累加器中。但是,当累加器中的数值最终被写入到一个16位数据寄存器中时,其中的有些位会被截去。

  可以看一下图3,看看计算误差是如何影响到实际系统的。对于一个理想的16位A/D转换器(图3a),信噪比应该是16 x 6 = 96 dB。如果不存在量化误差,那么,16位计算足以把SNR保持在96 dB。而24位和32位系统将分别把8位和16位置于本底噪声以下的动态范围中。从本质上看,这些额外的数位是被浪费掉了。


图3 (a)在一个理想的16位96 dB SNR系统中,不同字长计算时的额外数位的分配,
其中忽略了量化误差  (b) 在一个理想的16位96 dB SNR系统中,
不同字长计算时的额外数位的分配,其中存在量化误差

  但是,所有的数字音频系统都确实要引入舍入和截取误差。如果我们可以量化这个误差,如确定为18dB(或3位),那么很清楚,16位计算对于维持96dB的系统SNR是不够的(图3b)。解释这一点的另一个方法是,有效的本底噪声被提高了18dB,因而总的SNR就降低到了96dB -18dB = 78dB。这导致的结论是,在本底噪声以下的额外数位有助于解决量化中出现的麻烦事。

音频的数据格式

  在处理器内部有许多种表示数据的方法。音频处理中使用的两种主要的处理器架构是定点与浮点。定点处理器设计成用整数和分数进行运算,通常固有地支持16位、24位或32位的数据。浮点处理器提供非常好的性能,并固有地支持32位或64位的浮点数据类型。但是,这些浮点处理器一般成本比较高,而且比相应的定点处理器消耗更多的功率,因而所有的实际系统都必须在质量和工程成本之间寻求一个平衡点。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭