FIR 数字滤波器分布式算法的原理及 FPGA 实现
摘要: 在利用 FPGA 实现数字信号处理方面,分布式算法发挥着关键作用,与传
统的乘积-积结构相比,具有并行处理的高效性特点。详细研究了基于 FPGA、采
用分布式算法实现 FIR 数字滤波器的原理和方法,并通过 Xilinx ISE 在
Modelsim 下进行了仿真。
关键词: 分布式算法 DALUT FPGA FIR
数字滤波器正在迅速地代替传统的由 R、L、C 元件和运算放大器组成的模块滤
波器并且日益成为 DSP 的一种主要处理环节。FPGA 也在逐渐取代 ASIC 和 PDSP,
用作前端数字信号处理的运算(如:FIR 滤波、CORDIC 算法或 FFT)。乘累加运
算是实现大多数 DSP 算法的重要途径,而分布式算法则能够大大提高乘累加运
算的效能。
1 传统的乘累加结构 FIR 数字滤波器基本理论
FIR 滤波器被称为有限长脉冲响应滤波器,与 IIR 数字滤波器相对应,它的单位
脉冲响应 h(n)只有有限个数据点。输入信号经过线性时不变系系统输出的过程
是一个输入信号与单位脉冲响应进行线性卷积的过程,即:
式中,x(n)是输入信号,y(n)是卷积输出,h(n)是系统的单位脉冲响应。可以
看出,每次采样 y(n)需要进行 L 次乘法和 L-1 次加法操作实现乘累加之和,其
中 L 是滤波器单位脉冲响应 h(n)的长度。可以发现,当 L 很大时,每计算一个
点,则需要很长的延迟时间。
2 乘累加运算的位宽分配
DSP 算法最主要的就是进行乘累加运算。假设采样信号的位宽用 N 来表示,则 N
位与 N 位的乘累结果需要 2N 位的寄存器来保存;如果两个操作数都是有符号数,
则乘积只有 2N-1 个有效位,因为产生了两个符号位。
为了使累加器的结果不产生溢出,需要对累加器进行冗余设计,也就是说要在
累加器 2N 的位宽上多设计出 K 位,累加器的长度 M 计算方式如下(L 为滤波器
的长度):
对于无符号数:M=2N+K=2N+log2 L
对于有符号数:M=2N=K=2N+log2 L-1