热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

matlab设计数字滤波器,基于Matlab的FIR数字滤波器设计

摘要:提出FIR敷字滤波器的设计方案,并基于Matlab实现滤波仿真。通过使用Matlab信号处理工具箱提供的函数,选择适当的窗函数编写程

摘要:提出FIR敷字滤波器的设计方案,并基于Matlab实现滤波仿真。通过使用Matlab信号处理工具箱提供的函数,选择适当的窗函数编写程序,其中窗函数按照实际信号的处理需求,参数折中选择。实验获得了比较理想的滤波器特性,可以实现较好的滤波作用。而且在实际应用中只需按需求修改滤波器参数,并结合程序的相应改动,即可实现不同功能的滤波器。另外,介绍了利用FDATool设计滤波器的方法,简单修改参数即可实现多种滤波器。

关键词:Matlab;FIR窗函数;FDATool;滤波器

数字滤波器可以过滤时间离散信号,通过对抽样数据进行数字处理来达到频域滤波的目的,目前已经广泛应用在高保真的信号处理,如数字音频、图像处理、数据传输、生物医学等领域。由于计算机技术和大规模集成电路的发展,数字滤波器已可用计算机软件实现。借助Mathb强大的数据处理能力,灵活使用模块集和工具箱,可以按照需求编写程序来实现多种滤波器设计。伴随Matlab的不断发展以及工具箱的不断开发,工作平台的改善,使用Mathb的编程工作量会大大减少。Matlab提供了完整的联机查询、帮助系统,提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析。而这也使得基于Matlab的设计变得方便易于使用。

1 数字滤波器及设计方案

应用数字滤波器处理模拟信号时,首先要对输入模拟信号进行限带、抽样和模/数转换,数字滤波器输入信号的抽样率应大于被处理信号带竟的两倍,其频率响应具有以抽样频率为间隔的周期重复特性,且以折叠频率即1/2抽样频率点呈镜像对称。滤波器的输出信号须经数/模转换、平滑处理。

FIR数字滤波器的输出值u(Kt)与输出的过去值u(Kt-kt)表达关系如下:

78716575_1.jpg

这是不断乘累加的过程,解决了滤波器的系数α问题,再加上乘法和加法计算即可实现滤波器设计。由于FIR滤波器的单位脉冲响应h(n)是有限长序列,因此滤波器没有不稳定的问题,FIR滤波器一般为非递归结构,因此在采用Matlab设计时采用有限精度的计算,以避免出现递归结构中极性震荡等不稳定现象。常见的两种FIR滤波器设计方法是窗函数法和频率采样法。虽然频率采样法可以精确控制采样点的频率响应,但是设计中必须插入过渡点来改善纹波,而且截止频率不易控制,过渡点也需要进一步的优化,对比来看窗函数法则是一种基本的设计理念,设计方法比较成熟。并且Matlab中提供的函数可以方便地实现加窗线性相位FIR滤波器设计,包括了比较常见的低通、带通、高通和带阻数字滤波器。本文采用的是窗函数结合编程的设计方法。

窗函数法的基本思想是先给定理想的滤波器频响为

78716575_2.jpg

78716575_3.jpg

式中:ωc为截止频率;α为采样延迟。

而所要求设计的频响为

78716575_4.jpg,之后的工作便是使

78716575_5.jpg逼近。加窗w(n)对理想滤波器的单位抽样响应hd(n)(见式(3))截断,得到所要设计的h(n)。

78716575_5.jpg

对于FDATool设计法,本文通过选择适当参数,利用Matlab完成。

2 FIR数字滤波器设计

2.1 窗函数法设计FIR滤波器方案

在Matlab中可直接产生窗函数:矩形窗(Rectangle Window),三角窗(Triangular Window),汉宁窗(Hanging Window),凯塞窗(Kaiser Window)等,通过调用系统的函数即可实现窗的加载。具体调用方法如下:调用格式:w=函数名(n),根据长度n产生一个矩形窗w。一般正常的心电信号频率范围在0.05~100 Hz之内,这本身就是一种比较微弱的电信号,当受到身体其他器官的干扰信号后,心电信号将会严重失真。另外还要考虑到电子器件噪声和50 Hz的工频信号的存在。这就需要尽量消除噪声和干扰的影响。这里选取低通滤波器的设计指标为:通带截止频率ωp=0.2π,阻带截止频率ωs=0.3π,最小阻带衰减As≥50 dB。所以得出过渡带宽tr_http://image99.360doc.com/DownloadImg/2016/08/2600/78716575_6.jpg" alt="78716575_6.jpg" />

