首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

嵌入式系统语音算法简介[转帖]

嵌入式系统语音算法简介[转帖]

目前许多电子系统中都采用了各种算法。在系统中集成和评估一个DSP算法对于程序员来说其困难是不言而喻的。为简化这种复杂的技术,本文先从相对简单的一个实例开始分析。

可扩展到40kHz的音频频谱分为两个频段,语音部分占5Hz至7kHz的低频段,音频部分占高频段(图1)。

语音处理主要包括压缩/解压缩、识别、调理和改善算法。信号处理算法与存储器容量和时钟频率等系统资源有关,这些资源直接关系到系统的成本,因而通常会受到制约。

测试一个算法的复杂程度是分析该算法的第一步,包括考虑所需的时钟,并确定该算法的处理负荷,这种负荷根据所采用的处理器有所不同。不过所需的存储器不会因处理器而变化。








图1


多数DSP算法会受到样本采集的影响,如我们所熟知的帧(图1),由于除处理延迟外还存在帧的采集,因此就不可避免地增加了延迟,国际电信联盟(ITU)对于一个算法的延迟有着严格的规范。

图1 音频频谱中,基本的电话音质最高频率在4kHz,高质量的语音可达到7kHz,后面是CD音质的音频。

一个算法的处理能力通常以每秒几百万时钟来描述(MCPS),即算法所需内核每秒发出的时钟数量。假设一个算法以8kHz处理1帧的64个采样点,处理每帧需要300,000个时钟,则采集1帧所需的时间为64/8000或8ms。因此在1秒内可以采集125帧,处理全部帧该算法需要的时钟数量为300,000 × 125 = 37,500,000,可表示为37.5MCPS。简而言之,所需的MCPS可表示为

MCPS = (执行1帧所需的时钟数量 × 采样频率/帧的大小)/1,000,000

还有另外一个参数可用于表达算法的处理能力—MIPS(百万指令/秒)。算法的MIPS估算较为复杂,如果处理器在一个时钟周期内能有效地执行一条指令,则MCPS和MIPS的比率相当。Analog Devices的BlackFin就是这种处理器,否则,若处理器执行一条指令需要不只一个时钟周期,那么MCPS和MIPS的比率就存在差别。例如ARM7TDMI处理器平均每条指令的执行时间需要1.9个时钟周期。

对于任何算法来说存储器一般都分为代码(只读)和数据(读/写)两种,所需的存储容量可通过编译源代码来确定。算法在采用最快的存储器时才可达到最佳性能,这通常是指内核内部的存储器。

集成的条件

只有当系统处于可预知和稳定状态时,才能在嵌入式系统上实现对语音算法的集成与评估。“稳定”意味着音频前端的中断结构是合理的,最好还能提供系统存储器和时钟的所有统计指标。

现在就在一个系统上集成一种算法还稍早些。如果系统还处于开发阶段,那么最好在集成评估算法之前先彻底测试一下音频前端。在这个系统内部还必须验证所有中断彼此之间没有冲突,若存在这种问题,调试就会成为一个痛苦的经历。

在一个即将集成音频/语音算法的系统中,具有鲁棒性的音频固件是必要的,必须给算法足够的时间和精确的数据来实现其功能。一个常见的错误是在每个采样到达时中断内核。如果该算法仅以固定数量的采样点来处理帧,则其它的中断就是多余的。DMA和内部FIFO可以在采样1帧后收集样本并中断内核。

我的博客:http://blog.eccn.com/u/qianmin/index.htm
静静等待春天的到来! 
算法实例

开发任何通信系统时,工程人员通常先采样脉冲编码调制的编解码器(如G.711)测试语音质量。这种窄带编解码器将采样长度限制在8位精度和64kb的吞吐量上,其编码器和解码器均采用简单的算法进行数据处理,因而几乎没有处理延迟,为设计人员在使用算法和验证系统之间提供了选择。

采用这种基本的电话标准可以完成检查信号电平、调节硬件编解码器增益、同步近/远端中断,验证DMA功能以及其它实验。在此过程中接收的压缩数据是以位倒序(bit-reversed)形式实现的,简单的位倒序编码利于回到预期的状态。

