《数字音频均衡器设计.pdf》由会员分享,可在线阅读,更多相关《数字音频均衡器设计.pdf(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 目 录 摘 要 1 ABSTRACT 1 1 前言 2 2 设计原理 4 2.1 均衡器分类 4 2.2 数字滤波器 5 2.2.1 数字滤波器的原理简介 5 2.2.2 FIR 与 IIR 滤波器的比较与选择 6 2.2.3 IIR 数字滤波器的设计方法 6 2.3 均衡器的原理 7 2.4 软件设计 7 2.4.1 数据流图 7 2.4.2 模块划分 8 3 软件实现 9 3.1 界面设计 9 3.2 均衡器模块的实现 11 3.3 Filter 函数 12 3.4 实时显示的实现 12 4 运行实例与实验分析 13 4.1 运行实例 13 4.2 实验分析 17 5总结与展望 18
2、5.1 总结 18 5.2 展望 18 参考文献 19 致 谢 20 附录 21 1 摘 要 MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用 MATLAB 函数集)扩展了 MATLAB 环境,以解决这些应用领域内特定类型的问题。通过 Matlab 强大的信号仿真功能,分析数字音频均衡器的设计要求,对各种数字音频信号进行滤波处理,设计出一种比较合理的数字均衡器,最后对该数字均衡器进行综合测试并改进,使其达到要求的指标。关键词:均衡器;MATLAB;数字滤波器;ABSTRACT MATLA
3、B is very wide range of applications,including signal and image processing,communications,control system design,test and measurement,financial modeling and analysis,and computational biology and many other applications.Toolbox additional(separate MATLAB function provided by a dedicated set)extends t
4、he MATLAB environment to solve these applications within a specific type of problem.Through a strong signal simulation capabilities,a kind of reasonable digital equalizer has been designed by analysising the design requirements of digital equalizers and makig filtering deal to a variety of digital e
5、qualizers.At last,the standard has been reached after the integrated test and improvement for this digital equalizer.Key words:Equalizer;MATLAB;Digital filter;2 1 前言 随着数字化技术的快速、深入发展,人们对数字化电子产品所产生的图像、图形以及声音等质量的要求越来越高。在声音的拾取过程及通过音响设备的传送过程中,由于设备或器件的原因,其幅度对频率的响应往往不一致,这样就达不到原来的听觉效果,音频均衡器是音响设备中常用的一种音效处理技术
6、,目的是对某一频段内的信号进行增强或衰减,以改善音响设备输出的频响特性,提高听觉效果。一个好的均衡器能起到以下几个方面的作用:(1)能校正音频设备所产生的频率失真;(2)校正由于建筑学共振性的不均匀所带来的传输增益的频率失真;(3)调整某些易反馈的频率成分,抑制声反馈,提高会场增益;(4)在艺术创作中,利用它来刻画演员和乐器的音色修改,提高艺术效果。现有的许多播放器都具有均衡器的功能,如千千静听(如图 1 所示)等。通过调节均衡器可以得到最佳音乐状态。图 1 千千静听的均衡器 Figure 1 the equalizer of TT player 3 MATLAB 是一个数据分析和处理功能十分
7、强大的工程实用软件,它的滤波器设计工具箱为实现声音信号的数字滤波提供了十分方便的函数和命令,本文将给出基于MATLAB 的数字均衡器(图示均衡器)的设计方法,功能包括:(1)WAV 声音信号获取,即从文件(*.wav)读取音频信息;(2)八段数字均衡器设定,具体按照表 1 中的频段,其中前两个频段合并在一起;(3)滤波,包括生成低通、高通、带通滤波器并显示滤波器的频率特征曲线;(4)播放,播放滤后音频信号并实时显示波形及频谱特性。3060Hz 沉闷 如没有相当大的响度,人耳很难感觉。60100Hz 沉重 80Hz 附近能产生极强的“重感”效果,响度很高也不会给人舒服的感觉,可给人以强烈的刺激作
8、用。100200Hz 丰满 200500Hz 力度 易引起嗡嗡声的烦闷心理。5001KHz 明朗 800Hz 附近如提升 10dB,会明显产生一种嘈杂感,狭窄感。1K2KHz 透亮 2800Kz 附近明亮感关系最大。2K4Kz 尖锐 3400Hz 易引起听觉疲劳。4K8Kz 清脆 6800Hz 形成尖啸,锐利的感觉。8K16Kz 纤细 7.5KHz 音感清彻纤细。表 1 频率的音感特征 Table 1 Frequency characteristics of sound sense 由此可见 150Hz 以下(低音)应是丰满、柔和而富有弹性;150Hz-500Hz(中低音)应是浑厚有力百不混浊
9、;500Hz-5KHz(中高音)应是明亮透彻而不生硬;5KHz以上(高音)应是纤细,圆顺而不尖锐刺耳。整个频响特性平直时:声音自然丰满而有弹性,层次清晰圆顺悦耳。频响多峰谷时:声音粗糙混浊,高音刺耳发毛,无层次感扩声易发生反馈啸叫。4 2 设计原理 2.1 均衡器分类 2.1.1均衡器分类 均衡器分为三类:图示均衡器,参量均衡器和房间均衡器。1图示均衡器:亦称图表均衡器,通过面板上推拉键的分布,可直观地反映出所调出的均衡补偿曲线,各个频率的提升和衰减情况一目了然,它采用恒定 Q 值技术,每个频点设有一个滑动条,无论提升或衰减某频率,滤波器的频带宽始终不变。常用的专业图示均衡器则是将 20Hz2
10、0kHz 的信号分成 8 段、10 段、15 段、27 段、31 段来进行调节。这样人们根据不同的要求分别选择不同段数的频率均衡器。一般来说 10 段均衡器的频率点以倍频程间隔分布,15 段均衡器是 2/3 倍频程均衡器,31 段均衡器是 1/3 倍频程均衡器,在比较重要的需要精细补偿的场合下,图示均衡器结构简单,直观明了,故在专业音响中应用非常广泛。2参量均衡器:亦称参数均衡器,对均衡调节的各种参数都可细致调节的均衡器,多附设在调音台上,但也有独立的参量均衡器,调节的参数内容包括频段、频点、增益和品质因数 Q 值等,可以美化(包括丑化)和修饰声音,使声音(或音乐)风格更加鲜明突出,丰富多彩达
11、到所需要的艺术效果。3房间均衡器,用于调整房间内的频率响应特性曲线的均衡器,由于装饰材料对不同频率的吸收(或反射)量不同以及简正共振的影响造成声染色,所以必须用房间均衡器对由于建声方面的频率缺陷加以客观地补偿调节。频段分得越细,调节的峰越尖锐,即 Q 值(品质因数)越高,调节时补偿得越细致,5 频段分的越粗则调节的峰就比较宽,当声场传输频率特性曲线比较复杂时较难补偿。2.1.2 图示均衡器的实现关键 此设计的实现关键是设计出满足一定性能指标的各个数字滤波器,构成一个覆盖整个音频频段的滤波器组。2.2 数字滤波器 2.2.1 数字滤波器的原理简介 数字滤波器的功能是把输入序列通过一定的运算,变换
12、成输出序列。数字滤波器一般可用两种方法实现:一种是根据描述数字滤波器的数学模型或信号流程图,用数字硬件构成专用的数字信号处理机,即硬件方式;另一种是编写滤波器运算程序,在计算机上运行,即软件方式。考虑到软件的灵活性及易于实现,本文采用软件方式实现数字滤波器。数字滤波器有无限冲激响应(IIR)和有限冲激响应(FIR)两种。下面分别介绍:(1)IIR 滤波器 IIR 滤波器的特点是:单位冲激响应 h(n)是无限长的;系统函数 H(z)在有限长 Z平面(0|Z|0 处收敛,极点全部在 z=0 处(即 FIR 一定为稳定系统);结构上主要是非递归结构,6 没有输出到输入反馈。但有些结构中也包含有反馈的
13、递归部分。其系统函数的一般形式为 (3)对应的差分方程为 (4)FIR 系统的基本结构有直接型、级联型、快速卷积型、频率取样型等。2.2.2 FIR 与 IIR 滤波器的比较与选择 IIR 滤波器可以用比 FIR 滤波器少的阶数来满足相同的技术指标,这样,IIR 滤波器所用的存储单元和所用的运算次数都比 FIR 滤波器少。FIR 滤波器可得到严格的相位,而 IIR 滤波器不能得到。事实上,IIR 滤波器的选频特性越好,它的相位的非线性就越严重。因此在需要严格线性相位的情况下应该选择 FIR 滤波器。IIR 滤波器可利用模拟滤波器现成的设计公式、数据和表格,因而计算工作量较小,对计算工具要求不高
14、。FIR 滤波器没有现在的设计公式,对计算工具要求较高,需要借助计算机来设计。另外,IIR 滤波器主要是设计规格化的、频率特性为分段常数的标准低通、高通、带通、带阻和全通滤波器,而 FIR 滤波器可设计出理想正交变换器、理想微分器、线性调频器等各种网络,适应性较广。总之,IIR 和 FIR 这两种滤波器各有特点,在实际应用中空间选择中哪种滤波器,就从多方面的因素来考虑。对于数字均衡器,一方面是用于处理语音信号,另一方面需要用到频率特性分段的带通滤波器,因此选用 IIR 滤波器。下面介绍 IIR 滤波器的设计方法。2.2.3 IIR 数字滤波器的设计方法 设计步骤大致分以下三步:(1)设计模拟滤
15、波器。根据实际需要确定滤波器的参数,利用的滤波器的设计公式设计出模拟滤波器并得到其传递函数 H(s),常用的滤波器有巴特沃斯滤波器、椭圆滤波器和切比雪夫滤波器;(2)将模拟滤波器转换成数字滤波器。利用冲激响应不变法或双线性变法将 H(s)转换成 H(z),不同的设计方法对应于不同的 s 平面到 z 平面的映射公式;7(3)频率变换。上述方法得到的是低通滤波器,利用变换公式作频率变换得到高通、带通滤波器。2.3 均衡器的原理 均衡器的基本功能是调节各频段的信号强弱,为了满足该功能,本文采用如下的方法:Step1:设计出对应八个频段的八个带通滤波器;Step2:对原始信号分八路用八个带通滤波器进行
16、滤波;Step3:将八个滤波器的滤波结果加权求和,权值的设计与均衡器的调节要求一致。这样最终得到的结果便是所需要的均衡结果。设原始输入信号为 x(n),第 i 路的输出信号为,第 i 路的权值为,均衡器的输出信号为 y(n),则有 (5)(6)式中,、为滤波器的参数,N 为滤波器的阶数。2.4 软件设计 2.4.1 数据流图 数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何具体的物理元素,它只是描绘信息在软件中流动和被处理的情况。设计数据流图时只需考虑系统必须完成的基本逻辑功能,而不用考虑具体实现,因而它是进行软件设计很好的出发点
17、。面向数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。结合上一节的内容,可以得出软件的数据流图如图 2 所示。8 图 2 均衡器的数据流图 Figure 2 The DFD of equalizer 2.4.2 模块划分 模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户需求。根据人类解决一般问题的经验,如果一个问题由两个问题组合而成,那么它的复杂程度大于分别考虑每个问题时的复杂程度之和,也就是说把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。这就是模块化的根据。在模块划分时应遵循如
18、下规则:改进软件结构提高模块独立性;模块规模应该适中;深度、宽度、扇出和扇入都应适当;模块的作用域应该在控制域之内;力争降低模块接口的复杂程度;设计单入口单出口的模块;模块功能应该可以预测。本着上述的启发式规则,对软件进行如图 3 所示的模块划分。9 图 3 数字均衡器的模块划分 Figure 3 Module division 如上图所以,将数字均衡器划分为三个模块:输入模块、滤波模块和图形显示模块。其中输入模块完成的功能是打开 WAV 格式文件,通过wavread 这个函数读取音频文件,通过 wavplay 这个函数播放音频文件。滤波模块实现的功能是滤波器的生成和实时 图形显示模块则实现波
19、形的实时显示和频谱的实时显示。通过 matlab 提供的 GUIDE 工具为可视化编程工具,将三个模块有机的结合,实现均衡器的预期功能。3 软件实现 3.1 界面设计 MATLAB 是 Mathworks 公司推出的数学软件,它将数值分析、矩阵计算、信号处理和图形显示结合在一起,为众多学科领域提供了一种简洁、高效的编程工具。它提供的GUIDE 工具为可视化编程工具,使得软件的界面设计像 VB 一样方便。故本文采用MATLAB 作为主要编程语言实现数字均衡器。为了实现预期的功能,设计如图 4 所示的界面。数字均衡器 输入模块 滤波模块 图形显示模块 WAV文件打开 滤波器生成 实时滤 波 实时波
20、形显 示 实时频谱 显 示 10 图 4 频谱分析仪的界面设计 Figure4 Interface design 左边最上面的部分为标题区,用于显示软件标题等信息,不具人机交互功能。再往下是文件输入,只支持 WAV 格式的音频文件。“原声播放”用于播放输入的原信频信号,区别于滤波后的信号,用于对比滤波前后的信号。再往下是均衡器区。八个滚动条对应八个带通滤波器的权值,在中间时为 1,最下为0,最上为 10。“滤波”后才能“播放”,这是考虑到 MATLAB 对多线程机制支持得不好,不宜使用一边滤波一边播放的方法。左下角是条形图,它是许多音频软件使用的频谱输出方式。右边的上面是滤波器,可以指定各种类
21、型与参数。“类型”单选框用于选择低通、带通、高通滤波器。“生成滤波器”可以产生一个符合条件的滤波器,并在下面的图中显示滤波器的频率特征曲线。“滤波”用于对输入的音频信号用生成的滤波器滤波。再往下则分别是时域波形与频谱分析的图形显示,均为实时显示。在界面设计时为避免错误的操作,在某些按钮不能使用时必须将其设置为不可用,而它们能够使用时立即设置为可用。例如,没有打开音频文件时“滤波”按钮不可用,打开后“滤波”按钮可用;点击“滤波”前,“播放”不可用,点击“滤波”并完成滤波后,“播放”则变为可用。11 3.2 均衡器模块的实现 均衡器模块功能是生成带通滤波器并对原信号滤波。为了便于程序的扩充与修改,
22、将表 1 中的频段数据独立出来,如下 handles.fband=20 100 200 500 1000 2000 4000 8000 16000;%频段划分 均衡器的功能主要在“滤波”按钮的回调函数中实现,下面具体介绍 开始需要得到滤波器的参数:频带与阶数,如下 order=str2double(get(handles.order,String);%获得设定的阶数值 num=8;%共计 8 段滤波 fband=handles.fband;接着就是产生滤波器并滤波了,每次滤波后产生的 yi(n)如果都存到一个变量中,则需要 8 个这样的变量,对于输入信号量很大时将需要大量的内存空间,为此,本文
23、采用累加的方式,这样只用一个变量去存储滤波结果。nn=length(handles.y);handles.yy=zeros(size(handles.y);for i=1:num if get(handles.butterworth,Value)=1%巴特沃斯滤波器 b a=butter(order,2*fband(i:i+1)/handles.Fs);elseif get(handles.cheby1,Value)=1%切比雪夫 1 滤波器 b a=cheby1(order,0.5,2*fband(i:i+1)/handles.Fs);elseif get(handles.cheby2,Va
24、lue)=1%切比雪夫 2 滤波器 b a=cheby2(order,20,2*fband(i:i+1)/handles.Fs);elseif get(handles.ellip,Value)=1%椭圆滤波器 b a=ellip(order,0.5,20,2*fband(i:i+1)/handles.Fs);else errordlg(No filter type chosen or filter type error!);end eval(sprintf(k=get(handles.band%d,Value);,i);y=(9k-1)/8*qfilter(b,a,handles.y);%滤波
25、加权 handles.yy=handles.yy+y;%求和 guidata(hObject,handles);%保存数据 end 12 在程序中有一句 y=(9k-1)/8*qfilter(b,a,handles.y),作用是加权以便下一句的求和,其中 k 是从滚动条中得到的参数,从 0 到 2,但需要的权值是从 0 到 10,令 w 为需要的权,即,由于实际需要 w 为指数变化,故设 (7)代入 w=0,k=0;w=1,k=1;w=10,k=2 解得 a=1/8,b=9,c=-1,从而有上述代码。3.3 Filter 函数 MATLAB 控制系统工具箱提供了一个filter函数,可以计算差
26、分方程描述的系统的响应,其调用形式为:y=filter(b,a,f)(8)其中,、分别是系统差分方程左、右端的系数向量,f 表示输入向量,y 表示输出向量。输出序列的长度与输入序列的长度相同。但是其运行速度较慢,由于 filter 函数的执行速度是整个软件速度的瓶颈,故需要提高其速度。可以结合 C+实现,以提高其速度,这里不再进一步研究。3.4 实时显示的实现 软件的功能要求实时显示波形与频谱分析结果,这里采用分批处理的方法。即先取一批信号,将其播放出来,同时进行 FFT,并绘出时域波形与频谱分析结果,然后取下一批信号由于各批信号间的时间间隔很小,从而感觉像连续播放,而时域波形与频谱则是实时地
27、变化。该功能主要在“播放”按钮的回调函数中实现 N=length(handles.yy);n=4096;step=n/handles.Fs;from=1;to=n;ymax=max(handles.y);ymin=min(handles.y);f=linspace(0,handles.Fs/2,n/2);13 fband=handles.fband;num=length(fband)-1;tic while to=N;y=handles.yy(from:to,:);pause(step-toc*0.99);wavplay(y,handles.Fs,async);tic P=fft(y,n);P
28、yy=2*abs(P)/n;loglog(handles.axes1,f,Pyy(1:n/2);axis(handles.axes1,fband(1)fband(num+1)1e-3 ymax);plot(handles.axes2,y);ylim(handles.axes2,ymin ymax);from=from+n;to=to+n;end 采用异步播放方式可以使得播放不占用主线程,从而使得播放效果不会很卡。为了使得播放流畅,需要与 pause 的使用结合,具体方法为用 tic 和 toc 计算出其它代码运行时间,然后用播放时间减去其它代码运行时间,从而得到需要暂停运行的时间。4 运行实例
29、与实验分析 4.1 运行实例 图 5 是程序的运行的一个实例,可以看到,基本上可以实现各个频段的均衡与调结。但是并不能完全滤掉某个频段的信号。MATLAB 的 filter 的运行时间为 0.313 秒,如图 6所示 14 图 5 运行结果实例 Figure5 Examples of the results 图 6 MATLAB 的 filter 的运行时间 Figure6 MATLAB run-time of the filter 下面分别分析程序运行实例中选择不同滤波器类型,所给出的频谱反映的意思。如图7 所示,滤波器类型为低通滤波器,其条形图和频谱图反映只允许低频通过,其高频基本都被滤去
30、,故实现了低通滤波器的功能。15 图 7 低通 Figure7 lowpass 图 8 为选择带通滤波器时的运行界面,它的起始频率为 200HZ,截止频率为 400HZ,理想带通滤波器低于 200HZ 和高于 400HZ 的频率段都应被滤去,实际运行过程中有一部分频段的频率未被滤去,但已基本实现带通滤波器的功能。图 9 为选择高通滤波器时的运行界面,它和低通刚好相反,只允许高频的通过。16 图 8 带通 Figure 8 Band-pass 图 9 高通 Figure9 highpass 17 4.2 实验分析 理想的滤波器是不存在的,实际中只能尽量地接近理想滤波器,所以只能尽量地去接近理想的
31、滤波器。对于 IIR 数字滤波器,阶数越高,则滤波器的精度越高,即越接近于理想的情况,但计算机运行速度就越慢了,所以实际中应该权衡运行速度与滤波器的精度。另外,计算机本身也有误差(如截断误差),但相对于滤波器的设计误差,计算机的计算误差可以怱略不计。故提高精度关键在于提高滤波器的设计精度。另外,每个带通滤波器之间的过渡也有设计误差,理论上带通滤波器间的过滤应该满足各滤波器的频率响应曲线叠加起来为一条值为 1 的水平线,但实际中只能尽量去接近理论的情况。18 5总结与展望 5.1 总结 本文首先对数字滤波器的原理进行了分析,并选择了一种实现数字均衡器的方案,在软件的设计上采用软件工程的理论,使用
32、面向数据流的设计方法进行软件设计,并且采用了模块划分的方法。采用MATLAB实现,利用了MATLAB的强大工具箱。界面上采用MATLAB提供的GUIDE工具进行设计,使得软件开发效率较高。对于均衡器所要求的功能,已经基本实现。最后给出了软件的运行结果,并对软件进行了误差分析。5.2 展望 该软件在播放前需要点滤波按钮,这使得操作变得麻烦,所以可以将滤波功能加到播放中,这就意味着需要加快程序的运行速度可采用多线程机制。带通滤波器频率交界处的误差可以通过优化设计的方法来将其减小,即各带通滤波器不完全以给定的频带为自己的生成参数,而是以附近的某个频率值作为其生成参数,这样就需要用到优化的理论。19
33、参考文献 1谢卫华,张泽.一种数字均衡器的设计及 DSP 实现.M.北京:清华大学出版社.,2006.2蒋伟峰,刘济林,王兴国.基于原型法的数字参量均衡器设计M.浙江:浙江大学出版社,2004.3姚天任,江太辉.数字信号处理.M 武汉:华中科技大学出版社.2008.4张海藩.软件工程.J 北京:人民邮电出版社,2002.5王正林;王玲 精通 MATLAB GUI 设计.M 电子工业出版社.2008.3.6胡昌华基于 MATLAB 的系统分析与设计M西安:电子科技大学出版社。2001.7孙祥MATLAB7.0 从入门到精通M北京:人民邮电出版社。2007.8D.G.CHILDERSMATLAB
34、语音处理及合成M北京:清华大学出版社。2006.9刘敏,魏玲Matlab 通信仿真与应用M北京:国防工业出版社,2001 10程佩青数字信号处理教程M北京:清华大学出版社,2002 20 致 谢 经过五个月的忙碌和工作,本次毕业设计已经接近尾声,作为一个本科生的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有赵老师的督促指导,想要完成这个设计是难以想象的。在这里首先要感谢我的指导老师赵红伟老师。老师平日里工作繁多,但在我做毕业设计的每个阶段,从查阅资料,到设计草案的确定和修改,中期检查,后期详细设计等整个过程中都给予了我细心的指导,老师治学严谨和科学研究的精神也是我永远学习的榜样
35、,并将积极影响我今后的学习和工作。同时还要感谢大学四年来所有的老师,为我们打下电信专业知识的基础;也还要感谢所有的同学们,正是因为有了你们的支持和鼓励。此次毕业设计才会顺利完成。最后感谢基信学院和我的母校云南农业大学四年来对我的教导与栽培。21 附录%-打开WAV按钮.filename,pathname=uigetfile(*.wav,Pick an WAVE-file);%生成打开文件对话框 if isequal(filename,0)disp(User selected Cancel)else disp(User selected,fullfile(pathname,filename)%文
36、件名和路径 handles.y handles.Fs bits=wavread(filename);%读取 WAV 格式的声音文件 handles.y=handles.y(:,1);%handles.y是采样数据 guidata(hObject,handles);%保存数据 end%-原声播放按钮 wavplay(handles.y,handles.Fs,async);%播放 WAV 文件%-播放按钮.N=size(handles.yy);N=N(1);%step=0.1;%n=handles.Fs*step;n=4096;%N是离散傅氏变换用的点数 step=n/handles.Fs;%fs
37、 是采样速率(Hz)。from=1;to=n;ymax=max(handles.y);ymin=min(handles.y);f=linspace(0,handles.Fs/2,n/2);22 fband=handles.fband;num=length(fband)-1;tic while to1 W1=2*W1/handles.Fs;end if W21 W2=2*W2/handles.Fs;end if get(handles.lowpass,Value)=1 switch get(handles.filtertype,Value)case 1 b a=butter(order,W1,l
38、ow);case 2 b a=cheby1(order,0.5,W1,low);25 case 3 b a=cheby2(order,20,W1,low);case 4 b a=ellip(order,0.5,20,W1,low);otherwise errordlg(Filter type chosen error!Butterworth?cheby?.);return;end elseif get(handles.highpass,Value)=1 switch get(handles.filtertype,Value)case 1 b a=butter(order,W1,high);ca
39、se 2 b a=cheby1(order,0.5,W1,high);case 3 b a=cheby2(order,20,W1,high);case 4 b a=ellip(order,0.5,20,W1,high);otherwise errordlg(Filter type chosen error!Butterworth?cheby?.);return;end elseif get(handles.bandpass,Value)=1 switch get(handles.filtertype,Value)case 1 b a=butter(order,W1 W2);case 2 b a
40、=cheby1(order,0.5,W1 W2);case 3 b a=cheby2(order,20,W1 W2);26 case 4 b a=ellip(order,0.5,20,W1 W2);otherwise errordlg(Filter type chosen error!Butterworth?cheby?.);return;end elseif get(handles.bandstop,Value)=1 switch get(handles.filtertype,Value)case 1 b a=butter(order,W1 W2,bandstop);case 2 b a=c
41、heby1(order,0.5,W1 W2,bandstop);case 3 b a=cheby2(order,20,W1 W2,bandstop);case 4 b a=ellip(order,0.5,20,W1 W2,bandstop);otherwise errordlg(Filter type chosen error!Butterworth?cheby?.);return;end else errordlg(Filter type chosen error!lowpass,highpass,bandpass or bandstop?);return;end H f=freqz(b,a
42、,512,2);plot(handles.axes4,f,abs(H);handles.b=b;handles.a=a;guidata(hObject,handles);set(handles.filt2,Enable,on);27%-滤波按钮 set(handles.filt2,Enable,off);tic if get(handles.matlab,Value)=1 handles.yy=filter(handles.b,handles.a,handles.y);end set(handles.ellipstime,String,sprintf(%fs,toc);guidata(hObject,handles);set(handles.filt2,Enable,on);set(handles.filterplay,Enable,on);set(handles.save,Enable,on);