FIR滤波器的设计.docx
- 文档编号:8509534
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:47
- 大小:438.66KB
FIR滤波器的设计.docx
《FIR滤波器的设计.docx》由会员分享,可在线阅读,更多相关《FIR滤波器的设计.docx(47页珍藏版)》请在冰豆网上搜索。
FIR滤波器的设计
第一篇设计介绍
一、设计目的
1、熟悉FIR滤波器设计的基本方法。
2、掌握用窗函数设计FIR滤波器的基本原理和方法,熟悉MATLAB语言。
3、熟悉线性相位FIR滤波器的幅频特性和相位特性。
4、了解各种不同窗函数对滤波器性能的影响。
5、熟悉MCS51系列单片机基本原理。
6、掌握MCS51系列单片机基本指令和编程。
7、利用MATLAB仿真的数据,用单片机实现FIR滤波器的设计。
二、原理和方法
(一)FIR滤波器的设计
滤波器是设计来进行频率选择或频率分辨任务的线性时不变系统的通用名称。
离散时间LTI(线性时不变)系统称为数字滤波器。
按照LTI系统的单位脉冲响应长度是否有限可以分为有限长度脉冲响应(FIR)滤波器和无限长度脉冲响应(IIR)滤波器。
LTI离散系统可以用下列形式的线性常系数差分方程来描述:
(1)
(1)式中的下列部分描述的是一个因果FIR滤波器。
(2)
(1)式中的下列部分描述的是一个递推滤波器,其中输出y(n)可用其以前算得的值
(3)
递推计算而得,所以也称为自回归(AR)滤波器。
因为脉冲响应是无限长,所以称为IIR滤波器。
FIR滤波器也称为非递推或滑动平均(MA)滤波器。
式
(1)中有两个部分:
一个AR部分和一个MA部分。
FIR滤波器可以利用快速傅立叶变换进行快速卷积来实现,另外,FIR滤波器具有严格的相位特性,这对于语音信号处理和数据传输是很重要的。
IIR滤波器的优异幅度响应是以相位的非线性为代价的,而非线性相位会引起频率色散。
目前FIR滤波器的设计方法主要有三种:
窗函数法、频率采样法和切比雪夫等波纹逼近的最优化设计方法。
最常用的是窗函数法和切比雪夫等波纹逼近的最优化设计法。
本设计中用的窗函数法比较简单,可以应用现成的窗函数公式,在技术要求不高的时候是比较方便灵活的。
它从时域出发,用一个窗函数截取理想的hd(n)得到h(n),以有限长序列h(n)近似理想的hd(n);如果从频域出发,用理想的Hd(ejw)在单位圆上等角度取样得到h(k),根据h(k)得到h(z)将逼近理想的hd(z),这就是频率取样法。
(二)性能指标
数字滤波器的指标形式应为频域中的幅度和相位响应。
在通带中通常希望具有线性相位响应,在FIR滤波器中,可以得到精确的线性相位。
幅度指标可以以两种方式给出。
第一种叫做绝对指标,它提供对幅度响应函数|H(ejw)|的要求。
第二种方法叫做相对指标,它以分贝(dB)值的形式提出要求,其值定义为:
为了说明这些指标,下面以低通滤波器设计为例进行讨论。
绝对指标
低通滤波器的典型绝对指标如图1a所示。
其中
·[0,ωp]段叫做通带,δ1是理想通带响应中能接受的容限(或波动)。
·[ωs,π]段叫做阻带,δ2是相应的容限。
·[ωp,ωs]段叫做过渡带,在此段上对幅度响应没有限制。
相对指标(dB)
低通滤波器的典型相对技术指标如图1b所示。
其中
·Rp是通带波动。
·As是阻带衰减的dB数。
图1FIR滤波器技术指标:
(a)绝对 (b)相对
显然,上述两种指标里给定的参数存在一定的关系。
由于绝对指标中的|Hd(ejw)|max
等于1+δ1,因此,有
及
第二篇窗函数法及MATLAB实现
一、窗函数法原理
众所周知,数字滤波器的设计是基于一定的性能指标。
窗函数法设计滤波器也不例外,首先要对滤波器提出性能指标。
一般是给定一个理想的频率响应Hd(ejw),使所设计的FIR滤波器的频率响应H(ejw)去逼近所要求的理想的滤波器的响应Hd(ejw)。
窗函数法设计的任务在于寻找一个可实现(有限长单位脉冲响应)的传递函数:
(4)
去逼近Hd(ejw)。
一般情况下,一个理想的频率响应Hd(ejw)的傅立叶反变换:
(5)
所得到的理想单位脉冲响应hd(n)是一个无限长序列。
对hd(n)经过适当的加权、截断处理才能得到一个所需要的有限长脉冲响应序列。
对应不同的加权、截断,就有不同的窗函数。
而所要寻找的滤波器脉冲响应就等于理想脉冲响应和窗函数的乘积,即:
(6)
由此可见,窗函数的性质就决定了滤波器的品质。
由于窗函数有一个等于M的有限长度,所以它的响应有一个主瓣,其宽度与1/M成正比,还有高度比较小的旁瓣。
主瓣在Hd(ejw)中产生一个过渡带,主瓣的宽度决定过渡带的宽度,即与1/M成正比,主瓣越宽,则过渡带越宽,旁瓣产生波动。
以下是几种常用的窗函数:
1、矩形窗
(7)
2、汉宁(Hanning)窗
(8)
3、汉明(Hamming)窗
(9)
4、布莱克曼(Blackman)窗
(10)
5、凯泽(Kaiser)窗
(11)
其中I0[.]是修正过的零阶贝塞尔(Bessel)函数,β为依赖于M的参数,选择M可以产生各种过渡带宽和接近最优的阻带衰减。
对于相同的M,凯泽窗可以提供不同的过渡带宽,这是其它窗所做不到的。
以上几种窗函数的特性如表
(1)所示。
在实际设计过程中,上述几种窗函数可以根据对滤波器过渡带和带阻衰减的要求,适当选取窗函数的类型和长度M,以得到比较满意的设计效果。
如何根据滤波器的长度M的奇偶性,选择h(n)的奇偶对称性则是一个另外需要考虑的问题。
线性相位实系数FIR滤波器按其M的奇偶和h(n)的奇偶对称性可以分为四种,它们具有不同的幅频和相位特性。
表
(1)常用窗函数特性
窗函数名称
近似过渡带宽
精确过渡带宽
最小阻带衰减
矩形
4π/M
1.8π/M
21dB
汉宁
8π/M
6.2π/M
44dB
哈明
8π/M
6.6π/M
53dB
布莱克曼
12π/M
11π/M
74dB
对于选频滤波器,通常希望得到线性相位,它为频率的线性函数,对系统施加一个线性相位约束:
(12)
其中β=0或±π/2,α为一个常数。
对于因果FIR滤波器,它的脉冲响应在区间[0,M-1]上,线性相位条件(12)揭示了h(n)具有下面的对称性:
(13)
(14)
满足条件(13)的脉冲响应叫做对称脉冲响应,而满足(14)的叫做反对称脉冲响应。
当β=0时,0≤n≤M-1,α=(M-1)/2,为恒定相位延迟,h(n)=h(M-1-n),关于α对称,α为对称指数。
·M为奇数:
α=(M-1)/2为整数,h(n)偶对称,脉冲响应如下图所示:
(14)
其幅度关于ω=0,π,2π点成偶对称。
·M为偶数:
α=(M-1)/2不为整数,h(n)偶对称,脉冲响应如下图所示:
(15)
其幅度关于ω=π点成奇对称,H(ejw)在ω=π处有零点,所以它不能用于高通或带阻滤波器的设计。
当β=±π/2时,0≤n≤M-1,α=(M-1)/2,是一条不通过原点的直线,α不是恒定的相位延迟,而是一个群延迟,h(n)=-h(M-1-n),是反对称的,对称指数仍为α=(M-1)/2。
·M为奇数:
α=(M-1)/2为整数,h(n)奇对称,脉冲响应如下图所示:
(16)
其幅度关于ω=0,π,2π点成奇对称,H(ejw)在0,π,2π处都有零点。
因此不适用于低通和高通滤波器的设计。
·M为偶数:
α=(M-1)/2不为整数,h(n)奇对称,脉冲响应如下图所示:
(17)
其幅度关于ω=0,2π点成奇对称,H(ejw)在0,2π处都有零点。
因此不适用于低通滤波器的设计。
在滤波器的设计过程中,只有根据上述四种线性相位滤波器传递函数的性质,合理地选择应采用的类型,构造出Hd(ejw)的幅频特性和相位特性,才能求得所需要的、具有单位脉冲响应的线性相位FIR滤波器传递函数。
窗函数法设计线性相位FIR滤波器可以按如下步骤进行:
(1)确定数字滤波器的性能要求。
确定各临界频率{ωk}和滤波器单位脉冲长度M。
(2)根据性能要求和M值,合理地选择单位脉冲响应h(n)的奇偶对称性,从而确定理想频率响应Hd(ejw)的幅频特性和相位特性。
(3)用傅立叶反变换公式(5)求得理想单位脉冲响应hd(n)。
(4)选择适当的窗函数w(n),根据式(6),求得所设计的FIR滤波器单位脉冲响应。
(5)用傅立叶变换求得其频率响应H(ejw),分析它的幅频特性,若不满足要求,可适当改变窗函数形式或长度M,重复上述过程,直到得到满意的结果。
二、MATLAB实现的内容及步骤
(一)编制实验用主程序及相应子程序
1、在实验编程之前,认真复习有关FIR滤波器设计的有关知识,尤其是窗函数法的有关内容,阅读本实验原理与方法,熟悉窗函数及四种线形相位FIR滤波器的特性,掌握窗函数设计滤波器的具体步骤。
2、编制窗函数设计FIR滤波器的主程序及相应子程序。
(1)根据Hd(ejw),利用傅立叶变换,编制产生理想单位脉冲响应hd(n)的简单子程序。
(2)根据公式(7)到公式(10)编制相应的窗函数序列的子程序。
(3)在上述子程序的基础上设计主程序完成线性相位FIR滤波器的窗函数法设计。
(二)上机实验内容
在计算机上调试自己设计好的窗函数法设计FIR线性相位滤波器设计程序。
以下是一个例题及其标准答案,用于在调试过程中做参考。
[例]用窗函数法设计一个长度M等于11的线性相位FIR滤波器,其理想的幅频特性为
以下是参考答案:
hd(0)=hd(10)=-0.0450hd
(1)=hd(9)=0.0000hd
(2)=hd(8)=0.0750
hd(3)=hd(7)=0.1592hd(4)=hd(6)=0.2251hd(5)=0.2500
窗函数类型
h(0)=h(10)
h
(1)=h(9)
h
(2)=h(8)
h(3)=h(7)
h(4)=h(6)
h(5)
矩形窗
-0.0450
0.0000
0.0750
0.1592
0.2251
0.2500
Hanning窗
-0.0030
0.0000
0.0375
0.1194
0.2100
0.2500
Hamming窗
-0.0036
0.0000
0.0298
0.1086
0.2053
0.2500
Blackman窗
-0.0000
0.0000
0.0151
0.0811
0.1911
0.2500
Kaiser窗
(β=8.5)
-0.0001
0.0000
0.0154
0.0819
0.1916
0.2500
程序调试成功以后,请完成以下实验内容:
(1)用Hanning窗设计一个线形相位带通滤波器,其长度M=30,技术指标要求如下:
低端阻带边缘:
ω1s=0.2π;低端通带边缘:
ω1p=0.35π
高端通带边缘:
ω1p=0.65π;高端阻带边缘:
ω1s=0.8π
绘制幅频和相位特性曲线、理想脉冲响应和实际脉冲响应离散数据图。
如果M=45,重复这一设计,观察幅频和相位特性的变化,注意长度M变化对结果的影响。
(2)改用矩形窗和Blackman窗,设计步骤
(1)中的带通滤波器,观察并记录窗函数对滤波器幅频和相位特性的影响,比较这三种窗函数的特点。
(3)用Kaiser窗设计一个专用的线性相位滤波器。
M=40,理想幅频特性如下:
当β值分别为4,6,8时,设计相应的滤波器,比较它们的幅频和相位特性,观察并分析β值不同的时候对结果有什么影响。
三、思考题
1、如果没有给定h(n)的长度M,而是给定了带通边缘截止频率ωc和阻带临界频率ωs,以及相应的衰减,你能根据这些条件用窗函数法设计线性相位FIR低通滤波器吗?
2、如果在运用(5)式产生单位脉冲响应h(n)时Hd(ejw)比较复杂,怎样才能产生实际脉冲响应h(n)?
*3、频率取样法和窗函数法各有什么特点?
(简单说明)
第三篇MCS51单片机原理
一、8051外部引脚
1、电源引脚
Vcc 40 电源端
GND 20 接地端
*工作电压为5V
2、外接晶体引脚
XTAL1 19
XTAL2 18
XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。
内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。
晶振的频率可以在1MHz-24MHz内选择。
电容取30PF左右。
*型号同样为AT89C51的芯片,在其后面还有频率编号,有12,16,20,24MHz可选。
大家在购买和选用时要注意了。
如AT89C5124PC就是最高振荡频率为24MHz,40P6封装的普通商用芯片。
3、复位
RST 9
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。
复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。
当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。
*复位操作不会对内部RAM有所影响。
4、输入输出引脚
(1)P0端口[P0.0-P0.7]
P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。
作为输出口时能驱动8个TTL。
对内部Flash程序存储器编程时,接收指令字节;校验程序时输出指令字节,要求外接上拉电阻。
在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉电阻起作用。
(2)P1端口[P1.0-P1.7]
P1是一个带有内部上拉电阻的8位双向I/0端口。
输出时可驱动4个TTL。
端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
对内部Flash程序存储器编程时,接收低8位地址信息。
(3)P2端口[P2.0-P2.7]
P2是一个带有内部上拉电阻的8位双向I/0端口。
输出时可驱动4个TTL。
端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
对内部Flash程序存储器编程时,接收高8位地址和控制信息。
在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。
而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
(4)P3端口[P3.0-P3.7]
P2是一个带有内部上拉电阻的8位双向I/0端口。
输出时可驱动4个TTL。
端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
对内部Flash程序存储器编程时,接控制信息。
除此之外P3端口还用于一些专门功能,具体请看下表。
*P1-3端口在做输入使用时,因内部有上接电阻,被外部拉低的引脚会输出一定的电流。
P3引脚
兼用功能
P3.0
串行通讯输入(RXD)
P3.1
串行通讯输出(TXD)
P3.2
外部中断0(INT0)
P3.3
外部中断1(INT1)
P3.4
定时器0输入(T0)
P3.5
定时器1输入(T1)
P3.6
外部数据存储器写选通WR
P3.7
外部数据存储器写选通RD
5、其它的控制或复用引脚
(1)ALE/PROG30
访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。
即使不访问外部存储器,ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频率的1/6)。
在访问外部数据存储器时,出现一个ALE脉冲。
对Flash存储器编程时,这个引脚用于输入编程脉冲PROG
(2)PSEN29
该引是外部程序存储器的选通信号输出端。
当AT89C51由外部程序存储器取指令或常数时,每个机器周期输出2个脉冲即两次有效。
但访问外部数据存储器时,将不会有脉冲输出。
(3)EA/Vpp31
外部访问允许端。
当该引脚访问外部程序存储器时,应输入低电平。
要使AT89C51只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平。
二、8051内部结构及指令
在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有4K字节的ROM,用来存放程序,有128字节RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。
1、特殊功能寄存器(SFR)
在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。
51系列单片机的SFR如下表所示:
符号
地址
功能介绍
符号
地址
功能介绍
B
F0H
B寄存器
TH0
8CH
定时器/计数器1(低8位)
ACC
E0H
累加器
TL1
8BH
定时器/计数器0(高8位)
PSW
D0H
程序状态字
TL0
8AH
定时器/计数器0(低8位)
IP
B8H
中断优先级控制寄存器
TMOD
89A
定时器/计数器方式控制寄存器
P3
B0H
P3口锁存器
TCON
88H
定时器/计数器控制寄存器
IE
A8H
中断允许控制寄存器
DPH
83H
数据地址指针(高8位)
SBUF
99H
串行口锁存器
DPL
82H
数据地址指针(低8位)
SCON
98H
串行口控制寄存器
SP
81H
堆栈指针
P1
90H
P1口锁存器
P0
80H
P0口锁存器
P2
A0H
P2口锁存器
PCON
87H
电源控制寄存器
TH1
8DH
定时器/计数器1(高8位)
下面介绍几种常用的特殊功能寄存器。
ACC:
累加器,通常用A表示。
这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?
或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。
它的名字特殊,身份也特殊,稍后我们将学到指令,可以发现,所有的运算类指令都离不开它。
B:
一个寄存器。
在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。
PSW:
程序状态字。
这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。
它的各位功能请看下表:
D7
D6
D5
D4
D3
D2
D1
D0
CY
AC
F0
RS1
RS0
OV
F1
P
(1)CY:
进位标志。
8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?
最高位就进到这里来。
这样就没事了。
例:
78H+97H(01111000+10010111)
(2)AC:
半进位标志。
例:
57H+3AH(01010111+00111010)
(3)F0:
用户标志位,由我们(编程人员)决定什么时候用,什么时候不用。
(4)RS1、RS0:
工作寄存器组选择位。
这个我们已知了。
(5)0V:
溢出标志位。
什么是溢出我们稍后再谈吧。
(6)P:
奇偶校验位:
它用来表示ALU运算结果中二进制数位“1”的个数的奇偶性。
若为奇数,则P=1,否则为0。
例:
某运算结果是78H(01111000),显然1的个数为偶数,所以P=0。
DPTR(DPH、DPL):
数据指针,可以用它来访问外部数据存储器中的任一单元,如果不用,也可以作为通用寄存器来用,由我们自已决定如何使用。
P0、P1、P2、P3:
这个我们已经知道,是四个并行输入/输出口的寄存器。
它里面的内容对应着管脚的输出。
SP1:
堆栈指针。
单片机中能存放数据的区域有限,我们不能够专门分配一块地方做堆栈,所以就在内存(RAM)中开辟一块地方,用于堆栈,但是用内存的哪一块呢?
还是不好定,因为51是一种通用的单片机,各人的实际需求各不相同,有人需要多一些堆栈,而有人则不需要那么多,所以把分的权利给用户(编程者),根据自已的需要去定。
51系列单片机的堆栈遵循“先进后出,后进先出”的原则。
2、8051系列单片机寻址方式及指令系统
我们写指令使用汇编格式,而计算机只懂机器码格式,所以要将我们写的汇编格式的指令转换为机器码格式,这种转换有两种方法:
手工汇编和机器汇编。
手工汇编实际上就是查表,因为这两种格式纯粹是格式不同,所以是一一对应的,查一张表格就行了。
不过手工查表总是嫌麻烦,所以就有了计算机软件,用计算机软件来替代手工查表,这就是机器汇编。
以MOVP1,#0FFH为例,这条命令的作用是把16进制数FFH送给P1,可以看出,MOV比MOVE少一个E,起到命令动词“传递”的作用。
P1为传递的目的地,FFH是传递的源地。
知道指令的格式了,下面我们介绍一些指令。
(1)数据传递类指令
1)以累加器为目的操作数的指令
MOVA,Rn
MOVA,direct
MOVA,@Ri
MOVA,#data
第一条指令中,Rn代表的是R0-R7。
第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的。
第四条指令是将立即数data送到A中。
下面我们通过一些例子加以说明:
MOVA,R1;将工作寄存器R1中的值送入A,R1中的值保持不变。
MOVA,30H;将内存30H单元中的值送入A,30H单元中的值保持不变。
MOVA,@R1;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。
如执行命令前R1中的值为20H,则是将20H单元中的值送入A中。
MOVA,#34H;将立即数34H送入A中,执行完本条指令后,A中的值是34H。
2)以寄存器Rn为目的操作的指令
MOVRn,A
MOVRn,direct
MOVRn,#data
这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。
3)以直接地址为目的操作数的指令
MOVdirect,A例:
MOV20H,A
MOVdirect,RnMOV20H,R1
MOVdirect1,direct2MOV20H,30H
MOVdirect,@RiMOV20H,@R1
MOVdirect,#dataMOV20H,#34H
4)以间接地址为目的操作数的指令
MOV@Ri,A例:
MOV@R0,A
MOV@Ri,directMOV@R1,20H
MOV@Ri,#dataMOV@R0,#34H
5)十六位数的传递指令
MOVDPTR,#data16
8051是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。
其中高8位送入DPH,低8位送入DPL。
例:
MOVDPTR,#1234H,则执行完了之后DPH中的值为12H,DPL中的值为34H。
反之,如果我们分别向DPH,DPL送数,则结果也一样。
如有下面两条指令:
MOVDPH,#35H,MOVDPL,#12H。
则就相当于执行了MOVDPTR,#3512H。
(2)累加器A与片外RAM之间的数据传递类指令
MOVXA,@Ri
MOVX@Ri,A
MOVXA,@DPTR
MOVX@DPTR,A
说明:
1)在51中,与外部存储器RAM打交道的只可以是A累加器。
所有需要送入外部
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FIR 滤波器 设计