语音处理算法的集成与评估

11-19| http://www.dianzi6.com | 电路基础|人气:704

语音处理算法的集成与评估

  从零开始设计和开发一个稳定的嵌入式系统通常极具挑战性。而集成和*估数字信号处理(DSP)算法与系统同样很棘手,甚至让那些编程高手也束手无策。当前有无数的算法被集成到各种电子系统中。嵌入式系统开发工程师如何才能知道哪个算法适用于语音处理,比如基本的电话系统中的语音处理呢?

  延伸到40kHz的音频频谱被划分为两个频段。语音分量占用频谱的较低部分,从5Hz到7kHz,其他音频分量占余下的高频部分,如图1所示。

  语音处理主要涉及压缩-解压缩、识别、调整和增强算法。信号处理算法非常依赖于系统资源,例如可用的存储器和时钟性能。由于这些资源会增加系统的成本,因此产品提供商通常都限制这些资源,以降低产品成本。一些基本特性,例如存储器和时钟消耗是算法复杂性的必然部分。复杂性越低,算法越优,其实现的功效就越高。

  在*估一个算法时,测量算法的复杂性是第一步。在特定处理器上运行算法所要求的时钟决定了处理能力,它取决于架构,不同的处理器架构其处理能力是有变化的。而算法的存储器需求明显不会改变。绝大多数的DSP算法对一组样值进行处理,这样的一组样值称为一个帧。一组样值组成一个帧将不可避免引入延迟,并产生处理延迟。国际电联(ITU)规定了每种算法的可接受延迟标准。

  算法的处理能力通常用“每秒百万时钟”来表示,或者MCPS。为了更好地理解MCPS,可以假设某个算法以8kHz的频率处理6?个采样帧,处理每个帧需要300,000个时钟。那么收集一个帧的时间为6?/8,000或8ms。通过简单的算法可以得出每秒可以处理125个帧。当算法处理所有的帧,它至少占用内核每秒300,000*125 = 37,500,000个时钟,或者37.5MCPS。

  另外一种表达MCPS的方式是,它等于(处理一个帧所要求的时间乘以采样频率再除以帧大小)再除以1百万。

  通常用来定义算法处理能力的第二个术语是MIPS,或百万指令每秒。计算某个算法的MIPS也比较复杂。如果处理器每个时钟周期能有效地执行一个指令,每个处理器的MIPS和MCPS是相同的。另一方面,如果处理器的架构需要超过一个周期来执行一个指令,则MCPS和MIPS之间存在一个比例。例如,一个ARM7TDMI处理器实际上每个指令需要1.1个周期。


  图1:音频频谱图。

  在进行集成之前

  在任何嵌入式系统上开始集成和*估任何语音算法的最佳时机是当系统处于一个可预测或稳定的状态时。‘稳定’意味着音频前端的中断结构是一致的。换言之,当保持一个合适的幅值时,甚至不会丢失一个数据字节。拥有可用系统存储器和时钟的统计数据是非常明智的。在一个工作稳定的现有系统上集成一个算法相对较简单。如果系统正在开发中,试图在这个系统上集成和*估任何算法之前需要彻底对音频前端进行测试。而且,要验证在系统内没有中断发生相互冲突。如果系统中存在任何问题,算法的调试将是非常痛苦的体验。

  在将要集成音频/语音算法的系统中,音频固件必须是稳健的,它必须为算法提供准确的数据才能使算法得以有效地执行。工程师常常犯的一个简单错误是在每个样值到来时中断内核。如果算法只是对一个帧的某些固定样值进行处理,那么其他的中断将是多余的。可以通过配置直接存储器存取(DMA)和内部FIFO来在整个帧收集完成后再中断内核。

  实例算法

  当开发任何电信系统时,工程师通常用脉码调制(PCM)编解码器(即G.711标准)进行语音质量的测试。这种窄带编解码器将样值幅度限制在8bit的精度,并产生6?kbit/s的吞吐量。编码器和解码器可能会对每个数据样值进行处理。它是一种非权重算法,复杂度很低,几乎没有处理延迟,工程师可以选择利用编解码器来进行播放、验证系统,更重要的是彻底*估音频前端设计。工程师可以检测信号电平,调整硬件编解码器增益,同步近端和远端中断,验证DMA功能,以及使用这种基本的电话标准成功进行其他试验。在这个过程中,如果发现从另一端接收到的压缩数据是比特反序的,请不要觉得奇怪。一段反序代码就能解决这个问题。

  任何宽带语音编解码器都是较多占用存储器和时钟资源的语音算法的一个实例。子带ADPCM(自适应差分脉码调制)算法就是其中之一,相应标准是 G.722。它对16kHz采样的数据进行处理,因此覆盖了整个语音频谱。它保留了未发声的频率分量―那些存在于4到7kHz的分量―从而提供了高质量的自然语音。在任何编解码器集成到系统之前,强烈建议认真测试。尽管G.711编码和解码可以逐个样值进行测试,但涉及到滤波和其他频域算法的编解码器测试是完全不同的,它需要采用至少有数千个样值的数据流。编解码器的验证让工程师忙于利用ITU向量进行单元测试、信号电平测试以及与其他可用编解码器的可互操作测试。对于系统集成工程师来说,与在发送之前将编码后的数据字节编成16比特的字以及信号电平的失配相关的互操作问题都不是新的问题。

  这里讨论的算法未必是系统工程师可能会集成的算法,因为这些算法需要更多的系统存储器和时钟周期。处理器增强型算法的其他实例包括回声消除算法、噪声抑制算法以及维特比算法。对这些算法的性能*估并不像语音编解码器那样简单。

  通常,任何涉及到免提或扬声器模式的电信系统都采用了声学回波消除算法来避免听到自己的回声。如果在嘈杂的环境中采用,还需要采用噪声控制算法。回声消除-噪声抑制(ECNR)需要大量的系统存储器和时钟。有多种时域与频域技术可用来减轻声学回声问题,如表1所示。


  表1:前面四行表明频域技术优于时域技术,后面四行支持时域技术。

  事实证明频域方法更有效,因为它的运算成本较低。这种方法采用自适应FIR滤波器,它只在当残余回声误差大于门限值时才更新其系数。从输入信号中减去估计的回声将产生误差。来自第二方的信号被用作这些算法的基准来估计回声。需要为算法提供适当的基准才能取得良好的回声估计和消除。

  另外一个因素是回声尾部长度,它是以毫秒为单位的回声反射时间。简单而言,它是回声形成的时间。该因素取决于环境的维度。尽管详细的滤波器设计是一个很复杂的话题,但选择滤波器的长度并不太复杂(见表2):

  滤波器长度= 回声尾长×采样频率


  表2:说明了数据以8kHz采样时尾部长度与回波覆盖距离以及滤波器长度要求之间的关系。

  任何回波消除(EC)实现的基本要求是支持最低16kHz的采样数据,以确保能涵盖16kHz的宽带语音。将EC与宽带语音编解码器集成需要更加小心,因为回波尾长取决于采样频率,采样率为8kHz的数据需要72ms的EC才能有效地消除回声,当用于16kHz采样数据时,只能消除一半。因此,工程师发现将半有效的EC与宽带编解码器集成是一个双倍挑战的工作。噪声消除方法也已经使用了多年。针对不同的应用,方法的选择、实现和应用也不同。例如,某种方法可能将噪声视为比人声更加固定。算法将建立噪声模型,然后从输入信号中减去噪声。噪声降低的大小按分贝来度量。对于很多应用来说10到30dB的衰减就很不错。

  本文所述应用中的EC尾长要求大约为50ms,要求的噪声抑制水平在12到25dB之间,具体取决于噪声属性以及期望的输出语音质量。通常,噪声消除越多,越有可能损失语音质量。因此,动态选择大小将能提供一个合适的噪声消减量,同时依然保持足够的语音质量。对于这种应用的ECNR组合可能需要高达15到20kB的系统存储器。每个6?采样帧的处理可能耗用150,000到300,000个时钟,具体数据取决于处理器。

  ECNR组合的性能*估可能非常麻烦。通常可以通过调节硬件编解码器的增益,调整麦克风和扬声器的位置,发现远端和近端语音和中断的同步,发现具有线性属性的音频硬件,试验不同的EC尾长和NR电平来获得最佳可能的回声消除和噪声抑制性能。

  在*估任何算法的复杂性的同时,初学者需要考虑最糟糕的情况,这很重要。算法的执行时间对于不同的帧来说可能不同。这种数据依赖性源于这样一个事实,即一个处理器相乘两个具有较高幅值样值所需的时间要比相乘两个幅值较低样值的时间长。

  可能受自适应算法误导的一个实例是,当滤波系数未被更新时,所占用的周期将较少。滤波器数据的适配可能需要数千个时钟周期,因此很明显在分析MCPS测试时,需要考虑这一点。然而,不要仅仅依赖于算法,要尝试不同的向量来发现最准确的MCPS和性能度量。

  数据位和数据片的收集

  本文讨论的算法足以实现基本的电话系统。当系统具有一个以上增强算法时,需要调用的算法序列会有些不同。一些语音算法,例如噪声消除算法,可能给其输出带来非线性属性,这会降低其他算法的性能。这样的算法必须放在语音增强处理过程的最后执行。



   如果觉得 语音处理算法的集成与评估这篇文章不错,可以推荐给朋友分享哦。
本文Tags:电子电路基础,模拟电路基础,电路基础,
相关电路基础资料


温馨提示; 本站的资料全部免费下载,为方便下次找到本站记得将本站加入收藏夹哦,牢记网址http://www.dianzi6.com

此页提供语音处理算法的集成与评估电子电路基础,模拟电路基础, 电路基础参考。本站还有更多的电路基础相关资料分享。
Copyright© www.dianzi6.com Inc. All rights reserved 。 1 2 3 4 5 6 7 8