窗函数设计法设计FIR数字滤波器——FDATool

时间:2024-04-12 14:17:38

FDATool(Filter Design and Analysis Tool)是MATLAB信号处理工具箱(Signal Processing Toolbox)中一个强有力的进行快速设计与分析滤波器的图形用户界面工具。FDATool可以设计包括FIR和IIR的几乎所有常规滤波器。

FDATool也提供对滤波器将进行分析的工具,例如幅频和相频响应曲线和极零点图等。FDATool可以喝MATLAB产品族的其他产品无缝结合以开发综合项目。

FDATool用户界面

窗函数设计法设计FIR数字滤波器——FDATool

FDATool主窗口分为菜单栏、工具栏及GUI面板三大部分。其中GUI部分包括三个主要区域:左上部分为当前滤波器信息区域,右上部分为滤波器显示区域,下半部分为设计面板区域。

2、SPTool用户界面

    窗函数设计法设计FIR数字滤波器——FDATool

 

SPTool主窗口包含三个列表框:Signals列表框、Filter列表框和Spectra列表框,主窗口下部的按钮分别对应SPTool的四个信号处理功能模块。

1.滤波器的概念

滤波是信号处理中的一种最基本而又重要的技术,利用滤波,可以从复杂的信号中提取所需的信号,抑制不需要的信号。所谓滤波器,就是对已知激励,可以在时间域或频域产生规定响应的网络,要使滤波器能够提取有用信号,要求滤波器对信号与噪声有不同的增益,对有用信号尽量无失真放大,而对噪声尽量衰减。

2.滤波器的定义

所谓滤波器,就是对已知激励,可以在时间域或频域产生规定响应的网络,要使滤波器能够提取有用信号,要求滤波器对信号与噪声有不同的增益,对有用信号尽量无失真放大,而对噪声尽量衰减。

3.滤波器的分类

滤波器一般分两类:模拟滤波器和数字滤波器;从功能上分为低通滤波器(LPF),高通滤波器(HPF),带通滤波器(BPF),带阻滤波器(BSF);从实现方法上可分为IIR滤波器和FIR滤波器。

3.1数字滤波器的概述

数字滤波器是近几十年迅速发展起来的一门新技术和学科,它在理论和实践中都有巨大的意义。数字滤波器理论在网络与滤波理论中占有越来越重要的地位。数字滤波器是数字信号处理中的基础部分,与模拟滤波器相比具有的优点有:精度高、可靠性高、灵活性高、便于大规模集成及多位过滤等。

数字滤波器由数字乘法器、加法器和延时单元组成的一种算法或装置。数字滤波器的功能是对输入离散信号的数字代码进行运算处理,以达到改变信号频谱的目的。

数字滤波器是一个离散时间系统(按预定的算法,将输入离散时间信号转换为所要求的输出离散时间信号的特定功能装置)。应用数字滤波器处理模拟信号时,首先须对输入模拟信号进行限带、抽样和模数转换。数字滤波器输入信号的抽样率应大于被处理信号带宽的两倍,其频率响应具有以抽样频率为间隔的周期重复特性,且以折叠频率即1/2抽样频率点呈镜像对称。为得到模拟信号,数字滤波器处理的输出数字信号须经数模转换、平滑。数字滤波器具有高精度、高可靠性、可程控改变特性或复用、便于集成等优点。数字滤波器在语言信号处理、图像信号处理、医学生物信号处理以及其他应用领域都得到了广泛应用。

  数字滤波器有低通、高通、带通、带阻和全通等类型。它可以是时不变的或时变的、因果的或非因果的、线性的或非线性的。应用最广的是线性、时不变数字滤波器,以及FIR滤波器。

由于IIR数字滤波器能够保留一些模拟滤波器的优良特性,因此应用很广。但是这些特性是以牺牲线性相位频率特性为代价的,即用Butterworth、chelbchev和椭圆法设计的数字滤波器逼近理想的滤波器的幅度频率特性,得到的滤波器往往是非线性的。在许多电子系统中,对幅度频率特性和线性相位特性都有较高的要求,所以IIR滤波器在这些系统中往往难以胜任。有限长单位冲激响应(FIR)数字滤波器具有以下优良的特点:

