电子科技大学数字信号处理实验4滤波器设计.docx
《电子科技大学数字信号处理实验4滤波器设计.docx》由会员分享,可在线阅读,更多相关《电子科技大学数字信号处理实验4滤波器设计.docx(14页珍藏版)》请在冰豆网上搜索。
电子科技大学数字信号处理实验4滤波器设计
电子科技大学
实验报告
学生姓名:
好心的学长学号:
指导教师:
一、实验室名称:
数字信号处理实验室
二、实验项目名称:
数字滤波器的设计及实现
三、实验原理:
一.数字滤波器设计:
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所示。
在本界面中填写需要设计的滤波器参数,即可设计出需要的滤波器。
还可以通过本工具提供的幅度,相位观察窗口观察设计出来的滤波器的幅度,相位特性等,并可以将设计好的滤波器冲激响应系数导出进行实现。
图1MATLAB中滤波器辅助设计软件界面
四、实验目的:
从理论上讲,任何的线性时不变(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信号的程序
x=randn(10,1)>0;
fl=2000;
fh=4000;
fs=20000;
ts=1/500;
tt=(0:
1/fs:
ts);
t=[tt;tt+ts;tt+2*ts;tt+3*ts;tt+4*ts;tt+5*ts;tt+6*ts;tt+7*ts;tt+8*ts;tt+9*ts];
y=zeros(10,length(tt));
i=1;
whilei<=10
y(i,:
)=x(i)*sin(2*pi*fh*t(i,:
))+~x(i)*sin(2*pi*fl*t(i,:
));
i=i+1;
end
t=reshape(t',length(tt)*10,1);
y=reshape(y',length(tt)*10,1);
subplot(211);
plot(t,y);
title('时域波形');
n=length(y);
r=fft(y)/n;
r=fftshift(r);
f=linspace(-fs/2,fs/2,n);
subplot(212);
plot(f,abs(r));
title('频谱图');
(2)FIR滤波器设计程序
[n,wn,beta,type]=kaiserord([22003500],[1,0],[0.010.01],20000);
b=fir1(n,wn,kaiser(n+1,beta));
[h,omega]=freqz(b,1,512);
plot(omega/pi,20*log10(abs(h)));
ylabel('magnitude');
xlabel('\omega/\pi');
title('magnituderesponseofthefilter');
(3)IIR滤波器设计程序
[n,wn]=cheb1ord(2*2200/20000,2*3500/20000,1,40);
[b,a]=cheby1(n,1,wn);
[h,omega]=freqz(b,a);
plot(omega/pi,20*log10(abs(h)));
ylabel('magnitude');
xlabel('\omega/\pi');
title('magnituderesponseofthefilter');
(4)FIR滤波器实现程序(用滤波器系数对输入信号进行滤波)
x=randn(10,1)>0;
fl=2000;
fh=4000;
fs=20000;
ts=1/500;
tt=(0:
1/fs:
ts);
t=[tt;tt+ts;tt+2*ts;tt+3*ts;tt+4*ts;tt+5*ts;tt+6*ts;tt+7*ts;tt+8*ts;tt+9*ts];
y=zeros(10,length(tt));
i=1;
whilei<=10
y(i,:
)=x(i)*sin(2*pi*fh*t(i,:
))+~x(i)*sin(2*pi*fl*t(i,:
));
i=i+1;
end
t=reshape(t',length(tt)*10,1);
y=reshape(y',length(tt)*10,1);
[n,wn,beta,type]=kaiserord([22003500],[1,0],[0.010.01],20000);
b=fir1(n,wn,kaiser(n+1,beta));
y1=filter(b,1,y);
plot(t,y1);
ylabel('magnitude');
xlabel('n');
title('filteredsignal');
(5)IIR滤波器实现程序(用滤波器系数对输入信号进行滤波)。
x=randn(10,1)>0;
fl=2000;
fh=4000;
fs=20000;
ts=1/500;
tt=(0:
1/fs:
ts);
t=[tt;tt+ts;tt+2*ts;tt+3*ts;tt+4*ts;tt+5*ts;tt+6*ts;tt+7*ts;tt+8*ts;tt+9*ts];
y=zeros(10,length(tt));
i=1;
whilei<=10
y(i,:
)=x(i)*sin(2*pi*fh*t(i,:
))+~x(i)*sin(2*pi*fl*t(i,:
));
i=i+1;
end
t=reshape(t',length(tt)*10,1);
y=reshape(y',length(tt)*10,1);
[n,wn]=cheb1ord(2*2200/20000,2*3500/20000,1,40);
[b,a]=cheby1(n,1,wn);
y1=filter(b,a,y);
plot(t,y1);
ylabel('magnitude');
xlabel('n');
title('filteredsignal');
结果:
(1)产生的输入FSK信号的时域和频域波形
(2)FIR滤波结果,时域和频域波形。
(3)IIR滤波结果,时域和频域波形。
九、实验结论:
实验成功使用了IIR和FIR滤波器对输入信号进行滤波.
十、总结及心得体会:
实践了使用iir和fir滤波器对输入信号进行滤波的过程.
十一、对本实验过程及方法、手段的改进建议:
应该再对滤波出来的信号做频谱分析看是否满足条件.
报告评分:
指导教师签字: