基于VHDL的数字滤波器设计Word文档格式.doc
- 文档编号:13044490
- 上传时间:2022-10-03
- 格式:DOC
- 页数:14
- 大小:265KB
基于VHDL的数字滤波器设计Word文档格式.doc
《基于VHDL的数字滤波器设计Word文档格式.doc》由会员分享,可在线阅读,更多相关《基于VHDL的数字滤波器设计Word文档格式.doc(14页珍藏版)》请在冰豆网上搜索。
乘法器的系数正好是传递函数的系数,因此这种结构称为直接型结构,可通过式(1.2)来实现,如图1。
图1
当冲击响应满足下列条件时,FIR滤波器具有对称结构,为线性相位滤波器:
(1.3)
这种对称性,可使得乘法器数量减半:
对n价滤波器,当n为偶数时,乘法器的个数为n/2个;
当n为奇数时,乘法器的个数为(n+1)/2个。
在电路实现中,乘法器占用的逻辑单元数较多。
乘法器的增加,意味着电路成本增加,另外对电路的工作速度也有影响。
N阶线性相位的因果FIR系统的单位冲激响应滤波器可用对称冲激响应
(0.3)
或者反对称冲激响应
(0.4)
来描述。
具有对称冲激响应的FIR传输函数的冲激响应可写成如下形式:
当N为偶数时
(0.5)
当N为奇数时
(0.6)
则FIR线性相位系统的结构可转化成如图2(a)和图2(b)所示。
图2(a)N为奇数
图2(b)N为偶数
二、设计方案
随着数字技术日益广泛的应用,以现场可编程门阵列(FPGA)为代表的ASIC器件得到了迅速普及和发展,器件集成度和速度都在高速增长。
FPGA有着规整的内部逻辑块阵列和丰富的连线资源,特别适合细粒度和高并行度结构特点的数字信号处理任务,如FIR、FFT等。
1.FIR滤波器的结构
FIR滤波器的结构主要是非递归结构,没有输出到输入的反馈。
并且FIR滤波器很容易获得严格的线性相位特性,避免被处理信号产生相位失真。
而线性相位体现在时域中仅仅是h(n)在时间上的延迟,这个特点在图像信号处理、数据传输等波形传递系统中是非常重要的。
此外,他不会发生阻塞现象,能避免强信号淹没弱信号,因此特别适合信号强弱相差悬殊的情况。
2.FIR数字滤波器的设计方案:
通常采用窗函数设计FIR滤波器方法简单,但是这些滤波器的设计还不是最优的。
首先通带和阻带的波动基本上相等,另外对于大部分窗函数来说,通带内或阻带内的波动不是均匀的,通常离开过渡带时会减小。
若允许波动在整个通带内均匀分布,就会产生较小的峰值波动。
对于线性相位因果FIR滤波器,它的系列具有中心对称特性,即。
令,对于偶对称,代入式
(1)可得:
根据要求,设计一个基于VHDL的数字滤波器。
我们假设滤波器要求是输入8位,输出8位的17阶线性相位FIR滤波器,这里采用图2(a)的方式,其中输入信号范围为:
[±
99,0,0,0,±
70,0,0,0,±
70,…],此滤波器采样频率Fs为44kHz,截止频率Fc为10.4kHz。
整个过程的设计环境:
WINXp+MATLAB7.1+QuartusII8.0
首先计算滤波器系数:
在MATLAB的命令窗口中输入fdatool,开启FilterDesign&
AnalysisTool界面。
如图3所示。
图3FilterDesign&
AnalysisTool工具界面
由于滤波器的是17阶,所以Specifyorder处填16,h(0)=0.如图4所示。
图4滤波器的参数设置
完成后点击DesignFilter按钮,FIR滤波器的幅频响应如图5所示
图5FIR滤波器的帧频响应
FIR滤波器的相频响应
FIR滤波器的冲激响应
FIR滤波器系数
对FIR滤波器的系数进行调整,整数化
>
Numerator=[-0.023683271368922305-0.0358147781238255520.0252053362647183430.056545856173748361-0.026338218116276707-0.101744516529033460.0270367163067472510.31684189497411630.472727272727272720.31684189497411630.027036716306747251-0.10174451652903346-0.0263382181162767070.0565458561737483610.025205336264718343-0.035814778123825552-0.023683271368922305];
round(Numerator*(2^9))
ans=
Columns1through11
-12-181329-13-521416224216214
Columns12through17
-52-132913-18-12
可得FIR滤波器的参数为[-12-181329-13-521416224216214-52-132913-18-12]
根据以上所说的该思路,可以将FIR滤波器的原理图设计如下:
下面对各加法器乘法器的输出位数进行分析,对第一级加法器,输入全为8位,输出统一为9位。
对各个乘法器进行分析,12=8+4,8为2的3次方,向左移了3位,输出为12位;
18=16+2,16为2的4次方,向左移了4位,输出为13位;
以此类推,13乘法器输出为12位,29输出为13位,52输出为14位,162输出为16位,242输出为16位。
对剩余加法器进行分析,对输入序列进行分析,[±
70,…],周期为8,经分析当总值最大时,总输出应为99*18+70*29+50*70+99*162=1782+2030+3640+16038=23490,2的15次方为32768,再加上一位符号位,所以输出应为16位,由此类推,12、18乘法器输出之和为13位,13、19乘法器输出之和应为13位,总输出为14位。
另一支路上,13、52乘法器输出之和为14位,14、162乘法器输出之和为16位,其总输出之和为16位,最后这两路输出之和为16位。
将后8位舍去,加上由乘法器242输出舍取得倒的8位,总输出为8位。
至此,所有器件的输入输出都可判定。
下面进入模块设计阶段。
三、模块电路设计
设计的FIR滤波器由19个小VHD文件和一个总体BDF文件组成,VHD文件可以分为以下四种模块:
寄存器、加法器、减法器、乘法器。
3.1寄存器
3.1.1寄存器原理
寄存器用于寄存一组二值代码,对寄存器的触发器只要求它们具有置1、置0的功能即可,因而本设计中用D触发器组成寄存器,实现寄存功能。
3.1.2寄存器要求实现的功能
在CP正跳沿前接受输入信号,正跳沿时触发翻转,正跳沿后输入即被封锁。
3.1.3寄存器的VHDL语言实现(8位)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYdff8IS
PORT(clk:
INSTD_LOGIC;
clear:
INSTD_LOGIC;
Din:
INSTD_LOGIC_VECTOR(7DOWNTO0);
Dout:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDdff8;
ARCHITECTUREaOFdff8IS
BEGIN
PROCESS(clk,clear)
BEGIN
IFclear='
1'
THEN
Dout<
="
00000000"
;
ELSIFclear='
0'
IF(clk'
EVENTANDclk='
)THEN
Dout<
=Din;
ENDIF;
ENDIF;
ENDPROCESS;
ENDa;
其中,clear为复位信号。
3.1.4寄存器的模块图
3.1.5寄存器的波形仿真
完全符合设计要求。
3.2加法器
3.2.1加法器的原理
在将两个多位二进制数相加时,除了最低位以外,每一位都应该考虑来自低位的进位,即将两个对应位的加数和来自低位的进位3个数相加。
这种运算称为全加,所用的电路称为全加器。
多位加法器的构成有两种方式:
并行进位和串行进位。
并行进位加法器设有进位产生逻辑,预算速度较快;
串行进位方式是将全加器级联构成多位加法器。
并行进位加法器通常比串行级联加法器占用更多的资源。
随着为数的增加,相同位数的并行加法器与串行加法器的资源占用差距也越来越大,因此,在工程中使用加法器时,要在速度和容量之间寻找平衡点。
本次设计采用的是并行加法器方式。
3.2.2加法器要求实现的功能
实现两个二进制数字的相加运算。
当到达时钟上升沿时,将两数输入,运算,输出结果。
3.2.3加法器的VHDL语言实现
(以下以12位数加16位数生成16位数的加法器为例)
USEIEEE.STD_LOGIC_arith.ALL;
ENTITYadd121616is
PORT(clk:
inSTD_LOGIC;
Din1:
insigned(11downto0);
Din2:
insigned(15downto0);
Dout:
outsigned(15downto0));
ENDadd121616;
ARCHITECTUREaofadd121616is
SIGNALs1:
signed(15downto0);
BEGIN
s1<
=(Din1(11)&
Din1(11)&
Din1);
PROCESS(Din1,Din2,clk)
ifclk'
eventa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL 数字滤波器 设计