1. 引言
“数字信号处理”作为通信工程、电子信息工程、电子信息科学与技术等专业的核心课程,其主要包含两大知识模块,信号的谱分析和信号滤波 [1] [2]。讲到数字滤波器设计时,学生除了掌握基本的设计思想和设计方法之外,还能够利用设计得到的数字滤波器对信号进行实际滤波处理,这种教学过程及模式,必将使学生对相应的知识模块有更深刻的理解和掌握。鉴于此目的,我们基于MATLAB GUI设计出了一个可视化数字滤波仿真平台,首先仿真生成低频、中频和高频三个不同频率正弦信号的叠加波形,根据数字滤波器的设计步骤设计得到满足技术指标的IIR和FIR数字低通、高通和带通滤波器,得到滤波器设计结果即系统函数的系数,然后分别对输入进行滤波处理,进而得到分离后的信号输出。整个数字滤波仿真平台,将教学过程与当前优秀的科学计算软件MATLAB进行了有机结合,使学生能更好地掌握IIR和FIR两大类型数字滤波器设计步骤、特点及应用场合等。此外,利用MATLAB信号处理工具箱中的滤波器分析设计工具FDATool以及可视化仿真工具Simulink实现了各种IIR和FIR数字滤波器的设计以及滤波仿真,进一步培养了学生的实践能力 [3] [4]。
该数字滤波仿真平台可以实时对输入信号频率、采样频率和滤波器技术指标等参数进行调整修改,从而满足具体设计要求和滤波特性,且所有的设计结果和仿真图示均可通过图形用户界面的相关功能来观察测量,整个系统平台框架清晰,设计合理,内容丰富,结果正确,操作直观简便。该平台可用于数字滤波器设计的工程实践中,也可用作“数字信号处理”课程的课堂教学和实验教学中,不仅丰富了课堂内容,也能很好地激发学生的学习兴趣,帮助学生更好地理解滤波器技术指标的物理含义,加深理解各参数对滤波器滤波特性以及滤波结果的影响,从而取得更好的教学效果。
2. 仿真平台总体结构
数字滤波仿真平台由用户登录系统,程序法实现数字滤波仿真,和利用信号处理工具箱实现数字滤波仿真三大功能模块组成。该仿真平台主要用于设计各种类型IIR和FIR数字滤波器,将三个不同频率的正弦信号分离,从而实现信号滤波,基本框架如图1所示。用户登录系统可实现用户注册、用户登录和修改密码功能。程序法设计数字滤波器及滤波仿真模块涵盖了IIR和FIR数字低通滤波器、高通滤波器和带通滤波器的设计及滤波仿真。第三部分利用了信号处理工具箱中的FDATool和Simulink来实现IIR和FIR数字低通滤波器、高通滤波器和带通滤波器的设计及滤波仿真。

