多通道滤波器被用来对多个输入数据流进行滤波,在通信、多媒体等领域被广泛使用。多通道的主要优势在于可以在输入数据流(通道)采样率较低的情况下,使用速度很快的运算单元。本节讲述了如何实现一种应用较广的DSP——多通道FIR滤波器的实现。
6.6.1 滤波器组的基本概念
滤波器组是指一组滤波器,它们有着共同的输入,或有着共同的相加后的输出,如图7-35所示。

图6-35滤波器组示意图
信号
经过分析滤波器组后,变成一个个子带信号,最理想的情况就是各个子带信号没有重叠。但在实际中,是不可能实现这种情况的,各个子带信号
相互之间会有不同程度的混叠。接着,综合滤波器组将N个子带信号综合为单一信号。设计滤波器组最重要的就是综合应用
来抵消混叠失真。
将
分成N个子带信号后,每个子带信号的带宽是原来的 ,因此,信号的速率(采样率)可以降低N倍。这样在实际应用中,为了其后处理系统的处理方便,应当需要在分析滤波器组后面加上一个N倍的抽取器。而在综合滤波器组后,又希望重建后的信号
等于原信号
,那么应当使二者的速率相等,因此,在综合滤波器组之前还需要一个N倍的插值器。整个完整的N通道滤波器组如图7-36所示。所以,分析滤波器组一方面将原信号分成子带信号,另一方面是作为抽取前的抗混叠滤波器;综合滤波器一方面重建原始信号,另一方面消除插值后的镜像。

图6-36 N通道滤波器组系统
从图6-36中可以看出,我们关心的处理系统所处理的信号速率仅为原信号的
,能大大减小系统实现的复杂度,并降低硬件的代价。从本质上讲,滤波器组是FPGA设计中串并变换思想的完美体现。
区别不同滤波器组的一个重要特征就是通道数、带宽和各个滤波器中心频率之间的间隔。从通道数上可以将滤波器组分为双通道滤波器组和多通道滤波器组;根据带宽可以分为均匀带宽滤波器组和非均匀带宽滤波器组。从实现的角度讲,更倾向于均匀带宽滤波器组,因为其信号速率是一样的,便于处理;而且可以借助于FFT算法来实现
6.6.2 多通道FIR滤波器的基本原理
双通道滤波器组是最基本的滤波器组,如图7-37所示,输入信号
经过一个包含有滤波器
的双路分析滤波器组,它们分别具有典型的低通和高通频率响应。此时经过滤波器组的两个信号,其带宽都近似为原来的1/2。这样就可以进行2倍抽取,得到采样率为输入信号一半的
。但由于滤波器的过渡带不为零,因此抽取后存在着部分混叠。

图6-37 双通道滤波器组
对于M通道滤波器组,如果M是2的幂,那么可以用两通道滤波器组的级联实现M通道滤波器组。具体方法就是将各通道的输出作为下一个滤波器组的输入。通常把这种滤波器组称为树形结构QMFB的滤波器组。这种实现方式的缺点是:计算量较大,存储量大,时延交大,同时通道数只能是2的幂;它的优点是:可根据两通道滤波器组特性推断M通道滤波器组的特性(如,是否能够完全重建)。
树形结构的QMFB可以等效为平行结构的QMFB。信号可以用其低频成分作粗略的近似,而以其高频部分做细节的补充,树形结构QMFB恰好在这一点上具有很好的特性。
平行结构M通道QMFB在输入端将原
分成M个子带信号,在输出端将这些M个子带信号综合,总的输入输出关系为:
( 6-6)
式中
(6-7)
用矩阵形式表示![]()
(6-25)
式中
称为混叠分量矩阵,简称AC矩阵。
若在输出
中除去混叠影响,式(6-21)写成两部分,即:
( 6-8)
使其中
的部分为0,即
,这样输出信号就不含混叠成分,式(7-24)变为:
(6-9)
式(6-24)中
引起的失真称为混叠失真,为消除混叠失真,设计
配合
使
。此时
之间的差别都是由
引起的,所以称
为失真传递函数。
6.6.3 多通道FIR滤波器组的FPGA实现.6.3 多通道FIR滤波器组的FPGA实现
以双通道为例,正交滤波器组满足共轭镜像滤波器的条件,即 。其分析和综合滤波器组都有两个实现方法:第一就是采用转置FIR滤波器结构,需要的乘法器个数为阶数N的一半,但这是通过多相分解获得的好处,其处理速率仍然保持不变;另外一种就是采用格型滤波器来实现,图7-38给出了N阶分析滤波器组的网格结构图。

图6-38 交双通道分析滤波器组的格形结构图
例7-5 使用Verilog实现一个2阶的格形双通道正交分析滤波器组,假设数据位宽为16比特,分析滤波器的系数为:
![]()
1)将系数量化为16比特得到:
![]()
2)然后用Verilog实现所要求的正交分析滤波器组,程序分为顶层模块filter_bank.v和基本的格形单元trellis_unit.v。
(1)顶层模块filter_bank.v
module filter_bank(clk_32MHz, reset, x_in, y_out1, y_out2);
input clk_32MHz;
input reset;
input [15:0] x_in;
output [15:0] y_out1;
output [15:0] y_out2;
wire [15:0] coe1 = 5138; //量化后的滤波器系数
wire [15:0] coe2 = 28718;
//调用格形滤波单元的子模块
trellis_unit trellis_unit1(
.clk(clk), .reset(reset), .coe(coe1),
.x_in1(x_in), .x_in2(x_in), .y_out1(y1), .y_out2(y2));
trellis_unit trellis_unit2(
.clk(clk), .reset(reset), .coe(coe1),
.x_in1(y1), .x_in2(y2), .y_out1(y_out1), .y_out2(y_out2));
endmodule
上述程序经过Synplify Pro综合后,得到如图7-39所示的RTL级结构。可以看到,格形结构非常便于硬件设计,只需要设计一级格形单元就可以搭建出整个模块。

图6-39格形双通道正交分析滤波器组的的RTL结构图
(2)格形单元trellis_unit.v
module trellis_unit(clk, reset, coe, x_in1, x_in2, y_out1, y_out2);
input clk;
input reset;
input [15:0] coe;
input [15:0] x_in1;
input [15:0] x_in2;
output [15:0] y_out1, y_out2;
reg [15:0] x_t2;
always @(posedge clk) begin
if(!reset)
x_t2 <= 0;
else //作一级寄存
x_t2[15:0] <= x_in2;
end
//完成格形运算
assign y_out1 = x_t2[15:0] - x_in1[15:0]*coe[15:0];
assign y_out2 = x_in1[15:0] + x_t2[15:0]*coe[15:0];
endmodule
上述程序经过Synplify Pro综合后,得到如图7-40所示的RTL级结构。

图6-40格形滤波单元的RTL结构图
本章小结
本章首先介绍了数字信号和数字信号处理的基本理论。其次介绍了快速傅立叶变换的原理和Xilinx公司的IP Core以及XtremeDSP功能模块。接着重点介绍了几类常用的滤波器:累加结构的FIR滤波器和(半)并行FIR滤波器,分析了它们的实现结构和用途,给出了相应的硬件代码。最后,介绍了滤波器组的基本概念,给出了相应的Verilog实现。希望读者通过本章的学习能够初步掌握数字信号信号处理这一广阔领域的基础知识和应用原则。


