




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、在本文的第2部分中,我们首先对动态范围与精度的论题进行探讨,然后再对数据格式进行深入的讨论,因为数据格式是与音频处理相关的。动态范围与精度您也许已经见到过dB的规范,这是在目前市场上用于描述各种产品而随处可见的。表1列出了几种产品以及它们的信号质量,以dB为单位。表1 各种音频系统的动态范围比较那么,这些数值究竟代表什么意思呢?让我们从确定一些定义来开始。把图1作为对下列基本规范的“仿制数据手册(cheat sheet)”的一个参考信号。图1 音频系统中一些重要术语之间的关系人耳的动态范围(最响的信号电平与最安静 的信号电平之比值)约为120 dB。在存在噪声的系统中,动态范围被描
2、述为最大信号电平与本底噪声之间的比值。这就是说,动态范围(dB)=峰值电平(dB)本底噪声(dB)纯模拟系统中的本底噪声来自系统本身的电特性。建立在模拟系统之上的数字音频信号也会从ADC和DAC中获得噪声,而且还可以从模拟数据采样过程所产生的量化误差中获得噪声。另一个重要的术语是信噪比(SNR)。在模拟系统中,信噪比的意思是标称信号对于本底噪声的比值,其中的“线电平”是标称工作电平。对于专业设备,标称电平通常为1.228 Vrms,这可以转换为+4 dBu。余量是标称电平与峰值电平之间的差值,峰值电平指开始出现信号失真的电平。数字系统中的SNR定义有些不同,即SNR被定义为动态范围。现在,有了
3、对动态范围的理解,我们就可以开始讨论动态范围在实际中有怎样的用途。不做冗长的推导,让我们简单介绍一下什么是6 dB规则。这个规则是动态范围与计算字长之间关系的关键所在。完整的公式推导在式1中说明,但这里使用了简便的表示法,意思是每增加1位的精度,将使动态范围增加6 dB。应该注意,这个6 dB的规则并没有考虑到音频设计中的模拟子系统,所以,输入端和输出端的传感器的非理想性必须另作考虑。动态范围(dB)= 6.02n + 1.76 6n dB其中n =精度位的数目式1:6 dB规则“6 dB规则”指出,使用的位数越多,我们能获得的系统质量就越高。但实际上,只有少数几个真正可用的选择。大多数适用于
4、嵌入式媒体处理的器件有三种字长形式:16位、24位和32位。表2总结了这三类处理器的动态范围。由于我们在讨论6 dB规则,所以有必要对语音信号中常被使用的非线性量化方法进行一些讨论。电话质量的线性PCM编码需要12位的精度。但是,我们的耳朵对小幅度时音频信号变化的敏感度要超过大幅度时。因此,电话通讯中使用的线性PCM采样方法的位数用得过多。A律和律压扩标准中使用的对数量化只用8位精度就达到了12位PCM的质量等级。为了使我们的生活更加方便,有些处理器厂商已经把A律和律压扩标准做到了器件的串行端口中。这使处理器内核无需进行对数计算。在查看了表2之后,我们又一次回想起人耳的动态范围约为120 dB
5、。基于这个原因,16位数据的表示法对于高质量音频并不是太合适。因此,供应商引入了对16位系统的动态范围进行扩展的24位处理器。这些24位的系统从C编译器的观点来看有点不标准,所以近年来的许多音频设计使用了32位的处理方式。表2 各种定点架构的动态范围选择了正确的处理器并不是万事大吉了,因为一个音频系统的总体质量是由“达到最低质量”元件的等级所决定的。除了处理器外,整个系统还包括像话筒和扬声器这样的一些模拟元件,以及使信号在模拟域与数字域之间变换的转换器。模拟域超出了这次讨论的范围,而音频转换器则涉及到了数字域。假设您想使用AD1871进行音频采样。转换器的数据手册中把它解释为一个2
6、4位的转换器,但它的动态范围不是144 dB,而是105 dB。其原因是转换器不是一个完美无缺的系统,而供应商只给出了有用的动态范围。如果您真的想把AD1871与24位处理器相连,那么,您整个系统的SNR将为105dB。本底噪声将达到144dB-105dB=39dB。图2是这一情况的图形表示。但是,在数字音频系统中还有另一个组件 我们还没有讨论:处理器内核内的计算。图2 一个音频系统的SNR由最弱元件的SNR构成使数据经过处理器的计算单元会潜在地引入各种误差。其中之一就是量化误差。这种误差可以在一连串导致数据值被截取或舍入(向上或向下)的计算中产生。例如,一个16位处理器可以对一个
7、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) 在一个理想
8、的16位96 dB SNR系统中,不同字长计算时的额外数位的分配,其中存在量化误差但是,所有的数字音频系统都确实要引入舍入和截取误差。如果我们可以量化这个误差,如确定为18dB(或3位),那么很清楚,16位计算对于维持96dB的系统SNR是不够的 (图3b)。解释这一点的另一个方法是,有效的本底噪声被提高了18dB,因而总的SNR就降低到了96dB -18dB = 78dB。这导致的结论是,在本底噪声以下的额外数位有助于解决量化中出现的麻烦事。音频的数据格式在处理器内部有许多种表示数据的方法。音频处理中使用的两种主要的处理器架构是定点与浮点。定点处理器设计成用整数和分数进行运算,通常固有地支持
9、16位、24位或32位的数据。浮点处理器提供非常好的性能,并固有地支持32位或64位的浮点数据类型。但是,这些浮点处理器一般成本比较高,而且比相应的定点处理器消耗更多的功率,因而所有的实际系统都必须在质量和工程成本之间寻求一个平衡点。定点运算执行定点运算的处理器一般对信号使用二进制补码表示法。定点格式可以表示有符号和无符号的整数和分数。在定点处理器上使用有符号的分数格式是在数字信号处理中最常见的。整数与分数格式的差别在于二进制小数点的位置。对于整数,二进制小数点是在最低位的右边;而对于分数,通常把它们的小数点放在符号位的右边 。图4a表示了整数和分数的格式。图4(a)分数和整数格式 (b)IE
10、EE 754 32位单精度浮点格式虽然定点的规则简化了数值操作且节省了存储器,但同时也存在动态范围和精度之间的折衷。在需要保持很高分辨率同时又要使用很大数值范围的应用场合,就需要使用一个可以根据幅值和指数而移动的小数点。浮点运算使用浮点格式就可以在同一系统中表示非常大和非常小的数。浮点数与有理数的科学记数法十分相似。浮点数是用尾数和指数描述的。尾数确定了精度,而指数控制着动态范围。有一个标准管理着数字机的浮点运算。这个标准叫IEEE-754(图4a);对于32位浮点数可以归纳如下。第31位(MSB,最高位)是符号位,它的0表示符号为正,它的1表示符号为负。从第30位到第23位是表示2的整次幂的
11、指数字段(exp_field),并以127作为偏移量。最后,第 22位到第0位表示分数的尾数(mantissa)。隐藏位一般是指在小数点的左边有一个1。32位的IEEE浮点数的值可以用下面的等式来表示:(-1)sign_bit × (1.mantissa) * 2(exp _field-127)依靠8位的指数和23位的尾数,IEEE-754达到了动态范围和精度之间的一个平衡。而且,IEEE浮点库还包括了对于像?、0和NaN(不是一个数)等附加特性的支持表3表示了从常用的浮点和定点类型可以达到的最小数和最大数。表3 各种数据格式的动态范围比较在16位架构上的仿真正如我们在前
12、面解释的,16位处理并不能为高质量音频提供足够的SNR,但这并不是说您不应该选用16位处理器作为音频系统。例如,用一个32位的浮点机把一个算法编写成保持原来32位数据风格的程序,是比较容易的;但一个16位处理器也可以通过非常低成本的仿真而保持32位的完整性。图5示出了为一个嵌入式算法选择数据类型时的一些可能性。图5 根据一个应用的目标,可以有许多满足系统要求的数据类型在本节的余下部分,我们将描述如何在一个16位定点机上实现浮点和32位扩展精度定点格式的功能。在定点处理器上的浮点仿真在大多数的16位定点处理器上,IEEE-754浮点功能是通过对C/C+或汇编语言的库调用而提供的。这些
13、库通过使用定点乘法和运算逻辑而对所需的浮点处理进行仿真。这种仿真需要额外的处理周期来完成。但是,当定点处理器内核的时钟进入到500 MHz - 1 GHz范围时,在对符合IEEE-754的浮点运算进行仿真时需要的额外周期就不那么重要了。为了降低计算的复杂性,可以使用IEEE-754的“松弛”版。这意味着浮点运算并不会实现像?和NaN这样一些标准特性。进一步的优化是对尾数和指数使用一个更为本机化的类型。举个例子,ADI公司的Blackfin定点处理器架构具有一个由十六个16位寄存器组成的寄存器组,而这个寄存器组还可以用作8个32位寄存器。在这种配置下,每个内核时钟周期内,两个32位寄存器可以从全
14、部四个半寄存器中获取操作数。为了优化Blackfin寄存器组的使用,可以使用一种双字的格式。这样,一个字(16位)被保留为用作指数,而另一个字 (16位)则保留给分数部分使用。 双精度定点仿真对于许多应用来说,16位定点数据是不够的,如果使用仿真浮点运算,那么计算量又太大。对于这些应用,扩展精度定点仿真也许足以满足系统的要求。使用一个高速定点处理器将确保有效降低所需的计算量。音频中两个常用的扩展精度格式是32位和31位定点表示。32位-精确仿真32位运算是16位定点处理器的自然软件扩展。对于那些32位寄存器组可以分为16位的两半而进行存取的处理器来说,这些两半的寄存器可以合起来用于表示一个32
15、位定点数。Blackfin处理器的硬件结构允许单周期32位加法和减法。例如,当一个32位乘法采用累加器迭代操作时(像我们马上就要讨论的有些算法情况),我们只需用3个周期内的16位乘法就可以实现32位的精度。两个32位操作数(R0和R1)中的每一个都可以分为16位的两半(R0.H / R0.L和R1.H / R1.L)。从图6可以容易看出,在使用16位乘法器的指令组合来对32位乘法R0 x R1进行仿真的时候,我们需要下面的操作:图6 用16位操作实现32位乘法* 四次16位乘法以产生四个32位结果1. R1.L x R0.L2. R1.L x R0.H3. R1.H x R0.L4
16、. R1.H x R0.H* 三次操作以保持在最终结果中数位的位置(符号>>表示右移)。由于我们正在做分数运算,所以结果是1.63(1.31 x 1.31 = 2.62,带有一个冗余的符号位)。在大多数情况下,这个结果可以截取到1.31,以便装入一个32位数据寄存器。因此,乘法的结果应该以符号位为基准,或者以最大有效位为基准。这样,那些最右边的最小有效位可以在截取操作时被安全地截取。1. (R1.L x R0.L) >> 322. (R1.L x R0.H) >> 163. (R1.H x R0.L) >> 16一个32位乘法的最终表达式(R1.
17、L x R0.L) >> 32 + (R1.L x R0.H) >> 16) + (R1.H x R0.L) >> 16 + R1.H x R0.H)在Blackfin架构中,这些指令可以并行执行,以实现在三个周期内完成一次32位乘法的有效速率。31位-精确仿真我们可以把最高要求31位精度的定点乘法的计算时间减少到2个周期。这个技术对于音频系统特别有吸引力,因为音频系统通常至少需要24位的表示法,而32位的精度也许有些过分。使用“6 dB规则”,31位的精确仿真仍然保持了大约186 dB的动态范围,即使考虑了所有的量化效应之后,这仍然具有非常充裕的余量。从图
18、6中的乘法框图来看,很明显的一点是,最小有效位半字的乘法R1.L x R0.L对最终的结果没有太大的贡献。事实上,如果把结果截取为1.31,那么这个乘法只影响到1.31结果的最低位。对于许多应用来说,由这一位引起的精度损失是通过减少一次16位乘法、一次移位和一次加法以加速32位乘法而得以平衡的。31位精确乘法的表达式为(R1.L x R0.H) + (R1.H x R0.L) ) >> 16 + (R1.H x R0.H)在Blackfin架构中,这些指令可以并行执行,以实现在2个周期内完成一次32位乘法的有效速率。所以,这是音频处理中使用的数据格式的“独家新闻”。在本文的最后一部
19、分,我们将介绍开发嵌入式音频应用的一些策略,主要聚焦于常用算法中的数据传输和构建模块。 音频处理方法 把数据送入处理器内核 把数据送入处理器内核有若干种方法。例如,一个前台程序可以对一个串行端口中的新数据进行查询,但这种传输方式在嵌入式媒体处理器中是不常用的,因为这样会降低内核的使用效率。 取而代之的是,与音频编解码器相连的处理器一般用DMA引擎把数据从编解码器的数据口(就像一个串行口)传输到处理器可用的某个存储空间内。这种数据传输是以后台操作的形式完成的,无需处理器内核的干预。这里的唯一开销是对DMA序列的设定以及一旦数据缓冲区的接收或发送完成之后对中断的处理。 块处理与样点处理 样点处理和
20、块处理是处理数字音频数据的两种方法。在样点处理的方法中,只要样点一出现,处理器就处理这个样点。这里,在每个采样周期中的处理操作都会有开销。许多滤波器(例如FIR和职,将在下面叙述)是以这样的方式实现的,因为这种方式的有效延迟会很低。 另一方面,块处理是基于把数据传送到处理函数之前对特定长度缓冲区的填充。有些滤波器是用块处理的方式实现的,因为这样比样点处理方式更有效。其中要说明的一点是,块处理方法大大降低了针对每个样点而调用处理函数的开销。而且,许多嵌入式处理器包含有多个ALU,可以对数据块进行并行操作。另外,有些算法从本质上就是以块处理方式操作的。其中一个大家都知道的是傅里叶变换(以及它的实际
21、使用的形式,快速傅里叶变换,或称FFT),这种算法接受时域数据块或空间域(spatial)数据块,然后把这些数据块转换成频域表示。 双缓冲 在基于块处理的、使用DMA与处理器内核进行数据传递的系统中,必须使用双缓冲,以便在DMA传输和内核之间进行仲裁。这会使处理器内核和独立于内核的DMA引擎不会在同一时间对同一数据进行访问,避免了数据一致性问题。为了对长度为N的缓冲区的处理进行改进,我们简单地产生一个长度为2×N的缓冲区。对于一个双向系统,必须生成两个长度为2 x N的缓冲区。如图1a中所示,处理器内核正在对in1缓冲区进行处理,并将结果存储在out1缓冲区中,而DMA引擎此时正在对
22、in0进行填充,并对out0中的数据进行传输。图1b指出,一旦DMA引擎完成对双缓冲区左边半个的操作之后,它就开始把数据传送到in1,并从out1取出数据,而此时的处理器内核正在处理来自in0的数据,并填入out0。这个结构有时被称为“乒乓式缓冲”,因为处理器内核来回地对双缓冲区的左右两半进行处理。 应该注意到,在实时系统中,串行端口的DMA(或者另一个与音频采样率关联的外围设备的DMA)规定了时序预算。基于这个原因,块处理算法必须以这样的方式进行优化,即它的执行时间要小于或等于DMA对双缓冲区的一半进行数据传输所需的时间。 二维(2D)DMA 当数据通过像12S这样的数据链路传输时,它可能会
23、包含多个声道。这些声道可以全是从一条数据线上通过复用而输入到同一个串行端口的。在这种情况下,2D DMA可以用来对数据进行解交织,从而使每个声道在存储器中是线性分配的。可以看一下图2中对这一安排的图示,其中从左右声道来的样点被解复用到两个分离的数据块。这个自动数据安排对于那些使用块处理的系统是极其有用的。 基本操作 在音频处理中有三个基本的构建模块。它们是加法操作、乘法操作和时间延迟。许多更复杂的效果和算法可以用这三个基本操作来实现。加法器显而易见的任务是把两个信号加在一起。乘法可以用于提升或衰减音频信号。在大多数媒体处理器中,可以在一个周期内完成多次加法和乘法操作。 时间延迟有点复杂。在许多
24、音频算法中,当前的输出取决于过去的输入和输出之间的组合。这种延迟效果是用延迟线实现的,而延迟线只不过是存储器中用来保持过去数据的一个数组。例如,一个回声算法可以对每个声道保持500 mS的输入样点。当前输出值可以用当前输入值与稍微衰减的过去样点进行相加后得到。如果音频系统是基于样点的处理方式,那么程序设计人员可以简单地跟踪一个输入指针和一个输出指针(两者之间保持500 mS样点数的间隔),并且在每个采样周期之后增加这两个指针。 由于延迟线要被随后的各组数据重复使用,因此,输入与输出指针将需要从延迟线缓冲区的末尾回绕到起始端。在C/C+中,这通常是在指针增加操作时再附带一次求模操作()完成的。对
25、于那些支持循环缓冲(见图3)的处理器来说,这个回绕操作不会增加额外的处理周期。在这种情况下,一个循环缓冲区的起始位置和长度必须只提供一次。在处理过程中,软件增加或减少缓冲区内的当前指针,如果当前的指针位置落在缓冲区的两个端点之外,则由硬件使指针回绕到缓冲区的起始位置。如果没有这个自动地址生成功能,程序设计人员就必须手动地保持对缓冲区的跟踪,因而会浪费有用的处理周期。 由延迟线结构可以引出一个叫做梳状滤波器的重要的音频构建模块,它本质上是一个带有反馈的延迟线。当多个梳状滤波器同时使用的时候,可以产生混响的效果。 信号的产生 在有些音频系统中,也许需要合成一个信号(例如一个正弦波)。泰勒级数的函数
26、近似法可以用来对三角函数进行仿真。而且,用均匀随机数发生器来产生白噪声是很容易的。 但是,合成的方法也许并不适用于某些给定系统的处理预算。在具有充足存储器的定点系统中,您可以取而代之地使用查表的方法来产生信号。这样做的负面效应是占用了宝贵的存储器资源,所以,作为一种折衷考虑,可以使用混合的方法。例如,您可以存储一个不太精细的函数表,以节省通过2D DMA进行采样解交织存储器。在运行时,准确的值可以用插值的方法从函数表中提取出来,而插值操作比使用泰勒级数近似法的时间大为缩短。这个混合法提供了在计算时间和存储器资源之间的很好的平衡。 滤波与算法 音频系统中的数字滤波器被用来对指定频带内的声波能量进
27、行衰减或提升。最常用的滤波器形式是高通、低通、带通和点阻。这些滤波器中的任何一种都有两种实现方法。这就是有限冲击响应(FIR)滤波器和无限冲击响应(IIR)滤波器,而且它们组成了搭建像参数均衡器和图示均衡器那样更复杂的滤波算法的构建模块。 有限冲击响应(FIR)滤波器 FIR滤波器的输出是由当前和过去输入之和确定的,而其中的每个输入样点首先要乘以一个滤波器系数。示于图4a中的FIR求和公式,也叫做“卷积”,是信号处理中最重要的操作之一。在这个公式的句法中,x为输入向量,y为输出向量,而h为滤波器系数。图4a表示了FIR的实现结构图。 卷积是在媒体处理中非常常用的操作,因而许多处理器都可以在一个
28、周期内完成一条乘累加(MAC)指令,同时还可以完成多个数据的访问操作(读或写)。 无限冲击响应(IIR)滤波器 与输出仅仅取决于输入的FIR滤波器不同,IIR滤波器则依靠输入和过去的输出。IIR滤波器的基本公式是一个差分方程,如图4b所示。由于当前输出对于过去输出的依从关系,IIR滤波器经常被称为“递归式滤波器”。图4b也给出了ILR滤波器结构的图示。 快速傅里叶变换 我们往往可以更好地描述音频信号的特性,那就是用频率组成。傅里叶变换以时域信号作为输入,并把信号重新安排到频域里,而傅里叶反变换则完成逆向的工作,把频域表示变换回时域。从数学上看,时域中的操作与频域中的操作之间存在一些很妙的特性关系。特别是,时域卷积(或者FIR滤波器)等效于频域的相乘。如果没有傅里叶变换这个特别的优化方法,即快速傅里叶变换
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 35609-2025绿色产品评价防水与密封材料
- 行政法学在数字政务中的应用试题及答案
- 高考语文常见问题解答试题及答案
- 材料力学与智能控制重点基础知识点
- 净化间火灾应急预案(3篇)
- 企业档案室火灾应急预案(3篇)
- 电力施工火灾应急预案(3篇)
- 软件工程中的亚文化现象试题及答案
- 领域经济的政策调控试题及答案
- 法学概论的国际化发展趋势试题及答案
- 《海底电缆工程预算定额(试行)》
- 马拉松方案策划
- 高处作业力学基础知识
- 幼儿园科学发现室环境布置设计方案
- 《企业的绩效管理问题与优化策略的分析案例-以舍得酒业公司为例9100字》
- 武装部面试题及答案
- T-NXS 0116T-2024 宁夏滩羊肉质量追溯标准体系构建应用技术规范
- 微弱的光亮(2024年山东烟台中考语文试卷记叙文阅读试题)
- 康复医疗评定课件
- 2025年浙江省金融控股有限公司招聘笔试参考题库含答案解析
- 交管12123驾驶证学法减分题库及答案(学法免分100题完整版)
评论
0/150
提交评论