Figure 1. General block diagram of digital filtering simulation platform
图1. 数字滤波仿真平台基本框架
3. 仿真平台设计原理
3.1. 登陆系统设计原理
用户注册时,输入完需要注册的用户名和密码后,会在平台内自动新建两个扩展名为.mat的文件,用来存储用户名和密码,从而实现用户注册。修改密码时会根据用户输入的用户名调出存储该用户用户名和密码的.mat文件,然后判断用户输入的原密码是否正确,如果输入的原密码与文件内的原密码相同,则会用新输入的密码覆盖原密码,实现修改密码的功能。
3.2. 数字滤波器的设计原理
1) IIR和FIR数字滤波器的基本概念
根据单位脉冲响应
是无限长还是有限长,数字滤波器可以分为两大类型,即无限脉冲响应数字滤波器(Infinite Impulse Response Digital Filter,简称IIR DF)和有限脉冲响应数字滤波器(Finite Impulse Response Digital Filter,简称FIRDF)。数字滤波器的系统函数通用表达式为:
(1)
IIR系统的
分母多项式除
外至少有一个系数
。FIR系统的
分母多项式除
外所有的系数
。IIR系统的运算结构中有输出到输入的反馈回路,属于“递归”结构。FIR系统的运算结构中没有反馈回路,属于“非递归”结构。IIR系统是有极点的系统,要保证系统因果稳定,极点必须在单位圆内。而FIR系统只有零点,没有极点,或者说极点恒在单位圆内,系统永远稳定 [5]。IIR系统和FIR系统的各种特性以及设计方法也不相同,因而成为数字滤波器的两大分支,且滤波器设计始终是信号处理中的重要内容。
从性能上来说,IIR数字滤波器的极点可位于单位圆内的任何地方,零点和极点相结合,可用较低的阶数获得较高的选择性,所用的存储单元少,计算量小,经济高效。但这些特性的获得是以牺牲相位特性为代价的。相反,FIR数字滤波器可实现线性相位,但由于其系统函数的极点固定在原点,所以只能用较高的阶数来达到较好的选择性。对于同样的滤波器幅频特性指标,FIR数字滤波器的阶数通常比IIR数字滤波器高5到10倍,当然其输出信号时延较大。
IIR数字滤波器虽然设计简单,但通常受模拟滤波器格局限制,一般只能设计低通,高通,带通和带阻这些具有片段常数特性的滤波器 [6]。而FIR数字滤波器则要灵活的多,可以设计更为复杂的幅频响应以适应某些特殊的应用,比如希尔伯特变换器等。滤波器类型的选择主要取决于滤波时要强调的侧重面和信号的特点。滤波的目的都是为了去除噪声,有的仅希望最大限度的去除噪声,那么最佳的选择就是IIR滤波器。有的是希望在去除噪声的同时能让滤波器具有线性相位特性,比如图像处理,数据传输等以波形携带信息的场合,那么要选择FIR数字滤波器。IIR与FIR数字滤波器各有所长,在实际应用时应全面考虑并加以选择。
2) 无限脉冲响应数字滤波器(IIRDF)的设计原理
IIRDF采用间接法设计,即先设计模拟原型滤波器,再将模拟滤波器转换成数字滤波器。将模拟滤波器转换成数字滤波器时主要有两种方法:脉冲响应不变法和双线性变换法 [7] [8]。脉冲响应不变法由于S平面到Z平面的多对一映射关系导致了其应用范围受限。本平台采用可设计各种滤波功能的双线性变换法,先将整个S平面压缩到S1平面,再通过单值变换关系对应整个Z平面上去,由此建立S平面与Z平面一一对应关系,从而克服了频响混叠这一缺点。
我们以双线性变换法设计IIR数字低通滤波器为例来阐述IIRDF的设计步骤,首先确定数字低通滤波器的设计指标:通带截止频率,阻带截止频率,通带最大衰减,阻带最小衰减,然后用(2)式所示的非线性频率转换关系转换成模拟低通滤波器的技术指标,根据模拟低通滤波器的技术指标设计模拟低通滤波器,得到模拟滤波器的系统函数
,
(2)
最后利用(3)式转换到数字低通滤波器的系统函数
。如果要设计其他类型数字滤波器,比如高通、带通等,还需要增加模拟域的频率变换环节。
(3)
3) 有限脉冲响应数字滤波器(FIRDF)的设计原理
FIRDF采用窗函数法设计,基本思想是一种时域上的逼近方法。对于理想数字滤波器,其频率特性在边界频率处有不连续点,其时域上的单位脉冲响应必然是非因果无限长序列。FIR数字滤波器,其单位脉冲响应是有限长的。对无限长序列采用加窗截断使其成为有限长因果序列,从而得到实际FIR滤波器的设计结果。为提高滤波器的选择性,所选窗函数的窗谱主瓣应尽可能地窄,以获得较陡的过渡带。为提高滤波器的通阻带平稳性,应尽量减小窗谱最大旁瓣的相对幅度,也就是使能量尽量集中于主瓣,进而增加滤波器的阻带衰减。常用的窗函数主要有矩形窗、三角形窗、汉宁窗、哈明窗、布莱克曼窗以及凯赛窗等 [9] [10] [11]。
窗函数法的设计步骤为,首先根据技术指标要求构造理想频响,并反变换得到理想滤波器的单位脉冲响应,然后根据阻带衰减选择合适的窗形状,根据过渡带宽度计算得到窗口长度,从而确定窗函数表达式,再完成加窗处理,从而得到实际数字滤波器的单位脉冲响应,最后验证设计结果是否满足要求。
4. 仿真平台设计
4.1. GUI 界面设计
1) 登陆界面
登陆界面可实现用户注册、登陆、修改密码等功能,有效的保护了用户隐私。主要由可输入文本框、静态文本框、按钮以及坐标区组成,设计结果如图2所示。可输入文本框用来组成交互部分,用户可在其中输入用户名以及密码。静态文本框用来提供必要的文字说明。按钮用来实现界面的跳转。
2) 程序法界面
该部分运行界面中,输入信号频率、采样频率以及数字滤波器技术指标用户可自行输入,灵活方便。可通过界面中的弹出式菜单选择不同的滤波方式以及查看不同的信号图形和不同类型的数字滤波器的幅频特性曲线。如果发现设计结果不理想可直接修改参数,有利于提高设计效率。同时系统附带参考数据文档,便于使户参考,从而得到一个较好的仿真结果。该界面主要由静态文本框、可输入文本框、弹出式菜单、按钮、面板以及坐标区组成,在上方还有一行工具栏供使用,总体设计结果如图3所示。
3) 信号处理工具箱设计
该仿真平台嵌入Simulink仿真模型,用户可根据需要自行更改模型参数,无需新建,也可以直接运行。该功能界面主要由按钮和静态文本框组成。功能按钮用来实现GUI界面与Simulink仿真模型的互联,实现模型的一键开关,不必再通过MATLAB的命令窗口打开。
4.2. 各模块功能实现
1) 用户登录系统
先通过get()函数获取可输入文本框中的内容,然后利用str2double()函数将获取到的内容转换成double型数字并赋给存储用户名(user)和密码(password)的变量。获取到输入内容后通过save()函数将密码和用户名储存到.mat文件内,从而实现用户注册。

