数字滤波器总结

更新时间:2023-11-04 13:25:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数字滤波器总结

设计数字滤波器时,应充分利用成熟的软件工具,避免复杂的人工计算。Matlab便是这样的一个软件,它集成了FDAtool(filter design & analysis tool)工具,这是Matlab信号处理工具箱里专用的滤波器设计分析工具。FDAtool可以设计几乎所有的常规滤波器,包括FIR和IIR。它操作简单,方便灵活。

一、那么,打开FDAtool的方法有两种,第一种是在Matlab中键入“fdatool”(大小写均可),即可打开FDAtool的界面;另一种是在Matlab工作环境的左下角依次点开Start—Toolboxes—Filter Design—Filter Design & Analysis Tool(fdatool)。此外,还可以在simulink中将FDAtool模块放入仿真模型中,其位置在Signal Processing Blockset—Filtering—Filter Implementations—Digital Filter Design。下面用两个实例来说明如何在Simulink中设计滤波器。 (一)、低通滤波器的设计

模型如下所示:

其中,Sine Wave是幅值为10,频率为10Hz的正弦波,Sine Wave1也是幅值为10,但频率是1000Hz的正弦波。因为数字滤波器的采样时间是离散的,故在Digital Filter Design前端加Zero-Order Hold模块,其采样周期为1e-4。Digtal Filter Design设置为FIR型低通滤波器、采用窗函数设计,窗类型为Blackman,指定其阶数为30(则实际的阶数将会是31),设置采样频率为10000Hz,设置截止频率是100Hz,其界面如下图所示:

Scope示波器和Scope1示波器的波形分别为:

()a10 (a)(b)(c)0-10200-20100-1000.050.10.150.20.250.30.350.40.450.5

其中(a)图是10Hz信号的波形图,(b)图是10Hz信号和1000Hz信号叠加后的波形图,(c)图是滤波后的信号波形图。

1相位差0-100.050.10.150.20.250.30.350.40.450.5

滤波器滤除噪声信号的同时,也会造成相位滞后,上图是原始信号和滤波后信号两者的差值波形。

(二)、带通滤波器

在小电流接地系统中注入83.3hz的正弦信号,对其进行跟踪分析,要求设计一带通数字滤波器,滤除工频及整次谐波,以便在非常复杂的信号中分离出该注入信号。参数要求:96阶FIR数字滤波器,采样频率1000Hz,采用hamming窗函数设计。

仿真模型如下所示:

其中,叠加信号为:x?t??5sin?100?t??2sin?200?t??sin?2*83.3?t?。Zero-Order Hold的采样周期为1e-3。Digital Filter Design的设置步骤为:首先在Response Type中选择Bandpass(带通滤波器);在Design Method选项中选择FIR,并进一步选择Window(FIR滤波器窗函数法);指定Filter Order为Specify order,并指定为95(96-1=95);在Options选项中选取Hamming;在Frequency Specifications中选择Units为Hz,填写采样频率Fs=1000,通带下限截止频率fc1=70和通带上限截止频率fc2=84。设置完以后点击Design Filter即可得到所设计的FIR滤波器。

Scope1示波器波形为:

1(a)(b)(c)0-150-510-100.020.040.060.080.10.120.140.160.180.2

其中(a)图是注入的83.3Hz的信号,(b)图是叠加信号,(c)图是滤波后的信号。可以看出经过离散采样、数字滤波后分离出了83.3Hz的频率分量。

Scope2示波器反映了原始信号和滤波后信号的相位差,波形为:

1相位差0-100.020.040.060.080.10.120.140.160.180.2

二、刚才讲的是在simulink中搭建仿真模型,如果要用到嵌入式控制系统中,那又该怎么操作呢?首先回顾一下数字滤波器的知识。 数字滤波器是由数字乘法器、加法器和延时单元组成的一种算法或装置。数字滤波器的功能是对输入离散信号的数字代码进行运算处理,以达到改变信号频谱的目的,其实质是用有限精度算法实现的离散时间线性时不变系统,从而完成对信号进行滤波处理的功能。

