电子科技大学
实 验 报 告
一、实验室名称:数字信号处理实验室
二、实验项目名称:数字滤波器的设计及实现
三、实验原理:
一.数字滤波器设计:
1.数字滤波器设计步骤:
(1) 根据给定的滤波器设计要求,得到参数化描述,即通带,阻带截止频率和,通带阻带纹波和等数据。
(2) 找一个数字系统函数G(z),使其频率响应逼近设计要求。
(3) 择合适的滤波器结构对满足要求的传递函数G(z)进行实现。
2.数字滤波器设计中的注意事项:
(1) 设计要求的参数化:图1给出了一个典型的数字低通滤波器的幅频特性说明。理解每个参数的物理含义。
(2) 滤波器类型选择:在数字滤波器实现中可选择IIR滤波器和FIR滤波器两种。在实现相同幅频特性时,IIR滤波器的阶数会相对FIR滤波器的更低;而在实现中,对相同阶数的两种滤波器来看,对每个采样值所做的乘法数量,IIR约为FIR的两倍;另外,FIR还可以方便地设计成线性相位滤波器。总的来说,IIR滤波器除不能实现线性相位这一点外,由于阶数的原因,从计算复杂度上较FIR滤波器有很大的优势。根据以上这些区别,结合实际的设计要求,就可以选择一款合适的滤波器。
(3) 波器设计的方法:由于IIR滤波器和FIR滤波器各自的结构特点,所以它们的设计方法也不一样。在IIR滤波器的设计中,常用的方法是:先根据设计要求寻找一个合适的模拟原型滤波器,然后根据一定的准则将此模拟原型滤波器转换为数字滤波器,即为我们需要设计的数字滤波器。在FIR滤波器设计中,一般使用比较直接的方法:根据设计的要求在时域对理想的冲击响应序列进行加窗逼近,或从频域对需要实现的频率响应特性进行采样逼近然后进行反FFT。
(4) 波器阶数估计:IIR滤波器的阶数就等于所选的模拟原型滤波器的阶数,所以其阶数确定主要是在模拟原型滤波器设计中进行的。FIR滤波器阶数估计可以根据很多工程中的经验公式,这些公式可以直接从设计的参数要求中估计滤波器阶数。例如,对FIR低通滤波器,已知通带截止频率,阻带截止频率,最大通带纹波和最大最带纹波,则可以使用下面的公式估计其阶数:
3.数字滤波器的设计方法:
(1) IIR滤波器设计方法:
(a)冲击响应不变法:
A. 满足设计要求的模拟原型滤波器进行部分分式展开为:
B. 由于 ,可以得到:
(b)双线性变换法:
A. 设计要求中给出的边界频率进行预畸处理,然后用得到的频率进行模拟滤波器设计,得到模拟原型滤波器。
B. 用双线性变换法求出数字滤波器:。
(2) FIR滤波器设计方法:
(a)窗函数法:
A. 根据设计的要求选择合适的窗函数,然后根据此窗计算阶数等参数N。
B. 写出冲击响应序列的表达式:,其中,为理想的冲击响应序列,一般为无限长的,为长度为N的窗函数。
C. 计算所得冲击响应序列的DTFT,然后验证其是否满足设计要求。
(b)频率采样法:
A. 根据设计要求估算滤波器阶数N。
B. 对要求的频率响应特性进行采样,获得N个离散样点值H(k)。
C. 对H(k)求N点IFFT,得到所需要的滤波器冲击响应序列h(n)。
D. 计算所得冲击响应序列的DTFT,然后验证其是否满足设计要求。
4.滤波器的实现结构
(a) FIR滤波器:
直接型实现结构
级联结构
并联结构
多相实现结构
线性相位型结构
(b) IIR滤波器:
直接型实现结构:I型和II型
级联结构
并联结构
具体结构形式参见教材第六章内容。
二.在滤波器设计中使用到的MATLAB命令:
1. IIR滤波器设计函数:butter, buttord, chebwin, cheb1ord, cheb2ord, cheby1, cheby2, ellip, ellipord。
例如:用下面的MATLAB命令可估算一个Butterworth滤波器的阶数:
[N, Wn] = buttord(Wp, Ws, Rp, Rs)
2. FIR滤波器设计函数:fir1, fir2, remez, remezord, kaiser, kaiserord, hanning, hamming, blackman。
例如:用下面的MATLAB命令可根据式(7.18)估算一个FIR滤波器阶数:[N, fpts,mag,wt] = remezord(fedge,mval,dev)
3. MATLAB中提供的滤波器设计辅助设计软件(在命令窗口中键入“fdatool”即可启动),界面如下图1所示。在本界面中填写需要设计的滤波器参数,即可设计出需要的滤波器。还可以通过本工具提供的幅度,相位观察窗口观察设计出来的滤波器的幅度,相位特性等,并可以将设计好的滤波器冲激响应系数导出进行实现。
图1 MATLAB中滤波器辅助设计软件界面
四、实验目的:
从理论上讲,任何的线性时不变(LTI)离散时间系统都可以看做一个数字滤波器,因此设计数字滤波器实际就是设计离散时间系统。
本实验通过使用MATLAB函数和滤波器辅助设计软件对数字滤波器进行设计和实现,加深学生对数字滤波器的常用指标、设计过程及实现的理解。
五、实验内容:
对给定的输入信号(基带二进制码元为500Hz,两个载频分别为2kHz和4kHz的FSK调制信号)进行滤波。利用MATLAB编程设计一个数字低通滤波器,指标要求如下:通带截止频率:;阻带截止频率:;采样频率;通带峰值起伏:;最小阻带衰减:。要求分别用MATLAB中的IIR和FIR设计命令进行滤波器设计,得出需要的滤波器系数。再将得到的滤波器系数在MATLAB中编程进行实现(选择直接型实现结果),对输入信号进行滤波,观察滤波结果。
在提供的DSP实验板上编程对本滤波器过程进行实现,观察实际的滤波结果,并与理论结果对比。
六、实验器材(设备、元器件):
安装MATLAB软件的PC机一台,DSP实验演示系统一套。
七、实验步骤:
(1) 给定输入信号:FSK信号(输入的二进制待调信号为随机信号,码元频率为500Hz,两个载频分别为2kHz和4kHz,采样频率为20kHz,)。利用MATLAB编程产生本信号,画出其时域和频域的图像。
(2) 利用MATLAB编程设计一个数字低通滤波器,指标要求如下:
通带截止频率:;阻带截止频率:;采样频率;通带峰值起伏:;最小阻带衰减:。
(3) 分别用MATLAB中的IIR和FIR设计命令进行滤波器设计,得出需要的滤波器系数。
(4) (拓展要求)用MATLAB滤波器辅助设计软件对上述滤波器进行设计,并将得到的滤波器系数对输入信号进行滤波,观察滤波实现。
(5) 将得到的滤波器系数在MATLAB中编程进行实现(选择直接型实现结果进行实现),对(1)中的输入信号进行滤波(分别用FIR和IIR滤波器进行),观察滤波结果,画出时域和频域图像。
(6) (拓展要求)修改需要设计的滤波器的指标要求,比如:将通带截止频率修改为2kHz,或者将最小阻带衰减改为,这时再重复(3)和(5)的步骤,观察所得到的滤波器效果,并对这一结果进行解释。
(7) (拓展要求)在提供的DSP实验板上编程对滤波器滤波过程进行实现,观察实际的滤波结果,并与理论结果对比。
八、实验数据及结果分析:
程序:(1)产生输入FSK信号的程序
(2) FIR滤波器设计程序
(3) IIR滤波器设计程序
clear;
clc;
fs=20000;
f1=2000;
f2=4000;
t=0:1/fs:1;
xn=fix(2*rand(1,(max(t)-min(t))*500));
xn=(xn-1/2)*2;
xt=ones(1,length(t));
for i=1:length(xn)
if xn(i)==-1
k=40*i-39;
xt(k:k+39)=-ones(1,40);
end
end
car1=cos(2*pi*f1*t); %1 载波
car2=cos(2*pi*f2*t); %-1 载波
xt_fsk=(xt+1).*car1/2-(xt-1).*car2/2; %fsk调制
Xk_fsk=abs(fftshift(fft(xt_fsk)));
f_hz=linspace(-fs/2,fs/2,length(t));
figure(1)
subplot(4,1,1),stem(linspace(0,1,length(xn)),xn),axis([0,0.02,-1.2,1.2]),title('随机二进制序列x[n]'),xlabel('n');
subplot(4,1,2),plot(t,xt),axis([0,0.02,-1.2,1.2]),title('xt'),xlabel('时间t(s)');
subplot(4,1,3),plot(t,xt_fsk),axis([0,0.02,-1.2,1.2]),title('2FSK调制信号'),xlabel('时间t(s)');
subplot(4,1,4),plot(f_hz,Xk_fsk),axis([-6000,6000,min(Xk_fsk),1.2*max(Xk_fsk)]),title('2FSK调制后频谱'),xlabel('频率Hz');
%滤波器设计
%FIR 汉明窗
f_p=2200;
f_s=3500;
Rp=1;Rs=40;
wp=2*pi*f_p/fs;
ws=2*pi*f_s/fs;
wc=(wp+ws)/2;
dw=ws-wp;
A_hann=1;
N_hann=2*ceil(3.11*pi/dw);
B_hann=fir1(N_hann,wc/pi,hann(N_hann+1));
[H_hann,w_hann]=freqz(B_hann,A_hann,512);
figure(2)
subplot(2,1,1),plot(w_hann/pi,20*log10(abs(H_hann))),title('FIR传输函数幅值'),xlabel('w/pi'),ylabel('dB');
subplot(2,1,2),plot(w_hann/pi,angle(H_hann)),title('FIR传输函数相位'),xlabel('w/pi'),ylabel('dB');
%IIR 巴特沃兹
[N_but,Wn_but]=buttord(2*f_p/fs,2*f_s/fs,1,40);
[B_but,A_but]=butter(N_but,Wn_but);
[H_but,w_but]=freqz(B_but,A_but,512);
figure(3)
subplot(2,1,1),plot(w_but/pi,20*log10(abs(H_but))),title('IIR传输函数幅值'),xlabel('w/pi'),ylabel('dB');
subplot(2,1,2),plot(w_but/pi,angle(H_but)),title('IIR传输函数相位'),xlabel('w/pi'),ylabel('dB');
%FIR 汉明窗滤波
y_hann=filter(B_hann,A_hann,xt_fsk);
YK_hann=abs(fftshift(fft(y_hann)));
%IIR 巴特沃兹滤波
y_but=filter(B_but,A_but,xt_fsk);
YK_but=abs(fftshift(fft(y_but)));
figure(4)
subplot(3,1,1),plot(t,xt_fsk),axis([0,0.1,-1.2,1.2]),title('滤波器时域波形'),xlabel('时间t(s)');
subplot(3,1,2),plot(t,y_hann),title('FIR滤波后时域波形'),xlabel('时间t(s)'),axis([0,0.1,-1.2,1.2]);
subplot(3,1,3),plot(t,y_but),title('IIR滤波后时域波形'),xlabel('时间t(s)'),axis([0,0.1,-1.2,1.2]);
figure(5)
subplot(3,1,1),plot(f_hz,Xk_fsk),axis([-6000,6000,min(Xk_fsk),1.2*max(Xk_fsk)]),title('滤波前频谱'),xlabel('频率Hz');
subplot(3,1,2),plot(f_hz,abs(YK_hann)),title('FIR滤波后频谱'),xlabel('频率Hz'),axis([-6000,6000,min(YK_hann),1.2*max(YK_hann)])
subplot(3,1,3),plot(f_hz,abs(YK_but)),title('IIR滤波后频谱'),xlabel('频率Hz'),axis([-6000,6000,min(YK_but),1.2*max(YK_but)]);
(4) FIR滤波器实现程序(用滤波器系数对输入信号进行滤波)
(5) IIR滤波器实现程序(用滤波器系数对输入信号进行滤波)。
结果:(1)产生的输入FSK信号的时域和频域波形
(2)FIR滤波结果,时域和频域波形。
FIR滤波器传输函数
(3)IIR滤波结果,时域和频域波形。
IIR滤波器传输函数
滤波前后时域对比
滤波前后频域对比
九、实验结论:
答:通过对滤波前后频谱分析, FIR和IIR滤波器能够过滤掉FSK信号4000Hz的高频成分,使低频成分2000Hz通过,所以该滤波器设计满足要求。FIR滤波器阶数N=48,IIR滤波器阶数N=10。
十、总结及心得体会:
答:通过本次试验加深了对数字滤波器的常用指标、设计过程及实现的理解。
十一、对本实验过程及方法、手段的改进建议:
无
报告评分:
指导教师签字:
第二篇:实验8 IIR数字滤波器设计综合实验
实验8 IIR数字滤波器设计综合实验
1.实验目的
(1)熟悉用双线性变换法设计IIR数字滤波器的原理与方法.
(2)学会调用MATLAB信号处理工具箱中滤波器设计函数(或滤波器设计分析工具fdatool)设计各种IIR数字滤波器,学会根据滤波需求确定滤波器指标参数。
(3)掌握IIR数字滤波器的MATLAB实现方法。
(4)通过观察滤波器输入、输出信号的时域波形及其频谱,建立数字滤波的概念。
2.实验原理
设计IIR数字滤波器一般采用间接法(脉冲响应不变法和双线性变换法),应用最广泛的是双线性变换法。基本设计过程是:①先将给定的数字滤波器的指标转换成过渡模拟滤波器的指标;②设计过渡模拟滤波器;③将过渡模拟滤波器系统函数转换成数字滤波器的系统函数。MATLAB信号处理工具箱中的各种IIR数字滤波器设计函数都是采用双线性变换法。第六章介绍的滤波器设计函数butter、cheby1、cheby2 和ellip可以分别被调用来直接设计巴特沃斯、切比雪夫1、切比雪夫2和椭圆模拟和数字滤波器。本实验要求读者调用如上函数直接设计IIR数字滤波器。
本实验中数字滤波器的MATLAB实现是指调用MATLAB信号处理工具箱函数filter对给定的输入信号进行滤波,得到滤波后的输出信号。
3.实验内容及步骤
(1)调用信号产生函数mstg产生由三路抑制载波调幅信号相加构成的复合信号st,该函数还会自动绘图显示st的时域波形和幅频特性曲线,如图10.4.1所示。由图可见,三路信号时域混叠无法在时域分离。但频域是分离的,所以可以通过滤波的方法在频域分离,这就是本实验的目的。
图10.4.1 三路调幅信号st的时域波形和幅频特性曲线
(2)要求将st中三路调幅信号分离,通过观察st的幅频特性曲线,分别确定可以分离st中三路抑制载波单频调幅信号的三个滤波器(低通滤波器、带通滤波器、高通滤波器)的通带截止频率和阻带截止频率。要求滤波器的通带最大衰减为0.1dB,阻带最小衰减为60dB。
提示:抑制载波单频调幅信号的数学表示式为
其中,称为载波,为载波频率,称为单频调制信号,为调制正弦波信号频率,且满足。由上式可见,所谓抑制载波单频调幅信号,就是2个正弦信号相乘,它有2个频率成分:和频和差频,这两个频率成分关于载波频率对称。所以,1路抑制载波单频调幅信号的频谱图是关于载波频率对称的两根谱线,其中没有载频成分,故取名为抑制载波单频调幅信号。容易看出,图10.4.1中三路调幅信号的载波频率分别为250Hz、500Hz、1000Hz。如果调制信号具有带限连续频谱,无直流成分,则就是一般的抑制载波调幅信号。其频谱图是关于载波频率对称的2个边带(上下边带),在专业课通信原理中称为双边带抑制载波 (DSB-SC) 调幅信号,简称双边带 (DSB)信号。如果调制信号有直流成分,则就是一般的双边带调幅信号。其频谱图是关于载波频率对称的2个边带(上下边带),并包含载频成分。
(3)编程序调用MATLAB滤波器设计函数ellipord和ellip分别设计这三个椭圆滤波器,并绘图显示其幅频响应特性(损耗函数)曲线。
(4)调用滤波器实现函数filter,用三个滤波器分别对信号产生函数mstg产生的信号st进行滤波,分离出st中的三路不同载波频率的调幅信号、和,并绘图显示、和的时域波形,观察分离效果。
4.信号产生函数mstg清单
function st=mstg
%产生信号序列向量st,并显示st的时域波形和频谱
%st=mstg 返回三路调幅信号相加形成的混合信号,长度N=1600
N=1600 %N为信号st的长度。
Fs=10000;T=1/Fs;Tp=N*T; %采样频率Fs=10kHz,Tp为采样时间
t=0:T:(N-1)*T;k=0:N-1;f=k/Tp;
fc1=Fs/10; %第1路调幅信号的载波频率fc1=1000Hz,
fm1=fc1/10; %第1路调幅信号的调制信号频率fm1=100Hz
fc2=Fs/20; %第2路调幅信号的载波频率fc2=500Hz
fm2=fc2/10; %第2路调幅信号的调制信号频率fm2=50Hz
fc3=Fs/40; %第3路调幅信号的载波频率fc3=250Hz,
fm3=fc3/10; %第3路调幅信号的调制信号频率fm3=25Hz
xt1=cos(2*pi*fm1*t).*cos(2*pi*fc1*t); %产生第1路调幅信号
xt2=cos(2*pi*fm2*t).*cos(2*pi*fc2*t); %产生第2路调幅信号
xt3=cos(2*pi*fm3*t).*cos(2*pi*fc3*t); %产生第3路调幅信号
st=xt1+xt2+xt3; %三路调幅信号相加
fxt=fft(st,N); %计算信号st的频谱
%====以下为绘图部分,绘制st的时域波形和幅频特性曲线====================
subplot(3,1,1)
plot(t,st);grid;xlabel('t/s');ylabel('s(t)');
axis([0,Tp/8,min(st),max(st)]);title('(a) s(t)的波形')
subplot(3,1,2)
stem(f,abs(fxt)/max(abs(fxt)),'.');grid;title('(b) s(t)的频谱')
axis([0,Fs/5,0,1.2]);
xlabel('f/Hz');ylabel('幅度')
5.实验程序框图
图10.4.2 实验4程序框图
6.思考题
(1)请阅读信号产生函数mstg,确定三路调幅信号的载波频率和调制信号频率。
(2)信号产生函数mstg中采样点数N=1600,对st进行N点FFT可以得到6根理想谱线。如果取N=1800,可否得到6根理想谱线?为什么?N=2000呢?请改变函数mstg中采样点数N的值,观察频谱图验证您的判断是否正确。
(3)修改信号产生函数mstg,给每路调幅信号加入载波成分,产生调幅(AM)信号,重复本实验,观察AM信号与抑制载波调幅信号的时域波形及其频谱的差别。
提示:AM信号表示式:
7.实验报告要求
(1)简述实验目的及原理。
(2)画出实验主程序框图,打印程序清单。
(3)绘制三个分离滤波器的损耗函数曲线。
(4)绘制经过滤波分离出的三路调幅信号的时域波形。
(5)简要回答思考题。
调用函数mstg产生st,自动绘图显示st的时域波形和幅频特性曲线
调用ellipord和ellip分别设计三个椭圆滤波器,并绘图显示其幅频响应特性曲线
调用filter,用三个滤波器分别对信号st进行滤波,分离出三路不同载波频率的调幅信号y1(n)、y2(n)和y3(n)
绘图显示y1(n)、y2(n)和y3(n)的时域波形
结束