门关键词: windows组件iis dc电源插座 交流接触器原理 简单收音机电路图 重庆望江变压器 12v稳压电路图 正泰双电源切换开关
IC库存(8958万) PDF资料(329万) IC价格 IC求购 资讯 技术资料
电子元器件搜索:
维库电子市场网是知名的电子元器件交易网站,为电子生产企业提供IC库存和技术资料查询服务。
TMS320C5X教学目录 第九章 滤波器-延迟线的实现
新闻出处:中国DSP网 发布时间: 2007-11-15

延迟线的实现

由上一节所叙述的FIR滤波器,本节将来讨论如何使用‘C5x来发展出有效率的FIR滤波器模型。很显然的,FIR滤波器是在延迟在线的数值数组做积之和运算所得到。如同前面章节所叙述,使用’C5x来实现这项运算是非常容易的事情。但是,延迟线是要如何实现呢?

 

线性缓冲区

在微算机中,要实现延迟线最简单的方法是藉由线性缓冲区。而具有N Tap 的滤波器就在这数组中,操作最近的N个取样值。每运算一次,新的取样值就会被存到这数组的尾端。

使用这个方法时,单一个辅助缓存器能够在滤波器的计算中,以“递减”的方式移动经过这数组,并且当要再次计算之前可以移动到下一个空的位置去读入新的数据。

这个方法的优点是在他和‘C5x搭配使用时,他的效率很好,因为’C5x可以支持延迟线的实现。在‘C5x中,当执行积之和的运算时,AR可以自动的增加及减少,所以,所有’C5x皆可以非常有效率地来完成这项工作。

然而,它的缺点是,线性缓冲器会占掉很多的内存。每当取一个新的数据时便需要一新的位置。在连续系统中,取样的数据量是非常庞大的,使用这个方法将会占掉太多的内存,所以,这个方法在实际上并不实用。

 

环形缓冲区

一个解决线性缓冲区缺点的方法是利用环形缓冲区。假如在内存中,有N个区段构成一个圆形区段,我们将会有足够的空间来执行积之和的运算。每次运算后,新进的数据会将最旧的资料给取代掉。这样的话,内存内永远都是最近的N个取样的数据,这个方法不仅解决了延迟线的问题,而且也解决了占用过多内存的问题,所以,这是一个非常有效率的方法

图2 环形缓冲区

 

但是,很不幸的,环形内存在实际上是不存在的组件。然而,我们可以使用软件控制的方法,将实际的内存仿真成环形内存。

为了藉由软件去实现环形缓冲区,我们必须先设定这块区域的起始位置和结束位置供环形内存使用。并使用第三个指位器来存取这个范围的数据。每次当存取指位器改变时,我们就将指位器的数值和起始位置指位器及结束位置指位器做比较。不论存取指位器在增加或减少时经过结束位置指位器,就将它的数值设定为起始地址的数值。如此,环形缓冲器就可以正确地在标准的内存上被实现。

这个方法优点,如同前面所说的,可以将内存做很有效率的使用。而他的缺点是需要额外的时间去做这个结构的仿真。这样会使得他的效率降低,除非,你使用较快速的处理器,但是,所花费的成本也会因而提高。

 

‘C5x中的环形缓冲区

'C5X提供了一个环形寻址法的功能,可以解决在软件仿真时,所造成的效率损失。它提供了两个可以为任何容量的环形缓冲区。它是由内存映像缓存器中的CBSR 及CBER来指向环形缓冲区的起始位置及结束位置,另外,定义一个辅助缓存器(ARn)用来做存取指位器,我们可以经由下图来了解它。

 

 

图3 ‘C5x的环形缓冲区

要注意是,环形缓冲区的硬件是工作在一个特别的状况下。简单叙述如下,当所选择的ARn的数值等于CBER的数值时,任何ARn的改变都会使的处理器将CBSR的数值加载 ARn。也就是说,当ARn=CBER时,无论下一步ARn是增加或者是减少,处理器都会将ARn 设定为CBSR的数值。注意!这个方法只能用在ARn和CBER的数值互相吻合时。假如ARn 跳过结束地址时,两者之间没有吻合,也就是它并没有停在结束地址上面,那么,ARn 的数值就不会被设定为起始位置。此时,这个组件就不会正常工作了。因此,在设定步进的数值时要小心,如果你不是设定为一,那你就要小心这个情形的发生。

 

涟波缓冲区

在C5X中,我们也可以使用别种型式的缓冲区,那就是涟波缓冲区。涟波缓冲区就是将延迟线的数值放入一个直线中。每当执行一次运算后,数据就被以涟波的方式从一个位置移到另一个位置,如同讯号流程图所展现的方式。

但是在使用标准的处理器来实现它时,耗费在搬移数据的时间是相当可观的。对一个滤波器的每一级来说,它都需要使用LOAD以及STORE运算。在‘C5x中,是把每一个 LOAD和STORE运算结合成DMOV指令。用法如下:

DMOV <dma>

数值是从<dma>的位置被搬移到<dma>+1的位置。这个指令并不会在运算过程中影响到累加器和<dma>的数值。

这个方法还能更有效率的完成延迟线的工作,因为DMOV指令可以和LTA(load the temporary register and accumulate)指令结合成LTD指令,用法如下:

LTD <dma>

在LTD,MACD,及MADD指令中均包含有DMOV这个功能。

DMOV指令只在记忆区块0-2设定为数据存储器时才会去执行。假如你尝试要将用 DMOV用在外部内存的话,结果将会是,该位置的数据会被读取,但是写入的动作却不会被执行。

最后要注意的是,每当你要使用涟波缓冲器时,你必须要从最旧的数值处理到最新的数值。如果你是由最新的数值处理到最旧的数值的话,那么,这个过程就无法实现延迟的功能了,你所做的只是,复制最新的数值到整个延迟线而已。

 

环形缓冲器和涟波缓冲器的比较

在前面所介绍的方法中,哪一个才是用来实现延迟线最好的方法呢?涟波缓冲器所使用的场合是,当需要使用标准的延迟线而且记忆区块0-2被用来存放数据时。而当需要非标准延迟线时(如:在重新计算FIR系统输出时输入了大量的数据),或者是使用了外部内存时,你就要选择环形缓冲器。

 

 

 

关闭】 【打印
 
相关专题
 
友情链接:
© 2007 电子元件网 网站地图