数字滤波器对信号滤波的步骤如下图所示:

相对于模拟滤波器,数字滤波器没有漂移,能够处理低频信号,频率响应特性可做成非常接近于理想的特性,且精度可以达到很高,容易集成等,这些优势决定了数字滤波器的应用越来越广泛。同时,DSP和FPGA的迅速发展也促进了数字滤波器的发展,并为数字滤波器的硬件实现提供了更多的选择。

? 精度高:模拟电路中元件的精度很难达到1e-3以上,而数字系统17位字长就可以

达到1e-5精度。因此,在一些精度要求很高的滤波系统中,就必须采用数字滤波器来实现。 ? 灵活性大:数字滤波器的性能主要取决于乘法器的各系数,而这些系数是存放在系

统存储器中的,只要改变存储器存放的系数,就可以得到不同的系统,这些都比改变模拟滤波器系统的特性要容易和方便得多,因而具有很大的灵活性。

? 可靠性高:因为数字系统中只有两个电平信号,受噪声及环境条件的影响小,而模

拟滤波器各个参数都有一定的温度系数,易受温度、振动、电磁感应等影响。并且数字滤波器多采用大规模集成电路,大规模集成电路的故障率远比众多分立元件构成的模拟系统的故障率低。 综上,可以采用Matlab等软件来学习数字滤波器的基本知识,计算数字滤波器的系数,研究算法的可行性,对数字滤波器进行前期的仿真。可以采用DSP或FPGA来实现硬件电路。

数字滤波器根据其单位冲激响应函数的时域特性可分为两大类:无限冲激响应(IIR,Infinite Impulse Response)滤波器和有限冲激响应(FIR,Finite Impulse Response)滤波器。按功能分类又可分成:低通滤波器(LPF,Lowpass Filter)、高通滤波器(HPF,Highpass Filter)、带通滤波器(BPF,Bandpass Filter)、带阻滤波器(BSF,Bandstop Filter)。

IIR与FIR数字滤波器的比较:

? IIR滤波器系统函数的极点可以位于单位圆内的任何地方,因此可以用较低的阶数

获得高选择性,所用存储单元少,经济而效率高。但这些是以相位的非线性为代价的。选择性越好,则相位非线性越严重。相反,FIR滤波器却可以得到严格的线性相位,然而由于FIR滤波器系统函数的极点固定在原点,所以只能用较高的阶数获

得高选择性。对于同样的滤波器设计指标,FIR滤波器所要求的阶数可能比IIR滤波器高5-10倍,成本较高,信号延时也较大。如果按相同的选择性和相同的线性相位要求来说,则IIR滤波器必须加全通网络进行相位校正,这同样要大大增加滤波器的阶数和复杂性。

? FIR滤波器可以用非递归方法实现,有限精度的计算不会产生振荡,同时由量化舍

入以及系数的不准确所引起的误差的影响比IIR滤波器要小得多。显然,对IIR滤波器必须留心稳定性的问题,注意极点是否会位于单位圆之外,另外,有限字长效应有时会引起寄生振荡。

? IIR滤波器可以借助于模拟滤波器的成果,一般都有有效的封闭式设计公式可供准

确计算,计算工作量比较小,对计算工具要求不高。FIR滤波器没有现成的设计公式。窗函数法仅仅可以给出窗函数的计算公式,但计算通、阻带衰减仍无显示表达式,其他大多数设计FIR滤波器的方法都需要借助计算机辅助设计。

本文主要介绍FIR滤波器。总结其特点是:没有反馈回路,是无条件稳定系统,其单位脉冲响应是一个有限长序列。其滤波算法实际上是一种乘法累加运算,不断地输入样本,经延时做乘法累加,再输出滤波结果。

三、FDAtool软件详细介绍

FDATool界面左下侧排列了一组工具按钮,从上往下其功能分别如下所述: ? 多速率滤波器(Create a Multirate Filter) ? 滤波器转换(Transform Filter)

? 设置量化参数(Set Quantization Parameters) ? 实现模型(Realize Model)

? 零极点编辑器(Pole/Zero Editor)

