DA运算法则如图3所示。所需的基础操作有:查表排序、加法、减法以及输入数据序列的移位。运用DA结构的前提是:输入抽样值必须要表示为2个补码并将其转换成一个比特串行形式。总共需要有N个B比特的移位寄存器,每个寄存器在一个时钟周期下产生1比特来生成一个用于查找表(LUT)地址(N比特宽)。LUT存储了所有滤波器系数状态可能的局部结果,这些局部结果在寄存器中进行加权(每个周期除以2)和累加,直到每个移位寄存器的最后一位为止。
由于脉冲成形滤波器有着对称的冲击响应,因此先把使用同一个脉冲响应系数的2个输入取样值进行相加,然后相继地把N/2个加法器的输出结果送入DA进行处理,如图4[4]所示。所以,LUT的个数也就从2N个减少到了2N/2个。
图5所示为通用的FIR成形滤波器结构框图。比较图4与图5后可以看出,运用DA结构可以在程序的编写过程中大量减少乘法运算,而乘法运算在硬件程序中往往是占用资源最大的部分之一。运用DA处理结构能大大减少硬件资源,并在很大程度上提高程序运算速度。
为了进一步减小LUT的个数,现在在过采样中引入零抽样值。设u(n)为过采样程序块的输出序列:
类推,应用u(n)后,48个抽头中的36个采样值将给定为零,这样就有一半的加法器输入为零采样值,并在每个时钟将零采样值传递到对应的乘法器。而另一半加法器的输入值中也只有一个是非零采样值。这样一来,在第一级就能减少24个加法器和一半的乘法器,也就意味着运算出一个输出采样值只需调用一半的滤波器系数。对一个码片速率输入采样值x(n)来说,经过运算得出4个输出采样:y(n)、y(n+1)、y(n+2)以及y(n+3),其中y(n)和y(n+3)需要调用的系数(组一)如下:h(0)、h(3)、h(4)、h(7)、h(8)、h(11)、h(12)、h(15)、h(16)、h(19)、h(20)、h(23);而y(n+1)和y(n+2)需要调用的系数(组二):h(1)、h(2)、h(5)、h(6)、h(9)、h(10)、h(13)、h(14)、h(17)、h(21)、h(22)。这样就可以完成如图6所示的实效DA。输入序列即为码片速率采样值,并且输出的数据是码片速率的4倍,每输入一个采样值可以得出4个输出采样值,内部时钟速率为4×B×码片速率。DA运行中,常用电路移位寄存器(CSR)来代替一个移位寄存器保存数据,直到每个芯片间隔运算出最后的输出采样值为止。一旦输入一个新的采样值,这些CSR就要更新一次。在芯片的持续时间中一共有4个循环,每个循环经历B个时钟并产生一个输出采样值。一个循环过后,CSR移位回归到初始数据,为下一个循环处理做准备,以生成另一个输出采样值。图6中的2个LUT分别存储了两组滤波器系数各自生成的局部结果。选择器是用来决定在每个循环中选择这两组输入分支的哪一组的,其中当高位LUT的结果在循环1和2输出,低位LUT结果在循环3和4输出的时候选择组一;当高位LUT的结果在循环1和4输出,低位LUT的结果在循环2和3输出的时候选择组二。累加器的寄存器在每个循环的起始都要进行清零。
四、设计