首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

数字滤波器输入输出的设计与实现(2)

数字滤波器输入输出的设计与实现(2)

滤波器加窗
使用截断脉冲响应不能提供最佳性能数字滤波器,因为它不能展示任何理想的特性。因此设计人员可采用视窗函数来改善滤波器的通带纹波、滚降以及阻带衰减性能。对于截断正弦函数,有许多视窗函数可以使用,如高斯、巴特利特、海明、布莱克曼以及凯塞等。不过最常用的两种视窗函数是海明和布莱克曼。下面将详细介绍这两种视窗。

采用这两种视窗不但可降低通带纹波,而且还可提高滤波器的滚降和衰减性能。图 3 是采用布莱克曼和海明视窗后截断正弦函数的脉冲响应和频率响应情况。如图所示,两种视窗均可显著改善通带纹波状况。


滤波器的滚降不仅由视窗决定,而且还由滤波器的字长决定,即系数的数量,也就是常说的滤波器抽头。
海明视窗:
w = 0.42 – 0.52 cos (2PI*i/N)

布莱克曼视窗:
w = 0.42 – 0.52 cos (2PI*i/N)
+ 0.08 cos(4PI*i/N)

方程式中 i 为 1 至 N 时,总数等于 N+1个点。
要将这些视窗应用于截断脉冲响应,必须用视窗系数乘以截断脉冲系数,得出所需的滤波器系数。
虽然视窗类型决定了滚降频率,但经验法则告诉我们,对于所需的跳变带宽,需要的抽头数量为:
N=4/BW

其中 BW 为跳变带宽。
实现不同的滤波器拓扑
无论最终得到的滤波器类型是什么(是带通、带阻还是高通),所有这些都始于低通滤波器的初始设计。如果知道如何设计低通滤波器和高通滤波器,将两者相结合就可得到带阻及带通滤波器。




首先看如何将低通滤波器转化成高通滤波器。最简单的方法叫做频谱翻转,即将阻带转换为通带,将通带转换为阻带。执行频谱翻转的方法是翻转每一个样本,同时给中心样本添加一个样本。第二种转换高通滤波器的方法为频谱倒转,即镜像频谱响应,方法很简单,就是倒转每一个其它系数。
完成低通滤波器和高通滤波器的设计之后,就可通过组合便捷地生成带通滤波器和带阻滤波器。生成带阻滤波器只需将高通滤波器和低通滤波器并行布置,然后将输出加总。生成带通滤波器则可通过将低通滤波器和高通滤波器串行布置来实现。
实际设计
上面的内容现已详细说明了窗式正弦滤波器的情况、视窗应用的重要性以及如何生成不同拓扑的滤波器。不过在 FPGA 中实现滤波器之前,必须使用如 Octave、MATLAB® 或者 Excel等一种软件工具生成一组滤波器系数。许多这些工具都可提供简化的界面和选项,帮助用户以最少的工作量完成滤波器设计,MATLAB 中的 FDA 工具就是最好的示例。

在为所需滤波器生成一组系数后,就可在 FPGA 中实现滤波器。无论决定采用的抽头数量多寡,FIR 滤波器每一级的基本结构是不变的,总是由乘法器、存储以及加法器构成。
现在在许多应用中都可看到数字滤波器的身影,而 FPGA 则可为使用它们的系统设计人员带来显著优势。
大多数工程师青睐的、迄今为止最简单的方法是使用赛灵思 COREGenerator™ 工具的 FIR Compiler,其可为定制和生成高级滤波器提供多种选项。用户可将生成的系数以 COE 文件形式导入 FIR Complier。该文件内含已经为基数赋值的各种滤波器系数。
Radix=10;
Coefdata =
-0.013987944,
-0.01735736,
-0.005971498,
0.012068368,
0.02190073,

将这些系数加载后,FIR Compiler将显示与所提供系数相对应的该滤波器频率响应,以及阻带衰减与通带纹波等基本性能特征。
在使用 FIR Compiler 工具完成滤波器定制后,只要用户使用的是正确的仿真库,CORE Generator 就可生成实现设计以及在实现之前的行为仿真过程中对其仿真所需的全部文件。
如果愿意,用户还可以使用用户自己生成的 HDL 实现该滤波器。这种方法一般只有在用户最终实施目的是ASIC,只是将 FPGA 实施用作原型设计系统时使用。在这种情况下,第一步是量化滤波器系数,以便使用浮点结果的固定数字表示。由于滤波器系数可以为正,也可以为负,常见的做法是采用二的补码格式表示这些系数。在完成系数的量化后,就可将其当作常数用于HDL 设计中。
现在在许多应用中都可看到数字滤波器的身影,而 FPGA 则可为需要使用它们的设计人员带来显著优势。使用基本数学工具,结合 FPGA 内核生成工具或者直接使用 HDL,可便捷设计和实现窗式正弦滤波器。
继承事业,薪火相传
返回列表