找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[嵌入式/ARM] 基于Matlab GUI的数字滤波器设计及其应用

[复制链接]
admin 发表于 2013-3-26 17:18:33 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
摘  要: 基于数字信号处理原理,在分析数字滤波器设计理论和Matlab编程技术及其GUI图形用户界面设计的基础上,开发了具有交互式特点的数字滤波器软件,界面操作简单方便,可以根据需要选择滤波器类型,输入相关参数,然后选择相应的功能按钮,就可以得到滤波器的特性参数,并进行滤波器的性能分析,打破了以往滤波器设计过程中大量繁琐的数值计算问题,为数字滤波器的设计和应用提供了一个有效的辅助工具。
关键词: 数字信号处理; 数字滤波器; Matlab GUI; 图像处理; 语音信号处理
       数字滤波器通常通过一定的运算关系改变输入信号所含频率成分的相对比例或者滤除某些频率成分来实现滤波,其应用非常广泛。然而, 在传统数字滤波器的设计过程中需要大量繁琐的数值计算,如果手工计算则费时费力。目前,数字滤波器的设计常借助计算机,利用Matlab软件来实现。Matlab中的图形界面编程环境GUIDE为用户开发软件界面提供了强有力的工具。本文在Matlab GUI基础上开发了数字滤波器的设计分析软件,并设计开发了应用于图像处理和语音信号处理模块。用户在使用时只需输入要设计的滤波器所需参数值,选择要设计的滤波器类型,即在分析滤波器特性时选择相应功能按钮就能得出对应的特性。该工具解决了用户在设计数字滤波器时大量繁琐的数值计算,不仅可以作为研究设计数字滤波器的辅助工具,还可以作为相关课程的辅助教学软件。
1 Matlab GUI设计工具简介
       Matlab是一个面向科学与工程的计算软件,它将不同领域的计算用函数的形式提供给用户;用户在使用时,只需调用这些函数并赋予实际参数就能解决实际问题[1]。它涉及数值分析、自动控制、信号处理、图像处理、小波分析及神经网络等几十个领域的计算和图形显示。在Matlab中设计数字滤波器软件的工具有GUI与FDATool,两个工具都可以设计出数字滤波器。FDATool工具可以快速设计各种类型的滤波器,但是这个工具界面单一,用户无法根据需要来设计满意的界面。而图形用户界面GUI(Graphical User Inter-face)的设计是非常灵活的,它主要是一个界面设计工具集,Matlab将所有GUI支持的控件都集成在这个环境中,并可进行各项属性设置[2];用户设计好的图形用户界面保存后生成一个.fig文件,同时自动生成包含图形用户界面初始化和组件界面布局控制代码的M文件,为实现回调函数的编写提供了一个参考框架,包含GUI设计、控制函数及控件的回调函数,主要用来控制GUI展开时的各种特征[3]。对于熟练编程者,不需要GUI向导,直接编写M程序即可生成人机交互的有效图形用户界面。
2 数字滤波器的设计理论
2.1系统设计主流程及主界面

        系统设计主流程如图1所示,系统主功能操作界面设计如图2所示。
    20121107045313244604113.gif
   2.2 数字滤波器的设计步骤
  (1)确定指标:在设计一个滤波器之前,必须首先根据实际的工程需要确定滤波器的技术指标。通常选择数字滤波器实现选频操作。因此,指标的形式一般在频域中给出幅度和相位响应。幅度指标主要以两种方式给出:①绝对指标,它提供对幅度响应函数的要求,一般应用于FIR滤波器的设计;②相对指标,它以分贝值的形式给出要求,在工程实际应用中,这种指标最受欢迎。对于相位响应指标形式,通常希望系统在通频带内有线性相位。运用线性相位响应指标进行滤波器设计具有如下优点:①只包含实数算法,不涉及复数运算;②不存在延迟失真,只有固定数量的延迟;③长度为N的滤波器(阶数为N-1),计算量为N/2数量级。因此,本文中滤波器的设计就以线性相位FIR滤波器的设计为例。
  (2)逼近:确定了技术指标后,就可以建立目标数字滤波器模型。通常采用理想的数字滤波器模型。之后,利用数字滤波器的设计方法,设计出一个实际滤波器模型来逼近给定的目标。
  (3)性能分析和计算机仿真:上两步的结果是得到以差分、系统函数或冲激响应描述的滤波器。根据这个描述就可以分析其频率特性和相位特性,以验证设计结果是否满足指标要求;或者利用计算机仿真实现设计的滤波器,再分析滤波结果来判断。
