MATLAB中用FDATool设计滤波器及使用

该文章讲述了MATLAB中用FDATool设计滤波器及使用.

1. 在Matlab中键入fdatool运行Filter Design and Analysis Tool。具体使用请参见Matlab Help中的Signal Processing Toolbox->FDATool。

2. 在fdatool工具中应该注意的几个问题:(a)Fstop(阻带截止频率)不能大于或等于采样频率Fs/2,这是由于数字滤波器设计的方式决定的。(b)将设计好的滤波器导出,可以采用两种方式Export the filter either as filter coefficients variables or as a dfilt or mfilt filter object variable。(详细说明参见Matlab Help中的Signal Processing Toolbox-> FDATool-> Exporting a Filter Design。

导出:File---Export弹出EXPORT对话框,选择“Export As”为“Objects”,“Varable Names”可以更改,默认为Hd。

3. (a)如果导出的是dfilt or mfilt filter object variable,则可以用[b, a] = tf(Hd)将dfilt filter object转换为转移函数形式,然后用    d=filter(b,a,x); 使用这个滤波器。其中:filter是默认函数,b、a是刚刚设计的传递函数参数,x是原始采集信号,d为滤波后的信号。 x=importdata('E:\matlab_work\xy\bb\O6.txt');

N=length(x); %取长度

fs=4000; %采样频率

t=(0:N-1)/fs; 输出Hd;

[b,a]=tf(Hd);%得到传递函数

d=filter(b,a,x); subplot(311); plot(t,x); title('原始信号');

xlabel('t');

ylabel('y');

grid on;

基于 fdatool工具的数字滤波器的matlab设计 

数字滤波器的matlab设计

1.1    fdatool界面设计

1.1.1   fdatool的介绍

fdatool(filter design & analysis tool)是matlab信号处理工具箱里专用的滤波器设计分析工具,matlab6.0以上的版本还专门增加了滤波器设计工具箱(filter design toolbox)。fdatool可以设计几乎所有的基本的常规滤波器,包括fir和iir的各种设计方法。它操作简单,方便灵活。

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

filter type(滤波器类型)选项,包括lowpass(低通)、highpass(高通)、bandpass(带通)、bandstop(带阻)和特殊的fir滤波器。

design method(设计方法)选项,包括iir滤波器的butterworth(巴特沃思)法、chebyshev type i(切比雪夫i型)法、 chebyshev type ii(切比雪夫ii型)法、elliptic(椭圆滤波器)法和fir滤波器的equiripple法、least-squares(最小乘方)法、window(窗函数)法。

filter order(滤波器阶数)选项,定义滤波器的阶数,包括specify order(指定阶数)和minimum order(最小阶数)。在specify order中填入所要设计的滤波器的阶数(n阶滤波器,specify order=n-1),如果选择minimum order则matlab根据所选择的滤波器类型自动使用最小阶数。

frenquency specifications选项,可以详细定义频带的各参数,包括采样频率fs和频带的截止频率。它的具体选项由filter type选项和design method选项决定,例如bandpass(带通)滤波器需要定义fstop1(下阻带截止频率)、fpass1(通带下限截止频率)、fpass2(通带上限截止频率)、fstop2(上阻带截止频率),而lowpass(低通)滤波器只需要定义fstop1、fpass1。采用窗函数设计滤波器时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。

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

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

1.1.2  带通滤波器设计实例

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

本例中,首先在filter type中选择bandpass(带通滤波器);在design method选项中选择fir window(fir滤波器窗函数法),接着在window specifications选项中选取hamming;指定filter order项中的specify order=95;由于采用窗函数法设计,只要给出通带下限截止频率fc1和通带上限截止频率fc2,选取fc1=70hz,fc2=84hz。设置完以后点击design filter即可得到所设计的fir滤波器。通过菜单选项analysis可以在特性区看到所设计滤波器的幅频响应、相频响应、零极点配置和滤波器系数等各种特性。设计完成后将结果保存为1.fda文件。

在设计过程中,可以对比滤波器幅频相频特性和设计要求,随时调整参数和滤波器类型,

以便得到最佳效果。其它类型的fir滤波器和iir滤波器也都可以使用fdatool来设计。

图1 滤波器幅频和相频响应(特性区)

fig.1 magnitude response and phase response of the filter

1.2 程序设计法

在matlab中,对各种滤波器的设计都有相应的计算振幅响应的函数【3】,可以用来做滤波器的程序设计。

上例的带通滤波器可以用程序设计:

c=95;                         %定义滤波器阶数96阶

w1=2*pi*fc1/fs;

w2=2*pi*fc2/fs;                %参数转换,将模拟滤波器的技术指标转换为数字滤波器的技术指标

window=hamming(c+1);         %使用hamming窗函数

h=fir1(c,[w1/pi w2/pi],window);   %使用标准响应的加窗设计函数fir1

freqz(h,1,512);                 %数字滤波器频率响应

在matlab环境下运行该程序即可得到滤波器幅频相频响应曲线和滤波器系数h。篇幅所限,这里不再将源程序详细列出。

2   simulink仿真

本文通过调用simulink中的功能模块构成数字滤波器的仿真框图,在仿真过程中,可以双击各功能模块,随时改变参数,获得不同状态下的仿真结果。例如构造以基波为主的原始信号,,通过simulink环境下的digital filter design(数字滤波器设计)模块导入2.1.2中fdatool所设计的滤波器文件1.fda。仿真图和滤波效果图如图2所示。

图2 simulink仿真图及滤波效果图

fig.2 simulated connections and waveform

可以看到经过离散采样、数字滤波后分离出了83.3hz的频率分量(scope1)。之所以选取上面的叠加信号作为原始信号,是由于在实际工作中是要对已经经过差分滤波的信号进一步做带通滤波,信号的各分量基本同一致,可以反映实际的情况。本例设计的滤波器已在实际工作中应用,取得了不错的效果。

matlab的fda工具使用方法的更多相关文章

  1. 基于MATLAB的多项式数据拟合方法研究-毕业论文

    摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式 ...

  2. MATLAB中FFT的使用方法

    MATLAB中FFT的使用方法 说明:以下资源来源于<数字信号处理的MATLAB实现>万永革主编 一.调用方法X=FFT(x):X=FFT(x,N):x=IFFT(X);x=IFFT(X, ...

  3. 理解 OpenStack + Ceph (8): 基本的 Ceph 性能测试工具和方法

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  4. IOZONE测试工具使用方法

    iozone介绍: iozone(www.iozone.org)是一个文件系统的benchmark工具,可以测试不同的操作系统中文件系统的读写性能. 可以测试 Read, write, re-read ...

  5. IOZONE测试工具使用方法(转载)

    IOZONE主要用来测试操作系统文件系统性能的测试工具,该工具所测试的范围主要有,write , Re-write, Read, Re-Read, Random Read, Random Write, ...

  6. Data Base Mysql迁移到SqlServer 2008工具使用方法

    Data Base  Mysql迁移到SqlServer 2008工具使用方法 一.下载及安装: 二.

  7. 例举在诊断Oracle性能问题时,常用的工具、方法

    例举在诊断Oracle性能问题时,常用的工具.方法 解答: 1)简单一点的可以用toad及dbartisan这样的工具. 2)纯做性能监测,比较出色的有spolight和emc的I3,这两个软件都比较 ...

  8. MATLAB实例:聚类初始化方法与数据归一化方法

    MATLAB实例:聚类初始化方法与数据归一化方法 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. 聚类初始化方法:init_methods.m f ...

  9. Apache ab测试工具使用方法(无参、get传参、post传参)(转)

    转自Apache ab测试工具使用方法(无参.get传参.post传参) Ab测试工具是apache自带的测试工具,具有简单易上手的特性,下面我总结一下我的使用方法,首先去官方下载apache程序包, ...