(1)可在设计任意幅度频率特性滤波器的同时,保证精确、严格的线性相位特性。

(2) FIR数字滤波器的单位冲激响应h(n)是有限长的,可以用一个固定的系统来实现,因而FIR数字滤波器可以做成因果稳定系统。

(3)允许设计多通带(多阻带)系统。

根据FIR滤波器的幅频特性,可以将其分为以下4种情况,其中h(n)为FIR滤波器的冲激响应:

1. h(n)为偶对称,且N为奇数(Ⅰ型滤波器)

Ⅰ型滤波器的幅频函数可以通过例程4-1的MATLAB语言来实现。

function [Hr,w,a,L]=hr_type1(h);        

%计算所设计的1型滤波器的振幅响应

%Hr=振幅响应

%a=1型滤波器的系数

%L=Hr的阶次

%h=1型滤波器的单位冲击响应

M=length(h);

L=(M-1)/2;

a=[h(L+1) 2*h(L:-1:1)];

n=[0:1:L];

w=[0:1:500]'*2*pi/500;

Hr=cos(w*n)*a';

2. h(n)为偶对称,且N为偶数(Ⅱ型滤波器)

·Ⅱ型滤波器的幅频函数可以通过例程4-2的MATLAB语言来实现。

··例程4-2  Ⅱ型滤波器的幅频函数

function [Hr,w,b,L]=hr_type2(h);        

%计算所设计的2型滤波器的振幅响应

%Hr=振幅响应

%b=2型滤波器的系数

%L=Hr的阶次

%h=2型滤波器的单位冲击响应

M=length(h);

L=M/2;

b= 2*h(L:-1:1);

n=[1:1:L];

n=n-0.5;

w=[0:1:500]’*2*pi/500;

Hr=cos(w*n)*b';

3. h(n)为奇对称,且N为奇数(Ⅲ型滤波器)

 Ⅲ型滤波器的幅频函数可以通过例程4-3的MATLAB语言来实现。

例程4-3  Ⅲ型滤波器的幅频函数

function [Hr,w,c,L]=hr_type3(h);        

%计算所设计的3型滤波器的振幅响应

%Hr=振幅响应

%b=3型滤波器的系数

%L=Hr的阶次

%h=3型滤波器的单位冲击响应

M=length(h);

L=(M-1)/2;

c= [2*h(L+1:-1:1)];

n=[0:1:L];

w=[0:1:500]’*2*pi/500;

Hr=sin(w*n)*c';

4.h(n)为奇对称,且N为偶数(IV型滤波器)

IV 型滤波器的幅频函数可以通过例程4-4的MATLAB语言来实现。

例程4-4 IV 型滤波器的幅频函数

function [Hr,w,d,L]=hr_type4(h);        

%计算所设计的4型滤波器的振幅响应

%Hr=振幅响应

%b=4型滤波器的系数

%L=Hr的阶次

%h=4型滤波器的单位冲击响应

M=length(h);

L=M/2;

c= 2*[h(L:-1:1)];

n=[1:1:L];

n=n-0.5

w=[0:1:500]’*2*pi/500;

Hr=sin(w*n)*d';

针对FIR数字滤波器的结构特点,目前主要采用窗函数法、频率采样法和最优化法等三种方法设计FIR数字滤波器。

4.2窗函数设计法设计FIR数字滤波器

窗函数法就是设计FIR数字滤波器最简单的方法。它在设计FIR数字滤波器中有很重要的作用,正确地选择窗函数可以提高设计数字滤波器的性能,或者在满足设计要求的情况下,减小FIR数字滤波器的阶次。常用的窗函数有以下几种:矩形窗(Rectangular window)、三角窗(Triangular window)、汉宁窗(Hanning window)、海明窗(Hamming window)、布拉克曼窗(Blackman window)切比雪夫窗(Chebyshev window)、巴特利特窗(Bartlett window)及凯塞窗(Kaiser window)。

在MATLAB中,实现矩形窗的函数为boxcar和rectwin,其调用格式如下:

w=boxcar(N)

w=rectwin(N)

其中N是窗函数的长度,返回值w是一个N阶的向量,它的元素由窗函数的值组成。实际上,w=boxcar(N)等价于w=ones(N,1)。

在MATLAB中实现三角窗的函数为triang,调用格式为:

