目前许多电子系统中都采用了各种算法。在系统中集成和评估一个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帧后收集样本并中断内核。 |