基于Matlab的数字滤波器设计及均衡器设计1数字滤波器设计背景及目的数字滤波器是一个离散时间系统,是一种按预定的算法,将输入离散时间信号转换为所要求的输出离散时间信号的特定功能装置。数字滤波器具有高精度、高可靠性、可程控改变特性或复用、便于集成等优点。数字滤波器在语言信号处理、图像信号处理、医学生物信号处理以及其他应用领域都得到了广泛应用。数字滤波器有低通、高通、带通、带阻和全通等类型。它可以是时不变的或时变的、因果的或非因果的、线性的或非线性的。应用最广的是线性、时不变数字滤波器,以及FIR滤波器。本次设计的目的是在MatlabR2007a的软件平台上,应用所学知识,设计一款FIR数字滤波器,要求有便于用户操作的用户界面,能完成低通、高通、带通及带阻等常用滤波功能。2数字滤波器设计原理数字滤波器可以按所处理信号的维数分为一维、二维或多维数字滤波器。一维数字滤波器处理的信号为单变量函数序列,例如时间函数的抽样值。二维或多维数字滤波器处理的信号为两个或多个变量函数序列。例如,二维图像离散信号是平面坐标上的抽样值。本次设计的滤波器属于一维数字滤波器。图1信号变换数字滤波器的优点是利用差分方程可求离散系统的瞬态解,如下图2所示。图2滤波器优点FIR滤波器又称为有限脉冲响应滤波器,FIR就来源于名词“有限脉冲响应”的英文单词首字符缩写。FIR传递函数:脉冲响应函数:由于h(k)是一个有限长度的序列,故FIR滤波器称为有限脉冲响应滤波器。FIR滤波器的滤波公式:y(k)=h(0)x(k-m/2)+h(1)x(k-m/2+1)+...+h(m)x(k+m/2)FIR滤波器系数脉冲响应函数设计方法如下其中低通、高通、带通及带阻的设计原理如下图所示。3设计内容7.3搭建GUI界面Matlab环境下的图形用户界面(GUI)是由窗口、光标、按键、菜单、文字说明等对象(Objects)构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。利用GUI控件中自带的按钮,根据需要组成如下图3所示的数字信号发生器的Gui界面。图3用户GUI界面在本设计中,已经给定了用户函数,该函数不能改变,用户可以根据需要输入不同的信号频率,如图中f1、f2和f3。在左下侧用户可以根据需要选择“低通”、“高通”、“带通”及“带阻”等四种不同类型的滤波器。也可以选择不同的滤波方法,如“butter”、“cheby1”、“cheby2”及“ellip”等滤波方法,定义滤波阀值,阶数等参数。在右上侧是原始信号显示窗口,右下侧是滤波后的信号波形及幅值谱。7.3编写M文件使用Matlab自带的滤波器函数,可以很容易的对输入信号进行滤波变换。Butter滤波方式:[ba]=butter(order,[str1str2],'stop');Cheby1滤波方式:[ba]=cheby1(order,0.5,[str1str2],'stop');Cheby2滤波方式:[ba]=cheby2(order,20,[str1str2],'stop');Ellip滤波方式:[ba]=ellip(order,0.5,20,[str1str2],'stop');继续完善其他函数的填写,可以完成数字信号发生器的M文件编写,详细的M文件见附件。7.3运行结果展示图4低通滤波器图5高通滤波器图6带通滤波器图7带阻滤波器4设计心得体会在进行数字滤波器的设计过程中发现,Matlab的数学处理功能确实非常的强大,可以满足对一般信号处理的要求。在设计过程中,我也学习到了很多关于信号处理的实践方法,让我对信号处理及信号的本质有了更深一步的认识,这些都是在书本学习中无法理解的。同时,对信号处理中常见的滤波类型有了清晰的认识,不再停留于课本上简单抽象的定义了。但是,本次设计仅仅提供了简单的信号发生器中输入的信号,不是现实生活中的信号,带有的理想成分太大,得到的结果也是非常的“理想”,如果输入实际生活中的信号,可能本设计需要增添很多相关处理的内容,如:最高信号频率的设计,窗函数截断的影响等等。虽然本设计离实际应用还有一段距离,但是让我对“工程数字信号处理与算法实践”这门课的知识融汇连接在一起,印象深刻。5均衡器设计背景及目的在音响器材中,声音均衡器是一种可以分别调节各种频率成分电信号放大量的电子设备,通过对各种不同频率的电信号的调节来补偿扬声器和声场的缺陷,补偿和修饰各种声源及其它特殊作用,一般调音台上的均衡器仅能对高频、中频、低频三段频率电信号分别进行调节。本次设计利用Matlab搭建的数字声音均衡器来模拟实际中的硬件产品。本次设计的目的是设计一款声音均衡器,可以对1-10000Hz的频率分为10个调节区间进行衰减或加强,并将原信号和处理后的信号的频域图像选择性地播放出来。6均衡器设计原理利用Matlab自带的滤波器函数可以很容易的对声音信号进行不同成分的滤波,如上面设计的低通、高通、带通及带阻滤波器就可以对不同的频段进行滤波。实际生活中通常将声音信号频段分为以下几类,如表1所示。表1声音信号分段根据以上音乐知识,过滤不同的频率段,可以改变本来的音乐。比如过滤掉音乐文件中的高音文件,声音会变得低沉。声音类别超低音低音中低音中音中高音高音超高音频率段20Hz-40Hz40Hz-150Hz150Hz-500Hz500Hz-2KHz2KHz-5KHz7KHz-8KHz8KHz-10KHz效果声音强而有力声音丰满柔和声音浑厚有力声音透彻明亮弦乐的特征音影响声音层次感的频率金属感通透率高7均衡器设计过程7.3搭建GUI界面搭建之后的GUI界面如图8所示。图8均衡器GUI界面7.3编写M文件均衡器的原理就是通过乘以不同的系数来调整不同频带下的幅值,以达到对某些频段加强,对某些频段衰减的作用。因此,首先必须确定这些系数。这可以通过与频段数目相等的滚动条来实现,滚动条最小值设定为0,最大值设定为2,默认值为1,即处在不加强也不衰减的情况。为了强化加强和衰减的效果,采用指数形式的系数,即滚动条位置和系数的关系采用如下形式:当滚动条位置为0,即x=0时,需要完全衰减掉,这时k=0;当滚动条位置为1,即x=1时,不加强也不衰减,这时k=1;当滚动条位置为2,即x=2时,加强100倍,这时k=100;按照这种设置,可以求出滚动条位置和系数的关系式:这样就可以通过读取滚动条的位置来构造相应频段的幅值变化系数了,再用一个新的变量,使其等于各个频段幅值乘以一个调整系数后的累加,就得到了频率均衡之后的信号波形。具体命令如下:Y=zeros(size(y));%%初始化处理后的信号m=10;%%频段数fori=1:m%%按每个频段依次滤波,乘系数操作ifget(handles.radiobutton1,'Value')==1[ba]=butter(N,stop(i:i+1)/Fs);elseifget(handles.radiobutton2,'Value')==1[ba]=cheby1(N,0.5,stop(i:i+1)/Fs);else[ba]=cheby2(N,20,stop(i:i+1)/Fs);endeval(sprintf('x=get(handles.slider%d,''Value'');',i+1));%%获得滚动条位置,由于界面滚动条从slider2开始,所以读入时用i+1t=(99^x-1)/98*filter(b,a,y);%%乘系数Y=Y+t;%%累加获得处理后的信号end由于用来处理的信号y是从原音频wave中分段截取的,这样得到的处理后信号Y也仅仅是一段的,会随着y的变化不断刷新,不过也可以通过写入文件的方式进行保存。在处理声音文件时,为了动态显示信号特征,将极大的数组wave进行分段,每段长度设为5000,n为段数。然后利用变量y,利用循环的方式,每次读取wave数组中一段,并进行后续处理。n=round(size(wave)/5000)-1;forni=0:n-1y=wave((ni*5000)+1:((ni+1)*5000));……End这样就能够对原wav文件进行逐段的分析处理,绘制出来的频谱图也就有动态的效果了。7.3运行结果展示由于本设计是个动态显示过程,不能在文件上直接显示,只给出图片进行展示,详见附件程序及录像。图9运行结果8设计心得体会这次设计基本实现作业要求,跟上次作业相比,本次声音信号具有比较好的动态效果。并将滤波器的设计应用到了均衡器的设计中,对滤波器的设计及认识更加深刻,对滤波器的用途有了更加清晰的认识,也加深了对信号处理及频谱分析的理解。9结束语及致谢经过三次实际操作作业,我对《工程数字信号处理与算法实践》有了系统而清晰的认识,尤其对信号的频谱分析印象深刻,对频谱分析的应用也有了新的理解。虽然学习时间较短,学到的知识离实际应用还存在相当一段距离,但是我对信号处理的基本步骤已经非常熟悉,对不同的信号处理可以解决不同的实际问题有了深刻的感受,熟练掌握了Matlab的基本编程及GUI用户界面的搭建。10参考文献[1]王宏。MATLAB6.5及其在信号处理中的应用。清华大学出版社。2004年10月。