(2)由性能指标确定窗函数W(n)和窗口长度N。

(3)求得实际滤波器的单位脉冲响应h(n),h(n)即为所设计FIR滤波器系数向量a(n)。

78716575_7.jpg

(4)检验滤波器性能。

Matlab信号处理工具箱提供了各种窗函数、滤波器设计函数和滤波器实现函数。设计中利用Matlab提供的函数firl来实现,编程则是直接调用这些函数简单直观的完成设计。调用格式:firl(n,Wn,‘ftype’,Window),其中n为阶数、Wn为截止频率、ftype是滤波器的类型、Window是窗函数。应用凯塞窗的代码如下:

78716575_8.jpg

程序执行的结果如图1,图2所示。

78716575_9.jpg

从滤波效果图看,所设计的滤波器基本消除了噪声和干扰的影响,客观的得出真实信号。按照设计方案中滤波器的指标,执行函数操作可以得到:N=68,As=59。之后增加参数N值。在该设计中,利用凯塞窗函数,执行了多种N值的改变。伴随N值增大,过渡带变窄,但阻带的最小衰减没有改变。

2.2 FDATool设计方案

FDATool(Filter Design&Analysis Too1)是Matlab信号处理工具箱专用的滤波器设计分析工具,操作简单、灵活,可以采用多种方法设计FIR滤波器。这种方法设计的数字滤波器,可以随时调整滤波器滤披特性,而且滤波结果实时显示在图形区,减少了工作量,有利于滤波器设计的进一步优化。在Matlab命令窗口输入FDATool后回车会弹出FDATool界面,也可在Matlab主界面下方选择“start”→“toolbox”→“ filterdesign”。具体参数选择为:

(1)滤波器类型(filter type)为lowpass;

(2)设计方法(design method)为FIR,使用窗口Window;

(3)滤波器的阶数(fiter order)为15;

(4)窗口类型(Window)为Kaiser,beta为0.5;

(5)fs为48 000 Hz,fc为10 800 Hz。

点击“design filter”即可。值得注意的是,这里选择filter order为15阶,而不是所设计的16阶滤波器。因为常数系数项h(0)=0。通过菜单“analysis”选择“magnitude”和“phase response”即可得到图3,图4的特性显示。“analysis”选择“step response”和“im-pulse”可以得到图5,图6的响应显示。可以看出所设计FIR滤波器的阶跃响应和冲击响应比较接近理想状态。

78716575_10.jpg

78716575_11.jpg

3 结论

从图1~4的特性曲线中可以看出该滤波器的性能基本达到了妻求,滤波作用比较明显。曲线相对比较平稳,能够满足微弱信号滤波器的设计技术指标。特别是从方案二中的相频特性曲线来看,曲线通过原点且为一条平滑直线,说明具有良好的线性相位特性,而这也是在应用中选择FIR数字滤波器的重要原因,但是它的实际效果还要经过实践的检验。FIR幅频特性精度比IIR低,且滤波器所需阶次比较高,但是它拥有很好的线性相位,即不同频率分量的信号经过FIR滤波器后他们的时问差不变。另外,FIR还存在的缺点应加以改善,如信号的延迟偏大。这就考虑到用高性能的DSP器件,由于其处理速度快,此缺点在一点程度上是可以改善的。

4 结语

本文通过设计实例,介绍了利用Matlab实现数字信号处理中的数字滤波器设计,从结果可以看出它们均可以达到技术指标要求,而且方法简单、快捷,大大减轻了工作量。滤波器的设计工作完成后,可以借助Matlah的export操作导出所设计滤波器的系统函数H(x)。由于Matl-ah具有强大的接口功能,仿真后的结果可以很方便的移植到DSP,CPLD或FPGA等器件中。在实际应用中,只需按要求修改滤波器参数,并对程序作较少的改动,即可实现不同的滤波器,实用性较强。



推荐阅读
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了2020年计算机二级MSOffice的选择习题及答案,详细解析了操作系统的五大功能模块,包括处理器管理、作业管理、存储器管理、设备管理和文件管理。同时,还解答了算法的有穷性的含义。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
author-avatar
mobiledu2502875123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有