w=triang(N)

在MATLAB中实现三角窗的函数为hann,调用格式为:

w=hann(N)

w=hann(N,’sflag’)

Hann函数中的参数sflag为采样方式,其值可取symmetric(默认值)或periodic。当sflag=symmetric时,为对称采样;当sflag=periodic时,为周期采样,此时hann函数计算N+1个点的窗,但是仅返回前N个点。

在MATLAB中,实现海明窗的函数为hamming,调用格式分别如下:

w=hamming(N)

w=hamming(N,’sflag’)

其中sflag的用法同上。

在MATLAB中,实现布拉克曼窗的函数为blackman,调用格式如下:

w=blackman(N)

w=blackman(N,’sflag’)

在MATLAB中,实现切比雪夫窗的函数为chebwin,调用格式如下:

w=chebwin(N,r)

其中r表示切比雪夫窗函数的傅里叶变换旁瓣幅度比主瓣低rdB(其默认值为100dB),且旁瓣是等波纹的。

在MATLAB中,实现巴特里特窗的函数为bartlett,调用格式为:

 w=bartlett(N)

在MATLAB中,实现凯塞窗的函数为kaiser,调用格式为:

w=kaiser(N, beta)

其中beta为窗函数的参数。

各种窗函数的性能比较可见下表

窗函数

第一旁瓣相对于主瓣衰减/dB

主瓣宽

阻带最小衰减/dB

矩形窗

-13

4/N

21

三角窗

-25

8/N

25

汉宁窗

-31

8/N

44

海明窗

-41

8/N

53

布拉克曼窗

-57

12/N

74

凯塞窗

可调

可调

可调

切比雪夫窗

可调

可调

可调

 

下面用一个实例来设计FIR数字滤波器。

根据下列技术指标,设计一个FIR数字低通滤波器:

=800Hz, =1000Hz, =0.5dB, =40dB

选择一个适当的窗函数,确定单位冲激响应,绘出所设计的滤波器的幅度响应。

根据窗函数最小阻带衰减的特性表,可采用海明窗和布拉克曼窗提供大于50Dbde 衰减。本设计采用海明窗,其过渡带为6.6/N,因此具有较小的阶次。

clear all;

Wp=0.2*pi;

Ws=0.4*pi;

tr_width=Ws-Wp;                    %过渡带宽度

N=ceil(6.6*pi/tr_width)+1          %滤波器长度

n=0:1:N-1;                   

Wc=(Ws+Wp)/2;                      %理想低通滤波器的截止频率

hd=ideal_lp1(Wc,N);                %理想低通滤波器的单位冲激响应

w_ham=(hamming(N))';               %海明窗

h=hd.*w_ham;                       %截取得到实际的单位冲激响应

[db,mag,pha,w]=freqz_m2(h,[1]);    %计算实际滤波器的幅度响应

delta_w=2*pi/1000;

Ap=-(min(db(1;1;Wp/delta_w+1)))    %实际通带波纹

As=-round(max(db(Ws/delta_w+1;1;501))) %实际阻带波纹

subplot(221)                          

stem(n,hd)

title('理想单位脉冲响应hd(n)')

subplot(222)

stem(n,w_ham)

title('海明窗w(n)')

subplot(223)

stem(n,h)

title('实际单位脉冲响应hd(n)')

subplot(224)

plot(w/pi,db)

title('幅度响应(dB)')

axis([0,1,-100,10])

%---------------------------------------

function[db,mag,pha,w]=freqz_m2(b,a)

%滤波器的幅度响应(相对、绝对)、相位响应

%db:相对幅值响应

%mag:绝对幅值响应

%pha:相位响应

%w 采样频率

%b 系统函数H(z)的分子项(对FIR,b=h)

%a 系统函数H(z)的分母项(对FIR,a=1)

[H,w]=freqz(b,a,1000,’whole’);

H=(H(1;1;501))’;

w=(w(1:1:501))’;

mag=abs(H);

db=20*log10((mag+eps)/max(mag));

pha=angle(H);

运行结果:N=

             34

          Ap=

             0.0447

          As=

          52   

由此结果可知,所设计的低通滤波器为Ⅱ型滤波器,它的通带纹波和阻带纹波均满足设计要求。