1)实验平台:正点原子开拓者FPGA 开发板
2)摘自《开拓者FPGA开发指南》关注官方微信号公众号,获取更多资料:正点原子
3)全套实验源码+手册+视频下载地址:正点原子资料下载中心 - 正点原子资料下载中心 1.0.0 文档
http://weixin.qq.com/r/hEhUTLbEdesKrfIv9x2W (二维码自动识别)
第五十二章 基于FIR IP核的低通滤波器实验
FIR滤波器是有限冲激响应(Finite Impulse Response)滤波器的简称,它与IIR(Infinite Impulse
Response,无限冲击响应)滤波器,都是按照单位冲击响应 h(n)的时间特性分类的两种基本
的数字滤波器。由于 FIR 滤波器没有反馈回路,所以稳定性要好于 IIR 滤波器,此外 FIR 滤波器
还具有线性相位延迟的特点。因此 FIR 滤波器在通信、图像处理、模式识别等领域都有着广泛
的应用。本章我们将使用 Quartus II 软件里的 FIR Compiler IP 核,来对音频信号进行滤波,作
为一个简单的例程,向大家介绍 Altera FIR Compiler IP 核的使用方法。
本章包括以下几个部分:
52.1 FIR Compiler IP 核简介
52.2 实验任务
52.3 硬件设计
52.4 程序设计
52.5 下载验证
FIR Compiler核简介
我们日常生活中经常用到的音乐播放器、手机、数码相机等电子设备中,都可以看到数字
信号处理(DSP)的使用。而 FIR 滤波器因为系统稳定、易实现线性相位和允许多通道滤波等
特点,在数字信号处理领域受到广泛运用。
由于 FIR 滤波器处理的是数字信号,所以模拟信号在进入 FIR 滤波器前,需要先经过 AD
器件进行模数转换,将模拟信号转化为数字信号。而为了让信号处理不发生失真,信号的采样
速度必须满足奈奎斯特定理,一般取信号最高频率的 4 到 5 倍做为采样频率。
FIR 滤波器信号处理如下公式所示,其中 x(n)是输入的信号,h(n)为 FIR 滤波系数,
y(n)为滤波后的信号。N 为 FIR 滤波器的抽头数,滤波器阶数为 N-1。
(n) = ∑ ℎ() × ( − )
−1
=0
由上面的公式得到的一种 FIR 滤波器实现结构如下图所示,主要由延迟单位−1、乘法器、
累加器组成。这种滤波器被称为直接型 FIR 滤波器。
图 52.1.1 直接型FIR滤波器
接下来我们举个简单的例子,下图所示为一个低通滤波器的频率响应图,通带(滤波器允
许通过信号的频率范围)边缘频率为 3Hz,阻带(信号幅度衰减到极低水平的频率范围)边缘
频率为 5Hz,3Hz 到 5Hz 之间为过渡带。信号衰减 3dB 所对应的信号频率即为截止频率。
图 52.1.2 一个低通滤波器频率响应曲线
我们在前面的内容里展示了 FIR 滤波器的信号处理公式、基本实现结构、频率响应曲线图。
而 FIR 滤波器的具体实现涉及到数字信号处理相关的专业知识内容,这里则主要讲解如何创建
我们需要的 FIR 滤波器。接下来我们了解一下设计一个简单的 FIR 滤波器需要设置的参数。
一个简单的 FIR 滤波器需要设置的参数:
1) Filter Type(滤波器类型):设置 FIR 滤波器的类型:低通(Low pass)、高通(high
pass)、带通(band pass)以及带阻(band stop)等。下图所示为 Filter Type 选项栏
的下拉选项。
图 52.1.3 选择滤波器类型
四种基础滤波器允许通过的信号频率如下图所示:
图 52.1.4 四种基础滤波器的频率响应曲线
2) Window Type(窗函数类型):FIR 滤波器的设计方法有很多种。常用的有窗函数设计
法(Window)、等波纹设计法(Equiripple)和最小二乘法 (Least-Squares)等。Quartus
II 软件里的 FIR Compiler IP 核提供的设计方法是窗函数设计法。我们可以选择的窗函数有矩形窗(Rectangular)、汉宁窗(Hanning)、哈明窗(Hamming)、布莱克曼窗
(Blackman)。这里只需要简单了解一下有这些窗函数即可。不同的窗函数有各自对
应阻带最小衰减、过渡带宽等特性,这些都是设计滤波器时比较重要的参数。阻带衰
减 dB 数越大,对阻带信号的抑制作用越好。过渡带宽与滤波器的阶数计算有关。旁
瓣峰值衰减绝对值越大,滤波器性能越好。在设置好窗函数类型后,点击 Apply,就能
在 Frequence Response 窗口看到窗函数的频率响应曲线。
图 52.1.5 窗函数特性表
图 52.1.6 选择窗函数
3) Coefficient(抽头系数):抽头系数是滤波器系数的个数。而滤波器的阶数比抽头数小
1。滤波器的阶数直接影响滤波器的性能,阶数越高,性能越好,相应在 FPGA 中实现
该滤波器耗用的资源越多。我们需要手动输入数值来确定系数。