微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM7 TDMI的SoC语音处理系统的设计

基于ARM7 TDMI的SoC语音处理系统的设计

时间:07-14 来源:互联网 点击:

本设计采用“双Buffer”机制缓冲数据。“双Buffer”是指:开辟两个帧缓冲区为Buf0、Buf1,缓冲标志Flg初始为0。编码时,采样第1帧数据,DMA从AC97输入FIFO向Buf0传输数据,传输完后,设置Flg=1,编码器从Buf0中取数据编码;同时,DMA向Buf1中传送新数据。周而复始,每帧数据采样完,设置Flg=!Flg,编码器从Buf!Flg缓冲区取数据编码,DMA传送采样数据的目的地址为Buf Flg,从而实现了第K+1帧数据采样和第K帧数据编码并发。只要编码速度高于采样速度,就不会出现数据的覆盖。处理过程如下(解码时的情况类似):

  Flg=0;
  Psmp=Buf Flg;
  Run_Sample(Psmp);//采样第1帧数据
  While(1) { 
    Flg=! Flg;
    Penc=Buf !Flg;//编码指针指向缓冲区Buf !Flg
    Psmp=Buf Flg;//采样指针指向缓冲区Buf Flg
    Run_Sampler(Psmp); Run_Encoder(Penc); 
             //启动采样器和编码器,两者并发
  }

  4、性能优化

  语音处理的实时性要求很高,否则,若数据处理速度跟不上语音变化速度,就会在录音时出现刚采样的数据覆盖了先采入但未处理的数据;在放音时,出现播放的速度比实际语音慢。当然,如果用足够大的缓冲,可以避免录音出现的问题,但放音出现的问题是无法避免的。同时,鉴于存储资源对于嵌入式系统是很宝贵的,故此方案没有实际价值。上文介绍的“双Buffer”机制,能够使采样和编码之间、解码和播放之间分别互不影响、并发执行,易于控制;但要满足实时性要求,还要使编解码速度符合采样和播放的要求。语音速率是8 KB/s,而系统中一个采样点用16位表示,故编解码速度不能低于16 KB/s(即每秒至少编码16 KB的PCM码,每秒至少解出16 KB的PCM码)。表1是未对系统优化前,测试裸机无操作系统情况下,处理512 KB的PCM码(对应128 KB的ADPCM码)所用时间。该测试是使用SoC内部定时器TIMER进行的,见参考文献[1]。测试结果显示,系统优化前没有满足语音实时性要求。


表1 优化前编解码速度

  到此,系统目标代码都是在SDRAM中运行的。SEP3203提供了一个很有用的模块——片内高速存储器eSRAM。eSRAM存取速度非常快,可达到0.89 MIPS/MHz,所以对系统性能有很大的优化作用,而SDRAM却只能有其性能的1/3左右。表2是在50 MHz时钟、32位ARM指令情况下,SDRAM和eSRAM的性能比较。各项指标的意义见参考文献[1]。


表2 eSRAM和SDRAM性能比较

  但是,SEP3203的20K的eSRAM资源是有限的,不可能也不必要将所有代码都放在其中执行。ARM集成开发工具提供了Profile功能,可以对整个程序进行统计分析,得到各部分代码(主要以标准C函数为单位)所耗时间占系统总时间的百分比。通过对软件系统做Profile分析,得到各编解码库函数在总编解码时间内所占的百分比,其中主要部分如表3所列。


表3 最耗费时间的库函数

  以上三个函数在总编解码时间内占用了近80 %的时间(Quan()、Fmult()、Update()的功能分别为量化表查找、定点化的浮点数乘法、状态变量更新),对这些代码优化就会明显提高编解码速度。把这些函数代码整合到文件rec_esram.c中,然后加载remap.scf文件进行内存映像(*.scf文件是ARM ADS集成开发工具提供的链接脚本文件)。下面是remap.scf文件的内容:
  FLASH 0x30002000 0x1000000
  {
    FLASH 0x30002000
            //系统初始化入口及其他代码存放地址
    {
      init_ice.o (INIT, +First)
      * (+RO,+RW,+ZI)
    }
    32bitRAM 0x00000000 //中断向量表入口地址
    {
      boot_gfd.o (BOOT, +First)
    } 
    ESRAM 0x1fff0000 0x600 //核心库代码存放地址,在eSRAM中
    {
      rec_esram.o (+RO,+RW,+ZI)
    }
    /*堆栈设置部分*/
  }

  进行内存映像后,rec_esram.c的目标代码rec_esram.o(约为1.5KB)就加载到eSRAM(起始地址为0x1fff0000)中执行了。表4是经过eSRAM优化后编解码速度测试结果。


表4 eSRAM优化后的编解码速度

  在有操作系统的情况下,也对语音系统性能进行了测试,如表5所列。该操作系统为东南大学专用集成电路系统工程技术与研究中心自主研发的面向嵌入式应用的ASIXOS,提供图形用户界面、网络、时钟、实时中断管理等支持和清晰的应用程序开发接口。语音系统为该OS环境中的一个应用,有独立的用户界面和底层服务。限于篇幅,本文不再详述。

从以上测试可以看出,在经过eSRAM优化后,无论是在裸机上还是

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top