Figure 3. Digital filtering simulation interface by programming method
图3. 程序法数字滤波仿真界面
修改密码时需要确认用户名与原密码输入正确才能进行修改密码操作。在修改密码前,先通过load()函数将存储用户名和密码的文件加载出来,将其中的内容分别赋值给变量user和password,再次通过get()函数和str2double()函数获取用户新输入的用户名和原密码,新输入的用户名和密码分别赋值给变量user_input和password_input。通过if语句判断用户输入的用户名以及原密码是否正确,如果正确则可继续执行修改密码操作,如果错误则会弹出相应的错误提示,弹出错误提示框通过errordlg()函数实现。
登陆系统时先通过load()函数将用户信息加载出来,再通过if语句判断是否正确,进而判断能否进入仿真平台。如果信息输入错误也会有相关提示。在打开新的界面前会通过close()函数将当前已经打开的界面关掉,防止界面重叠。
2) 程序法滤波仿真
原始信号频率、采样频率以及滤波器技术指标的输入,通过str2double(get())语句实现参数获取以及类型转换,将可输入文本框中的相关指标赋值给相应的变量 [12]。如果输入的技术指标出现逻辑错误或者是不符合客观事实,例如阻带波动设置的过大,将弹出相应的错误提示,弹出错误提示框是通过errordlg()函数实现的。
通过下拉菜单来选择滤波器类型为IIRDF还是FIRDF。弹出式菜单的回调函数的基本框架如下:
var=get(handles.popupmenu1,’value’);
switch var
case 1
case 2
…………
end
比如,如果用户选择的是IIRDF,变量var将会被赋值为2,从而通过switch函数执行case 2中的内容,即通过双线性变换法设计IIRDF。
以IIR数字低通滤波器设计为例,其程序代码如下:
low_wp=(2*pi*low_fp)/Fs; %将Hz单位的频率转换成数字频率
low_ws=(2*pi*low_fs)/Fs;
low_Wp=2*tan(low_wp/2); %将数字频率
转换成模拟频率
low_Ws=2*tan(low_ws/2);
[low_N,low_WC]=buttord(low_Wp,low_Ws,Ap,As,’s’);
%根据技术指标计算巴特沃斯模拟滤波器的阶数N和3 dB截止频率low_Wc
[low_Bs,low_As]=butter(low_N,low_Wc,’s’);
%计算巴特沃斯模拟滤波器系统函数的分子和分母多项式的系数向量Bs和As
[IIR_low_Bz,IIR_low_Az]=bilinear(low_Bs,low_As,1);
%利用双线性变换法转换成数字滤波器
以FIR数字高通滤波器设计为例,采用汉宁窗,其程序代码如下:
high_wp=(2*pi*fp)/Fs; %将Hz单位的频率转换成数字频率
high_ws=(2*pi*fs)/Fs;
high_Bt=abs(high_wp-high_ws); %计算过渡带宽
high_N0=ceil(6.2*pi/high_Bt); %计算所需要的窗长
high_N=high_N0+mod(high_N0+1,2); %确保窗长为奇数
high_wc=(high_wp+high_ws)/2/pi;
%计算理想高通滤波器的通带截止频率(关于
的归一化)
FIR_hign_hn=fir1(high_N-1,high_wc,’high’,hanning(high_N));
%调用fir1计算高通FIR数字滤波器的h(n)
设计完滤波器后利用freqz()函数将滤波器的系统函数转换到频率响应,然后利用plot()函数画出滤波器的幅频特性曲线,以便观察滤波器特点。根据设计好的数字滤波器系数,利用filter()函数实现信号滤波,plot()函数绘制相关信号波形,同时用axis()函数来控制绘图时的坐标范围。
3) 信号处理工具箱滤波仿真
FDA Tool界面总共分两大部分,一部分是Design Filter,在界面的下半部,用来设置滤波器的设计参数;另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。本平台内FDATool的相关技术指标已经设置完成,当然用户也可根据需要自行更改。关于FDATool的详细介绍请读者参考其他专业文献 [13] [14] [15]。
5. 仿真平台测试
1) 程序法滤波仿真测试
仿真平台可实现三个频率正弦信号的生成叠加,滤波器设计,滤波分离出三个频率信号。实际测试时,原始信号的三个频率、采样频率以及滤波器技术指标均可自行设置。在此,我们的测试结果,所用参数设置如下。输入采样频率为1 KHz,输入信号的三个频率分别为20 Hz、100 Hz、200 Hz的正弦波叠加,IIR低通滤波器的技术指标设置为:通带截止频率30 Hz,阻带截止频率80 Hz,通带波动1 dB,阻带波动60 dB;IIR高通滤波器的技术指标设置为:通带截止频率180 Hz,阻带截止频率120 Hz,通带波动1 dB,阻带波动60 dB;IIR带通滤波器的两个通带截止频率分别设置为80 Hz和120 Hz,两个阻带截止频率分别设置为30 Hz和210 Hz,通带波动设置为1 dB,阻带波动设置为60 dB。三种类型IIR数字滤波仿真结果如图4(a)-(c)所示,其中最左侧为原始输入信号中对应的20 Hz、100 Hz、200 Hz信号波形,中间为所设计的低通、带通和高通滤波器的幅频特性曲线,最右侧为最终滤波分离结果,分别为低频输出、中频输出和高频输出。
(a)
(b)
(c)
Figure 4. (a) Simulation results of IIR low pass digital filtering; (b) Simulation results of IIR band pass digital filtering; (c) Simulation results of IIR high pass digital filtering
图4. (a) IIR数字低通滤波仿真结果;(b) IIR数字带通滤波仿真结果;(c) IIR数字高通滤波仿真结果
FIRDF所设置的原始信号频率、采样频率以及滤波器技术指标与IIRDF相同,阻带衰减设为60 dB,具体实现时通过if语句判断后,加窗时自动采用布莱克曼窗。FIR滤波仿真操作过程与IIR类似,滤波结果除幅频特性曲线稍有不同之外,还能从输出结果图上看出有较大时延。
2) 信号处理工具箱设计数字滤波器以及滤波仿真测试
平台内利用Simulink库中的元件创建了仿真模型并进行滤波仿真,IIR数字滤波仿真模型如图5所示。其中用到了Scope(示波器)、Sine Wave(正弦波信号发生器)、FDATool(数字滤波器分析与设计工具)、ADD(加号运算法)等元件。利用Sine Wave生成三种不同频率的正弦波,通过ADD元件将三个不同频率的正弦信号混合起来,得到输入信号,再通过FDATool设计数字滤波器将混合后的信号分离出来,并在Scope上观察信号波形、频率等相关参数。
如果需要更改输入信号频率或者滤波器技术指标,双击信号发生器即可更改输入信号频率,如图6(a)所示,双击Filter Designer可更改滤波器技术指标,如图6(b)所示。运行后,需等待进度条加载100%即可从示波器查看滤波结果。