任何宽频语音编解码器作为语音算法使用时都将消耗很多的内存和时钟资源。一个实例是子带ADPCM(自适应差分PCM)或G.722,工作在16kHz的数据采样率下并覆盖了全部语音频谱,它保留了无声部分的频率(4至7kHz),提供了高质量的自然语音。
[upload=image/gif]uploadImages/2543.gif[/upload]
在编解码器集成到系统中之前,建议设计人员必须仔细测试。G.711的编码和解码可以逐样本进行测试,包括滤波器和其它频域算法的编解码器要分别采用至少几千个样本进行测试。编解码器的验证可使设计人员采样ITU矢量进行单元测试、信号电平测试以及与其它编解码器的互操作性测试。互操作性问题关系到信号电平发送和失配前在16位字中安排编码数据的问题。

消耗大量内存和时钟的算法对系统有很大冲击,高计算强度的算法包括回声消隐、噪声抑制和Viterbi算法等。评估这些性能并非像语音编码那样容易。

一般情况下,具有免提(hands-free)或扬声器模式的电信系统都采用声学回声消除器以防止听到自己的回声。如果工作在噪声环境中还需要噪声控制算法。回声消除器-噪声衰减器(EC-NR)需要占用系统大量的存储器和时钟周期。时域和频域技术有助于解决回声问题,已经证明频域技术只需消耗很少的计算成本而且更加有效(表1)。

频域技术采用一个自适应FIR滤波器,只有当残留回声错误大于某阈值时才调整其系数。从输入信号中减去待估算的回声得到错误信号,远端信号作为算法估算回声的参考。为获得好的回声估算和消除效果需要提供一个适当的参考。

另一个因素是回声尾长,这是毫秒级的回声反射时间,即回声形成所需的时间。滤波长度基于回声尾长乘以采样频率而定(表2)。

[upload=image/gif]uploadImages/653.gif[/upload]
我的博客:http://blog.eccn.com/u/qianmin/index.htm
静静等待春天的到来! 
对纠错(EC)功能所必需的基本要求之一是支持数据采样率至少为16kHz,以确保覆盖全部宽频语音。在宽频编解码器中集成EC功能需要注意一些问题。由于回声尾长依赖于采样频率,8kHz数据采样下消除72ms的回声仅相当于消除16-kHz采样率下回声的一半,相对于8kHz来说采样1帧只需要一半时间。因此工程人员会觉得在宽频编解码器中集成一个半效EC更加困难。设计人员通常采用提高内核的频率来实现对16kHz采样率下的系统EC管理。

噪声衰减技术已应用了多年。根据应用不同,所选择的方法各异。例如某个技术可能认为噪声比人的声音更加固定。这种算法会对噪声建模并从输入信号中将其提取出来。10到30dB的衰减对某些应用而言非常重要,常规采用EC噪声衰减的应用通常是,手机在噪声环境下置于扬声器模式,或在汽车中的免提模式下(图2)。

[upload=image/gif]uploadImages/57864.gif[/upload]

免提应用的EC尾长约为50ms,根据噪声属性和期望的声音质量NR(噪声衰减)可在12至25dB间变化。通常,噪声衰减越高,提高语音质量的危险也越大。因而可动态选择一个电平来产生合理的衰减,同时保持适当的语音质量。

EC噪声衰减需要多达15至20KB的系统存储容量。对每个64采样点构成的帧进行处理要消耗1.5至3.0M个时钟(根据处理器有所不同)。评估这种组合性能是不容易的,步骤包括调整硬件编解码器增益、寻找恰当的麦克风和扬声器位置、确定远端和近端语音与中断的同步、确定具有线性属性的音频硬件、测试各种EC尾长和噪声衰减级以实现最佳的回声消除和噪声衰减等。

评估任何算法的复杂度时考虑到最坏的情况非常重要。一个算法的执行时间对于不同的帧可以改变,这是由于处理器增加两个更高幅度的样本比增加较低幅度样本需要更多的时间。

如果仔细观察几个帧所消耗的的时钟时,可以发现自适应算法实际上名不副实,因为滤波器的系数并没有更新。因此需要考虑到自适应滤波数据要占据数千个时钟。所以需要注意,不要过于只依赖算法。采用多种矢量的实验会有助于增加MCPS的精度何性能测试。

位和块的采集

对算法的讨论于建立一个基本电话系统十分有用。当系统具有不只一个算法时,调用算法的顺序非常关键。几种语音算法(如噪声抑制)会对输出带来非线性的变化,这就可能对其它算法的性能产生不利影响。因而这类算法必须放在语音增强处理的最后一个模块当中。

关于作者

Nitin Jain就职于MindTree Consulting(Bangalore, India)公司研发部门,拥有电子和通信工程学位,联系方式nitin_jain@mindtree.com。

作者:Nitin Jain, MindTree Consulting
我的博客:http://blog.eccn.com/u/qianmin/index.htm
静静等待春天的到来! 
返回列表