2.3 IIR数字滤波器的Matlab设计
     Matlab信号处理工具箱提供了几个直接设计IIR数字滤波器的函数,这些函数把IIR数字滤波器典型设计中的复杂实现过程集成为一个整体,为设计IIR数字滤波器带来了极大的方便[4]。主要函数有:(1)函数butter:设计Butterworth滤波器,其特性是通带内的幅度响应最大限度的平滑,但损失了截止频率处的下降斜度。(2)函数chebyl:设计Chebyshev I型滤波器,其通带内为等波纹,阻带内为单调。Chebyshev I型滤波器的下降斜度比II型大,但其代价是通带内波纹较大。(3)函数cheby2:设计Chebyshev II型滤波器,其通带内为单调,阻带内等波纹。Chebyshev II型滤波器的下降斜度比I型小,但其阻带内波纹较大。(4)函数ellip:设计椭圆滤波器,与前几种滤波器相比,ellip函数可以得到下降斜度更大的滤波器,得到通带和阻带均为等波纹;一般情况下,椭圆滤波器能以最低的阶实现指定的性能指标。以上4种函数都可以设计低通、高通、带通和带阻的数字和模拟滤波器。
     IIR数字滤波器在系统中界面设计如图3所示,其中左方为滤波器类型、通带选择及参数输入区,可以根据需要在Butterworth型、Chebyshev I型、Chebyshev II型和椭圆滤波器4种类型中选择任意一种滤波器,并且可以在低通、高通、带通和带阻4种通带中选择任意一种,然后输入相关参数,点击“运行”按钮,就可以设计出相应的IIR数字滤波器;右上方曲线为滤波器的幅频响应图,右下方曲线为滤波器的相频响应图。图3为Chebyshev I型带通IIR数字滤波器在系统中的设计实现,其他类型IIR数字滤波器设计界面与之类似。
    20121107045313338354114.gif
   
2.4 FIR数字滤波器的Matlab设计
     FIR滤波器通常采用窗函数法设计。窗函数法设计FIR滤波器的基本思想是:根据给定的滤波器技术指标,选择滤波器长度N和窗函数ω(n),使其具有最窄宽度的主瓣和最小的旁瓣,其核心是从给定的频率特性,通过加窗确定有限长单位脉冲响应序列h(n)[5]。工程中常用的窗函数共有7种,即矩形窗(Boxcar)、三角窗(Triang)、巴特利特(Bartlett)窗、汉宁(Hanning)窗、汉明(Hamming)窗、布莱克曼(Blackman)窗和凯塞(Kaiser)窗。
     FIR数字滤波器设计界面如图4所示,其中左边为滤波器类型、通带选择及参数输入区,可以根据需要在Boxcar、Triang、Bartlett、Hanning、 Hamming、 Blackman和Kaiser等7种窗函数中选择任意一种设计滤波器,并且可以在低通、高通、带通和带阻4种通带中选择任意一种,然后输入相关参数,点击“运行”按钮,就可以设计出相应的FIR数字滤波器;右上方曲线为滤波器的幅频响应图,右下方曲线为滤波器的相频响应图。图4为Kaiser型高通FIR数字滤波器在系统中的设计实现,其他类型FIR数字滤波器设计界面与之类似。
    20121107045313400844115.gif
   3 数字滤波器的应用设计
3.1数字滤波器在图像处理中的应用

     设图像信号f(x,y)通过线性不变系统h(x,y)的结果是g(x,y),即g(x,y)=f(x,y)*h(x,y),根据卷积定理,在频域上应有G(u,v)=F(u,v)*H(u,v)。其中,G(u,v)、F(u,v)、H(u,v)分别是g(x,y)、f(x,y)和h(x,y)的傅里叶变换[6]。频域增强的主要步骤是:(1)计算图像的傅里叶变换;(2)将其与一个根据要求设计的转移函数相乘; (3)再将其结果进行傅里叶反变换得到增强的图像。实际上,图像的能量大部分集中在幅频的低频和中频段,而图像的边缘和噪声对应于高频部分。因此,数字滤波器在图像处理中主要应用于低通和高通滤波,低通滤波能降低高频成分幅度,过滤噪声,以减弱噪声的影响,以增强图像;而高通滤波使图中各区域的边界得到较显着增强的同时滤掉了低频分量,使图中原来较平滑区域内部的灰度动态范围被压缩,因而整幅图像变得比较昏暗,但图像的轮廓却十分明显。
     数字滤波器在图像处理中的应用设计界面,可以根据需要在低通、高通滤波器之间选择,然后调入要处理图像,点击“处理图像”按钮,即可看到图像滤波效果。图5为数字滤波器在图像处理方向的低通应用设计界面,右上图为原始图像,右下图为加入了噪声后的图像,左下图为经过低通滤波后的图像。从图5可以看出,低通滤波器能有效地过滤图像中的高频加性噪声,增强图像。
    20121107045313478974116.gif
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-29 11:27 , Processed in 0.057177 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表