Figure 5. Simulation model of IIR digital filtering
图5. IIR数字滤波仿真模型
(a)
(b)
Figure 6. (a) Frequency modification of input signal; (b) Specification modification of digital filter
图6. (a) 更改输入信号频率;(b) 更改滤波器的技术指标
如果想要测量滤波得到的信号的频率,以检验滤波器设计是否合理,可进入示波器界面,点击Scope元件中的测量按钮,选择“Peak Finder”,左侧显示波形结果,右侧为信号各个波峰出现的时间,选择两个相邻的波峰,时间相减取绝对值,再取倒数即为该信号的频率。如图7所示,两个相邻波峰之间的时间差绝对值为0.05,取倒数,则该信号频率为20 Hz,也验证了该信号为低通滤波输出。如果打开示波器波形显示比较密集,可点击工具栏中的缩放选项,在信号波形区域按住鼠标轻轻拉动,即可在x轴或者y轴缩放信号。

Figure 7. Result and measurement of low pass filtering output with 20 Hz
图7. 20 Hz低通滤波输出结果及测量
6. 结语
基于MATLAB GUI设计实现的数字滤波仿真平台,实现了通过程序法设计IIR和FIR数字滤波仿真,还加入了FDATool设计数字滤波器以及Simulink仿真部分,真正做到了数字滤波器设计过程的条理化和滤波结果的可视化,而且数字滤波器技术指标可根据需要随时调整,可以直观地观察出滤波器性能指标的改变对滤波器滤波特性的影响。需要说明的是,该仿真平台的运行需要依托MATLAB环境,下一步的开发会将滤波仿真平台做成独立的应用程序。此外,所设计开发的滤波仿真平台具有很强的交互性,易于扩展,不仅可用于“数字信号处理”的课堂教学和实验中,帮助学生理解数字滤波器设计原理和步骤以及滤波器技术指标对滤波特性的影响,而且还可用于工程实践中,通过不断调整滤波器技术指标从而找出具备最优性能指标的滤波器,从而提高设计效率。
基金项目
教育部产学合作协同育人项目(项目编号:201902203005);山东科技大学2021年度课程思政培育项目(项目编号:KCSZ202120)。