随机推荐

  1. JavaWeb Filter

    1. 过滤器概述 1.1. 什么是过滤器 Filter译为过滤器,是JavaWeb的三大组件之一,用于在Servlet之外对Request或者Response进行修改.对于Web应用程序来说,过滤器是 ...

  2. static变量的作用

    在C语言中,关键字static的意思是静态的,有3个明显的作用: 1. 在函数体内,静态变量具有记忆作用,即一个被声明为静态的变量在这一函数被调用的过程中其值维持不变. 2. 在模块内(但在函数体外) ...

  3. Reflection01_获取Class对象

    1.java 代码: package reflectionZ; public class TreflectionZ { public static void main(String[] args) t ...

  4. Spring 自定义标签配置

    前景:经常使用一些依赖于Spring的组件时,发现可以通过自定义配置Spring的标签来实现插件的注入,例如数据库源的配置,Mybatis的配置等.那么这些Spring标签是如何自定义配置的?学习Sp ...

  5. mysql学习笔记(window下简单使用+Navict)

    之前安装过mysql.最近刚好要重新翻出来看看 发现又忘记了那些命令.还是要百度.所以不如自己整理下 尽管网上有很多相关的介绍.当时想对的不如自己整理出来的舒服 首先是下载安装.网上有很多就不一一罗列 ...

  6. yii2:如果获取config/web.php配置的值?

    return [ 'version' => '1.0.1', 'category-map' => [ 1 => '样式1', 2 => '样式2', 3 => '样式3' ...

  7. yii2输出sql

    yii2如何输出sql语句? 单表查询sql: 我的model是:coupon,那么sql输出为: $a = coupon::find()->createCommand()->getRaw ...

  8. java正则表达式(基础篇)

    1.数量表达 {n} :出现n次 {m,n}:最少出现m次,最多出现n次 *:表示出现>=0次,相当于{0,} +:表示出现>=1次,相当于{1,} ?:表示出现1次或0次 |:左右两边正 ...

  9. Ajax基础(一)--创建请求

    浏览器创建ajax请求: 1.如果是Firefox.Opera.Safari等高级浏览器,可使用XMLHttpRequest()方式创建一个新的ajax请求对象. 如果是IE浏览器,则使用Active ...

  10. C# 运行时替换方法(需要unsafe编译)

    /* https://stackoverflow.com/questions/7299097/dynamically-replace-the-contents-of-a-c-sharp-method ...