? 导入滤波器(Import Filter from workspace) ? 设计滤波器(Design Filter)

点击最后一个按钮,即可进入设计滤波器界面,也即上图所示。

FDAtool界面总共分两大部分,一部分是Design Filter,在界面的下半部,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。 Design Filter部分主要分为:

Response Type(滤波器类型)选项,包括Lowpass(低通)、Highpass(高通)、Bandpass(带通)、Bandstop(带阻)和特殊滤波器。

Design Method(设计方法)选项,包括IIR滤波器的Butterworth(巴特沃思)法、Chebyshev Type Ⅰ(切比雪夫Ⅰ型)法、Chebyshev Type Ⅱ(切比雪夫Ⅱ型)法、Elliptic(椭圆滤波器)法等以及FIR滤波器的Equiripple法、Least-squares(最小乘方)法、Window(窗函数)法等。

Filter Order(滤波器阶数)选项,定义滤波器的阶数,包括Specify order(指定阶数)和Minimum order(最小阶数)。在Specify order中填入所要设计的滤波器的阶数(N阶滤波器,Specify order=N-1),如果选择Minimum order则FDAtool会根据所选择的滤波器类型自动使用最小阶数。

Frequency Specifications选项,可以详细定义频带的各参数,包括采样频率Fs和频带的截止频率。它的具体选项由Response Type选项和Design Method选项决定,例如Bandpass(带通)滤波器需要定义Fstop1(下阻带截止频率)、Fpass1(通带下限截止频率)、Fpass2(通带上限截止频率)、Fstop2(上阻带截止频率),而Lowpass(低通)滤波器只需要定义Fstop1、Fpass1。采用窗函数设计滤波器时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。

Magnitude Specifications选项,可以定义幅值衰减的情况。例如设计带通滤波器时,可以定义wstop1(频率fstop1处的幅值衰减)、wpass(通带范围内的幅值衰减)、wstop2(频率fstop2处的幅值衰减)。当采用窗函数设计时,通带截止频率处的幅值衰减固定为6db,所以不必定义。

Options选项,当选取采用窗函数设计时,该选项可定义,它包含了各种窗函数。

当设计好滤波器后,就可以导出滤波器系数了。以本文所举的低通滤波器设计为例,具体操作为:Targets—Generate C Header,打开界面后,选择Double-precision floating-point,接着点击Generate,将生成.h头文件,里面包含长度为N的数组,此即h(n),将此文件另存下即可。如图所示:

四、为了验证此头文件中的系数,在PLECS软件中,添加信号源、C-Script、示波器等模块,仿真模型图如图所示:

其中,C-Script的Code declarations代码为:

#define in Input(0) #define out Output(0) int i;

float shuru[31]; float sum;

float xishu[31]= {

0, 0.00028297, 0.00120488, 0.00294137,

0.00572661, 0.00979771, 0.01532652, 0.02235230, 0.03072975, 0.04010467, 0.04992470, 0.05948641, 0.06801315, 0.07475209, 0.07907474, 0.08056427,

0.07907474, 0.07475209, 0.06801315, 0.05948641, 0.04992470, 0.04010467, 0.03072975, 0.02235230, 0.01532652, 0.00979771, 0.00572661, 0.00294137, 0.00120488, 0.00028297, 0 };

Output function code代码为: shuru[0]=in;

for(i=30;i>0;i--) {

shuru[i] = shuru[i-1]; }

sum=0;

for(i=0;i<=30;i++) {

sum+=(shuru[i]*xishu[i]); }

out = sum;

启动仿真,将得到和在simulink环境中低通滤波器设计完全一样的结果。需要特别注意的是,C-Script中的Sample time该和FDAtool中的一致,本例设置为1e-4。

更多参考:

1、 PLECS仿真模型(使用PLECS软件打开):

21jie.plecs 31jie.plecs 41jie.plecs 2、 MATLAB仿真模型

FIR_Bandpass.mdl FIR_Lowpass.mdl

3、 他山之石(从网上下载的)

网址:http://www.doc88.com/p-854247195022.html

本文来源:https://www.bwwdw.com/article/g4b2.html

Top