基于 MATLAB 信号的滤波处理
吴彦亨,张鹏飞,谢德力,张龙
摘要:滤波器设计在数字信号处理中占有极其重要的地位,FIR 数字滤波器和 IIR 滤波器是滤波器设计的重
要组成部分。利用 MATLAB 信号处理工具箱可以快速有效地设计各种数字滤波器。课题基于 MATLAB 动态信
号滤波处理的设计与实现,综合运用数字信号处理的理论知识对动态信号进行时域、频域分析和滤波。通
过理论推导得出相应结论,再利用 MATLAB 作为编程工具进行计算机实现。在设计实现的过程中,使用窗
函数法来设计 FIR 数字滤波器,用巴特沃斯、切比雪夫和双线性变法设计 IIR 数字滤波器,并利用 MATLAB
作为辅助工具完成设计中的计算与图形的绘制。通过对对所设计滤波器的仿真和频率特性分析,可知利用
MATLAB 信号处理工具箱可以有效快捷地设计 FIR 和 IIR 数字滤波器,过程简单方便,结果的各项性能指标
均达到指定要求。
关键词:哈明窗 汉宁窗 巴特沃斯 切比雪夫 双线性变换 频谱分析
1 绪论
数字信号处理是利用计算机或专用处理设备,以数值计算的方法对信号进行采集、抽样、
变换、综合、估值与识别等加工处理,借以达到提取信息和便于应用的目的。它在语音、雷
达、图像、系统控制、通信、航空航天、生物医学等众多领域都获得了极其广泛的应用。具
有灵活、精确、抗干扰强、设备尺寸小、造价低、速度快等优点。
数字滤波器, 是数字信号处理中及其重要的一部分。随着信息时代和数字技术的发展,
受到人们越来越多的重视。数字滤波器可以通过数值运算实现滤波,所以数字滤波器处理精
度高、稳定、体积小、重量轻、灵活不存在阻抗匹配问题,可以实现模拟滤波器无法实现的
特殊功能。数字滤波器种类很多,根据其实现的网络结构或者其冲激响应函数的时域特性,
可分为两种,即有限冲激响应( FIR,Finite Impulse Response)滤波器和无限冲激响应( IIR,
Infinite Impulse Response)滤波器。
FIR滤波器结构上主要是非递归结构,没有输出到输入的反馈,系统函数H (z)在
处收敛,极点全部在z = 0处(因果系统),因而只能用较高的阶数达到高的选择性。
FIR数字滤波器的幅频特性精度较之于IIR数字滤波器低,但是线性相位,就是不同频
率分量的信号经过fir滤波器后他们的时间差不变,这是很好的性质。FIR数字滤波器
是有限的单位响应也有利于对数字信号的处理,便于编程,用于计算的时延也小,这
对实时的信号处理很重要。 FIR滤波器因具有系统稳定,易实现相位控制,允许设计多通
带(或多阻带)滤波器等优点收到人们的青睐。
IIR滤波器采用递归型结构,即结构上带有反馈环路。IIR滤波器运算结构通常由
延时、乘以系数和相加等基本运算组成,可以组合成直接型、正准型、级联型、并联
型四种结构形式,都具有反馈回路。同时,IIR数字滤波器在设计上可以借助成熟的
模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,有现成的设计数据或图
表可查,在设计一个IIR数字滤波器时,我们根据指标先写出模拟滤波器的公式,然
后通过一定的变换,将模拟滤波器的公式转换成数字滤波器的公式。
滤波器的设计可以通过软件或设计专用的硬件两种方式来实现。随着 MATLAB 软件及信
号处理工具箱的不断完善,MATLAB 很快成为应用学科等领域不可或缺的基础软件。它可以
快速有效地实现数字滤波器的设计、分析和仿真,极大地减轻了工作量,有利于滤波器设计
的最优化。
2 设计内容
设计一个工作流程如图 3 所示的信号滤波演示系统:
信号选择
测试信号
信号发生器
滤波后信号
数字滤波
输出信号分析
滤波器类型选择
(IIR、FIR)
DFT
频谱分析
基型选择
滤波器
系数
滤
波
器
设
计
滤波器
技术指标
IIR DF(双线型变换法)
FIR DF(窗函数法)
窗口选择
图 1 信号滤波演示系统工作流程
3 设计的具体实现
3.1 动态信号的实现
利用 PC 机上的 Matlab 可以进行输入由多个不同频率正弦信号叠加组合而成的模
拟信号公式
100sin(2
f t
1
) 100sin(2
f t
2
)
100sin(2
)n
f t
、采样频率(Hz)以及采样点数,
动态生成该信号的采样序列,作为测试信号。
3. 2 动态信号频谱分析
在本次设计中,我们是利用 MATLAB 生成的模拟信号
100sin(2
f t
1
) 100sin(2
f t
2
)
100sin(2
)n
f t
并对其频谱分析。动态信号频谱分析的主要
程序如下:
fs=input('频率等于:');
%fs=str2num(fs);
m=1/fs;
f0=100;
t=[-0.2:m:0.2];
sum=0;
for n=1:2:9;
fn=f0+n*10;
hold on;
end
for n=1:1:9;
sum=sum+100*sin(2*pi*fn*t);
x1=sum;
end
t1=[-0.2:m:0.2];
y=ones(1,length(t1));
t1=[-0.2:m:0.2];
val=get(hObject,'Value');
str=get(hObject,'String');
switch str{val}
case '采样函数'%User selects
title('原始信号')
t1=[-0.2:m:0.2];
y=ones(1,length(t1));
stem(t1,y,'.'),grid
axis([-0.2,0.2,-1000,1000]);
title('采样信号')
t1=[-0.2:m:0.2];
stem(t1,sum,'.'),grid
title('采样后信号')
grid on
case 'DFT 变换的幅频函数'%User selects
N=input('请输入 N 的值 N:');
M=input('请输入 M 的值 M:');
X1=fft(sum,M);
X2=fft(sum,N);
k=0:M-1;wk=2*k/M;
plot(wk,abs(X1));
title('(a)FT[x1]的幅频特性图');xlabel('w/pi');ylabel('幅度');
grid on
case'DFT 变换的相频函数'%User selects
N=input('请输入 N 的值 N:');
M=input('请输入 M 的值 M:');
X1=fft(sum,M);
X2=fft(sum,N);
k=0:M-1;wk=2*k/M;
plot(wk,angle(X1));
title('(b)FT[x1]的相频特性图');
xlabel('w/pi');ylabel('相位');
grid on
end
图 1:采样函数的图形
3.3 设计 FIR 和 IIR 数字滤波器
图形 2:幅频函数的图形
IIR 滤波器和 FIR 滤波器的设计方法完全不同。IIR 滤波器设计方法有间接法和直接法,
间接法是借助于模拟滤波器的设计方法进行的。其设计步骤是:先设计过渡模拟滤波器得到
系统函数 H(s),然后将 H(s)按某种方法转换成数字滤波器的系统函数 H(z)。FIR 滤波器
比鞥采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法。对于线性
相位滤波器,经常采用 FIR 滤波器。
对于数字高通、带通滤波器的设计,通用方法为双线性变换法。可以借助 MATLAB 中的
函数库进行调用
程序所要的步骤如下:
(1)确定所需类型数字滤波器的技术指标。
(2)将所需类型数字滤波器的边界频率转换成相应的模拟滤波器的边界频率,转换公
式为Ω=2/T tan(0.5ω)
(3)将相应类型的模拟滤波器技术指标转换成模拟低通滤波器技术指标。
(4)调用设计其他滤波器的函数以实现其他滤波器的设计
或者将低通滤波器通过”[BH,AH]=lp2ph(B,A,wph)”进行低通转高通
如前所述,应用于 IIR 滤波器的设计对于 FIR 滤波器的设计还是有区别的、一下主要
是 FIR 滤波器的设计步骤:
(1)根据对阻带衰减及过渡带的指标要求,选择串窗数类型(矩形窗、三角窗、汉宁
窗、哈明窗、凯塞窗等),并估计窗口长度 N。先按照阻带衰减选择窗函数类型。原则是在
保证阻带衰减满足要求的情况下,尽量选择主瓣的窗函数。
(2)构造希望逼近的频率响应函数。
(3)计算 h(n).。
(4)加窗得到设计结果。
对于 IIR 和 FIR 的滤波器而言,FIR 的最大优点在于可以实现线性相位的滤波,因此在这两
种不同的滤波器滤波也会使所还原的原信号的失真程度不同,一下介绍 IIR 与 FIR 几种特殊
的滤波器滤波的比较及其程序:
一. IIR 低通滤波器
(1)巴特沃斯低通滤波器
Fs=input('采样频率等于(Hz):');
rp=input('通带最大衰减(dB):');
rs=input('阻带最小衰减(dB):');
c=input('通带边界频率(Hz):');
d=input('阻带边界频率(Hz):');
T=1/Fs;
wp=(2/T)*tan((2*pi*c/Fs)/2);ws=(2/T)*tan((2*pi*d/Fs)/2);
[N,wc]=buttord(wp,ws,rp,rs,'s')
[B,A]=butter(N,wc,'s');
[Bz,Az]=bilinear(B,A,Fs)
wk=0:pi/512:pi;
[Hz,w]=freqz(Bz,Az,wk);
Hx=angle(Hz);
subplot(2,1,1);
plot(w,Hx); hold off;
xlabel('\omega/\pi');ylabel('相位');
title('a');
subplot(2,1,2);hold off;
plot(wk/pi,20*log10(abs(Hz)));
xlabel('\omega/\pi');ylabel('幅度(dB)');
axis([0,1,-100,5]);title('b');
hold off;
图 3 巴特沃斯低通滤波器
(2)巴特沃斯带通滤波器
wp=(2/T)*tan((2*pi*c/Fs)/2);ws=(2/T)*tan((2*pi*d/Fs)/2);
[N,wc]=buttord(wp,ws,rp,rs,'s')
[B,A]=butter(N,wc,'high','s');
[Bz,Az]=bilinear(B,A,Fs)
wk=0:pi/512:pi;
[Hz,w]=freqz(Bz,Az,wk);
Hx=angle(Hz);
subplot(2,1,1);
plot(w,Hx);
grid on;
xlabel('\omega/\pi');ylabel('相位');
title('相频特性');
subplot(2,1,2);
plot(wk/pi,20*log10(abs(Hz)));
grid on;
xlabel('\omega/\pi');ylabel('幅度(dB)');
axis([0,1,-100,5]);
title('幅频特性');
grid on