网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> 服务导航 >> 帮助中心 >> C5000 >> 文章正文
  延时音效的数据存取           ★★★ 【字体:
延时音效的数据存取
作者:Free    文章来源:本站原创    点击数:    更新时间:2008-2-29    

许多声音效果都基于延时,例如合唱(Chorus),回声(Echo),混响(Reverberation)等等。它们共同的特点就是都需要很大的存储空 间来保存最近的一段声音片断。以双声道16bit、44.1kHz的声音信号为例,如果要保存最近的0.5秒的声音信息的话,则需要88.2kB的存储空 间。DSP的内存通常都是很珍贵的,用来存放声音当然不划算,所以一般都把延时用的声音信号储存在扩展内存中(SDRAM或SRAM)。然而扩展内存的存 取速度却比DSP的内部内存慢得多,如果直接通过程序来存取扩展内存的话,将会浪费很多MIPS。这样在内存和效率上就产生了矛盾。

以前我在 C5416DSP上实现一个混响效果,每计算一个数据需要对扩展内存进行14次读操作,2次写操作,双声道的混响则需要存取32次扩展内存,一次存取扩展 内存大约需要10个DSP时钟周期,这样单单存取扩展内存一项就需要14MIPS。为了减少存取扩展内存所带来的消耗,我决定采用DMA来进行扩展内存的 存取。在每次混响计算结束之后,就启动DMA把下一次计算所需要的数据全部复制到内部内存中,并把这次计算的结果保存到扩展内存。然而5416的DMA不 能自动地支持这样复杂的复制工作,因此为了完成这32块内存的复制工作,我只能响应DMA中断32次,在每次中断时,设置下一次DMA的源地址和目标地址 (最后一次中断只是简单地停止DMA)。由于混响运算全部在内部内存上操作,因此内部内存的消耗也是很大的。我的混响程序每次处理64个数据,因此需要 64*32=2048words的内部内存。为了节省内存当然可以把每次处理的数据量减少,然而因为处理一次数据,就得为准备下一次的数据响应32次 DMA中断,若减少每次处理的数据量,将会增加DMA中断的频率。结果仍然产生了内存和效率的矛盾。

最近学习C6727,发现它的dMAX的FIFO模式彻底解决了上述问题。它可以在不产生中断的情况下连续地复制间隔的内存块,如果C5416有这个功能的话就不需要相应32次中断了。剔除了中断对DSP的影响之后,减少每次处理的数据量也不会带来额外的负担。
关于dMAX在这方面的应用的详细信息请参照:
http://www-s.ti.com/sc/psheets/spraaa5/spraaa5.pdf
http://www-s.ti.com/sc/psheets/spraaa5/spraaa5.zip

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号