《数字信号处理》课程实践报告
频率采样法设计FIR数字滤波器
频率采样法设计FIR数字滤波器
一、实验原理:
设所希望得到的滤波器的理想频率响应为,那么由系统函数的内插公式为:
(10-1)
其中是频率采样值
(10-2)
为我们提供了一条从频域设计逼近的途径。
即令
(10-3)
则对的逼近为
(10-4)
至少在采样点的频率上,两者可以具有相同的频响,即
(10-5)
当需要设计线性相位FIR滤波器时,还必须注意,采样值的幅度和相位一定要遵循线性相位滤波器幅度与相位的四种不同的约束关系。
设计所得的频率响应逼近于理想频率响应的程度与理想特性有关,如果越平缓,则越逼近;反之,如果变化越剧烈,采样点之间的理想特性变化大,则内插值与理想值的误差就越大,因而在理想特性的每一个不连续点附近都会出现肩峰与起伏,不连续性越大,出现的肩峰和起伏也越大。为了解决这一问题,在理想特性不连续点的边缘加过渡的采样点,这样虽然加宽了过滤带,但缓和了边缘上两采样点之间的突变。因而将有效地减少起伏振荡,提高阻带的最小衰减。
因此频率采样法的设计过程为:
给定
为了检验所设计的对的逼近性能,我们可以如下做检验:
在做FT中,我们可以取点数大于N的DFT代替之。
二、.设计步骤
(1)由给定的理想滤波器给出和。
(2)由式 , 求得。
(3)根据求得和。
三、实验内容
1.采用频率采样设计法设计FIR数字低通滤波器,满足以下指标
(1)取N=20,过渡带没有样本。
(2)取N=40,过渡带有一个样本,T=0.39。
(3)取N=60,过渡带有两个样本,T1=0.5925,T2=0.1009。
(4)分别讨论采用上述方法设计的数字低通滤波器是否能满足给定的技术指标。
实验代码与实验结果:
(1)N=20 过渡带没有样本
matlab程序:
N=20;
alpha=(N-1)/2;
l=0:N-1;
wl=(2*pi/N)*l;
Hrs=[1,1,1,zeros(1,15),1,1]; *对理想幅度函数取样得到取样样本
Hdr=[1,1,0,0];wdl=[0,0.25,0.25,1]; *用于绘制理想函数幅度函数的曲线
k1=0:floor((N-1)/2);
k2=floor((N-1)/2)+1:N-1;
angH=[-alpha*(2*pi)/N*k1,alpha*(2*pi)/N*(N-k2)];
H=Hrs.*exp(j*angH); *计算H(k)
h=ifft(H,N); *计算h(n)
w=[0:500]*pi/500;
H=freqz(h,1,w); *计算幅度响应
[Hr,wr]=zerophase(h); *计算幅度函数
subplot(221);
plot(wdl,Hdr,wl(1:11)/pi,Hrs(1:11),'o');
axis([0,1,-0.1,1.1]);
xlabel('\omega(\pi)');
ylabel('Hr(k)');
subplot(222);
stem(l,h,'filled');
axis([0,N-1,-0.1,0.3]);
xlabel('n');ylabel('h(n)');
subplot(223);
plot(wr/pi,Hr,wl(1:11)/pi,Hrs(1:11),'o');
axis([0,1,-0.2,1.2]);
xlabel('\omega(\pi)');
ylabel('Hr(w)');
subplot(224);
plot(w/pi,20*log10((abs(H)/max(abs(H)))));
axis([0,1,-50,5]);
grid;xlabel('\omega(\pi)');
ylabel('dB');
(2)N=40 过渡带有一个样本,T=0.39
Matlab程序:
N=40;
alpha=(N-1)/2;
l=0:N-1;wl=(2*pi/N)*l;
Hrs=[1,1,1,1,1,0.39,zeros(1,29),0.39,1,1,1,1]; *设置过渡带样本
Hdr=[1,1,0.39,0,0];wdl=[0,0.2,0.25,0.3,1];
k1=0:floor((N-1)/2);
k2=floor((N-1)/2)+1:N-1;
angH=[-alpha*(2*pi)/N*k1,alpha*(2*pi)/N*(N-k2)];
H=Hrs.*exp(j*angH);
h=ifft(H,N);
w=[0:500]*pi/500;
H=freqz(h,1,w);
[Hr,wr]=zerophase(h);
subplot(221);
plot(wdl,Hdr,wl(1:21)/pi,Hrs(1:21),'o');
axis([0,1,-0.1,1.1]);
xlabel('\omega(\pi)');
ylabel('Hr(k)');
subplot(222);
stem(l,h,'filled');
axis([0,N-1,-0.1,0.3]);
xlabel('n');
ylabel('h(n)');
subplot(223);
plot(wr/pi,Hr,wl(1:21)/pi,Hrs(1:21),'o');
axis([0,1,-0.2,1.2]);
xlabel('\omega(\pi)');
ylabel('Hr(w)');
subplot(224);
plot(w/pi,20*log10((abs(H)/max(abs(H)))))
axis([0,1,-80,5]);
grid;xlabel('\omega(\pi)');
ylabel('dB');
(3)N=60 过渡带有两个样本 T1=0.5925,T2=0.1009
Matlab程序:
N=60;
alpha=(N-1)/2;
l=0:N-1;wl=(2*pi/N)*l;
Hrs=[1,1,1,1,1,1,1,0.5925,0.1099,zeros(1,43), 0.1099, 0.5925, 1,1,1,1,1,1]; *设置过渡带样本
Hdr=[1,1,0.5925,0.1099,0,0];wdl=[0,0.2,0.2+1/30,0.3-1/30,0.3,1];
k1=0:floor((N-1)/2);
k2=floor((N-1)/2)+1:N-1;
angH=[-alpha*(2*pi)/N*k1,alpha*(2*pi)/N*(N-k2)];
H=Hrs.*exp(j*angH);
h=ifft(H,N);
w=[0:500]*pi/500;
H=freqz(h,1,w);
[Hr,wr]=zerophase(h);
subplot(221);
plot(wdl,Hdr,wl(1:31)/pi,Hrs(1:31),'o');
axis([0,1,-0.1,1.1]);
xlabel('\omega(\pi)');ylabel('Hr(k)');
subplot(222);
stem(l,h,'filled');
axis([0,N-1,-0.1,0.3]);
xlabel('n');ylabel('h(n)');
subplot(223);
plot(wr/pi,Hr,wl(1:31)/pi,Hrs(1:31),'o');
axis([0,1,-0.2,1.2]);
xlabel('\omega(\pi)');
ylabel('Hr(w)');
subplot(224);
plot(w/pi,20*log10((abs(H)/max(abs(H)))))
axis([0,1,-120,5]);
grid;xlabel('\omega(\pi)');
ylabel('dB');
(4)由实验结果第四个图可知,当时,阻带增益都没有达到-50dB,阻带增益有所减低,所以设计结果不能满足最初的设计要求。
2.采用频率采样技术设计下面的高通滤波器
对于高通滤波器,N必须为奇数。选择N=33,过渡带有两个样本,过渡带样本最优值为T1=0.1095,T2=0.598。
Matlab程序:
N=33;
alpha=(N-1)/2;
l=0:N-1;wl=(2*pi/N)*l;
Hrs=[zeros(1,11),0.1095,0.598,ones(1,7),0.598,0.1095,zeros(1,11)];
Hdr=[0,0,0.1095,0.598,1,1];wdl=[0,20/33,22/33,24/33,26/33,1];
k1=0:floor((N-1)/2);
k2=floor((N-1)/2)+1:N-1;
angH=[-alpha*(2*pi)/N*k1,alpha*(2*pi)/N*(N-k2)];
H=Hrs.*exp(j*angH);
h=ifft(H,N);
w=[0:500]*pi/500;
H=freqz(h,1,w);
h=real(h);
[Hr,wr]=zerophase(h);
subplot(221);
plot(wdl,Hdr,wl(1:17)/pi,Hrs(1:17),'o');
axis([0,1,-0.1,1.1]);
xlabel('\omega(\pi)');
ylabel('Hr(k)');
subplot(222);
stem(l,h,'filled');
axis([0,N-1,-0.1,0.3]);
xlabel('n');ylabel('h(n)');
subplot(223);
plot(wr/pi,Hr,wl(1:17)/pi,Hrs(1:17),'o');
axis([0,1,-0.2,1.2]);
xlabel('\omega(\pi)');
ylabel('Hr(w)');
subplot(224);
plot(w/pi,20*log10((abs(H)/max(abs(H)))));
axis([0,1,-120,5]);
grid;xlabel('\omega(\pi)');ylabel('dB');
四、实验心得与体会
通过这次实验,又进一步熟悉了matlab软件的使用。掌握了用MATLAB实现采用频率取样法设计FIR数字滤波器的方法,在实验过程中,我加深了对频率取样法原理的理解和学习,对理论知识有了更深刻的记忆。理论结合实际,两者在学习中有机的统一起来,对学习这门课程有着重要的意义,对今后其他课程的学习打下坚实的基础。所以,这次实实践令我受益匪浅。
第二篇:数字信号处理课程设计
燕山大学
电气工程学院
课程设计说明书
设计题目: FT与DFT的对比
系 别: 电气工程系
年级专业: 检测11-1班
学 号:
学生姓名:
指导教师:
教师职称: 副教授
电气工程学院《课程设计》任务书
课程名称: 数字信号处理课程设计
基层教学单位:仪器科学与工程系 指导教师:
说明:1、此表一式四份,系、指导教师、学生各一份,报送院教务科一份。
2、学生那份任务书要求装订到课程设计报告前面。
电气工程学院
教务科
摘要:随着信息科学和计算机技术的迅速发展,数字信号处理的理论与应用得到了飞跃式发展,形成一门极其重要的学科。本文论述了在数字信号处理过程中如何使用MATLAB软件编程,从而使一些运算量大、抽象复杂的问题变得简单而直观。
关键字:数字信号处理 FT与DFT MATLAB
Abstract: Along with the rapid development of information science and computer technology, digital signal processing has exploded in recent years and it is becoming an extremely important subject. This article discusses the applications of the soft ware MATLAB in digital signal processing, and describes how to make it simple and straight for the complicated computations and abstract problems.
Key Words: Digital signal processing
FT and DFT MATLAB
目录
摘要……………………………………………..................................1
一、引言…………………………………………………….………..3
1.1知识背景……………………………………………………3
二、基础知识……………………………………..…………..……..4
2.1信号…………………………………………………………4
2.2矩形序列……………………………………………………4
2.3傅里叶变换…………………………………………………5
2.4离散傅里叶变换……………………………………………7
三、程序设计及图像处理……………………………………………9
3.1矩形序列程序及图像………………………………………9
3.2矩形序列的傅里叶变换及图像…………………………..10
3.3矩形序列的离散傅里叶变换及图像……………………..12
四、总结…………………………………………………….……….14
4.1分析矩形序列FT与DFT间的关系………………………14
五、心得体会………………………………………………………14
六、参考文献………………………………………………………..15
七、致谢……………………………………………………………..16
一、引言:
1.1知识背景:
随着信息时代和数字世界的到来,数字信号处理已经成为一门极其重要的学科和技术领域。数字信号处理是利用计算机或通用的信号处理设备,用数字的数值计算方法对信号进行变换、滤波、压缩、增强、估计、识别等处理,以达到提取有用信息便于应用的目的。目前数字信号处理在通信、语音、图像、自动控制、雷达、军事、航空航天、医疗和家用电器等众多领域得到了广泛的应用。由于数字信号处理的理论性和实践性都很强,内容多、概念抽象、设计复杂、枯燥、难理解掌握,因此,要求应用者有较强的数学基础和一定的计算机编程能力。
MATLAB是一款用于科学计算的可视化、高性能语言与软件环境。它集数值分析、矩阵运算、信号处理和图形显示于一体, 构成了一个界面友好的用户环境。它的信号处理工具箱包含了各种经典的和现代的数字信号处理技术,是一个非常优秀的算法研究与辅助设计的工具。MATLAB的出现给信号处理分析中一些理论的掌握提供了方便。在数字信号处理教学和实验中,通常采用MATLAB来进行辅助设计和仿真。MATLAB现已成为重要的应用工具之一。
二、基础知识
2.1信号
信号通常是一个自变量或几个自变量的函数。物理信号的自变量有多种,可以是时间、距离、温度等。针对信号的自变量和函数值的取值情况,信号可以分为以下三种:
1.模拟信号(时域连续信号):信号自变量和函数值取连续值;
2.时域离散信号:自变量取离散值,函数值取连续值;
3.数字信号:信号自变量和函数值均取离散值。
实际中遇到的信号一般是模拟信号,即时域连续信号,对其进行等间隔采样便可得到时域离散信号。由于时域离散信号是一串有序的数字集合,因此时域离散信号也可以称为序列。常用的典型序列包括:单位采样序列、单位阶跃序列、矩形序列和周期序列等。
2.1矩形序列R N(n)
矩形序列的基本形式如下:
2.2傅里叶变换 FT
傅里叶变换(Fourier Transform)是一种线性的积分变换,通常用于将信号在时域和频域之间进行变换。序列的傅里叶变换定义为
①
存在的充分条件是序列绝对可和,即满足下式:
的傅里叶反变换为
②
上述①②式组成了一对傅里叶变换公式。
傅里叶变换在物理学、声学、光学、结构动力学、量子力学、通讯、金融等领域都有着广泛的应用。例如在数字信号处理过程中,傅里叶变换的典型用途是将信号分解成振幅分量和频率分量。
傅里叶变换拥有周期性、线性、对称性等诸多性质。
下面对矩形序列进行FT变换
作出其幅值(图2)和相位(图3)随频率的变化曲线如下所示
2.3离散傅里叶变换 DFT
设是一个长度为M的有限长序列,则定义的N点离散傅里叶变换(Discrete Fourier Transform)为
的离散傅里叶逆变换为
式中, N称DFT的变换区间长度,N≥M
③④通常称为离散傅里叶变换对
离散傅里叶变换的实质是有限长序列傅里叶变换的有限点离散采样,从而实现频域离散化,使数字信号处理可以在频域采用数值运算的方法进行,大大增加了数字信号处理的灵活性。另外,DFT有多种快速算法,使信号的实时处理和设备的简化得以实现。
离散傅里叶变换与傅里叶变换类似,拥有线性、隐含周期性、循环移位等性质。
下面对矩形序列进行DFT变换,设变换区间分别为4和8。
当变换区间N=4时,
当变换区间N=8时,
三、程序设计及图像处理
3.1矩形序列程序及图像
编写长度为8的矩形序列程序如下:
n=0:7;
x=[1 1 1 1 1 1 1 1 ];
stem(n,x,'.');
axis([-1 8 0 1.5])
title('长度为8的矩形序列');
xlabel('n');
ylabel('R8(n)')
Matlab输出图像如图4所示
图四
3.2矩形序列的傅里叶变换及图像
编写长度为8的矩形序列傅里叶变换程序如下:
n=0:7;
x=ones(1,8);
k=-200:200;
w=(pi/100)*k;
X=x*(exp(-j*pi/100)).^(n'*k);
magX=abs(X);
angX=angle(X);
subplot(2,1,1);
plot(w/pi,magX);
grid;
title('长度为8的矩形序列FT 幅度谱');
xlabel('ω/π');
ylabel('︳X(ejω)︳')
subplot(2,1,2);
plot(w/pi,angX);
grid;
title('长度为8的矩形序列FT 相位谱');
xlabel('ω/π');
ylabel('φ(ω)')
Matlab输出图像如图5所示
图五
3.3矩形序列的离散傅里叶变换及图像
编写长度为8的矩形序列8点、64点离散傅里叶变换程序如下:
xn=[1 1 1 1 1 1 1 1];
Xk8=fft(xn,8);
Xk64=fft(xn,64);
k=0:7;wk=2*k/8;
subplot(3,2,1);
stem(wk,abs(Xk8),'.');
title('(1)矩形序列8点DFT 幅度谱');
xlabel('ω/π');ylabel('|X(ejω)|')
subplot(3,2,5);stem(wk,angle(Xk8),'.');
title('(2)矩形序列8点DFT 相位谱');
xlabel('ω/π');ylabel('φ(ω)');axis([0,2,-3.5,3.5])
k=0:63;wk=2*k/64;
subplot(3,2,2);stem(wk,abs(Xk64),'.');
title('(3)矩形序列64点DFT 幅度谱');
xlabel('ω/π');ylabel('|X(ejω)|')
subplot(3,2,6);stem(wk,angle(Xk64),'.');
title('(4)矩形序列64点DFT 相位谱')
xlabel('ω/π');ylabel('φ(ω)');
axis([0,2,-3.5,3.5])
Matlab输出图像如图6所示
图六
四、总结
4.1分析矩形序列FT与DFT间的关系
离散傅里叶变换(DFT)的实质是对有限长序列进行傅里叶变换(FT)的有限点的离散采样,从而实现了频域的离散化。离散傅里叶变换的采样点数越多,输出信号频谱越趋近于原频谱。
五、心得体会
通过为期一周的数字信号处理课程设计,使我对所学知识有了更为深刻的理解和认识。教材中的定理、公式和例题对我的课程设计起到了很好的导向作用,同时我也掌握了如何使用数字信号处理软件MATLAB。通过编程输出图像,进行观察,使我对本次课题所研究的FT和DFT有了更加全面的了解。
我觉得近一周的课程设计对我来说,它不仅仅是让我们把所学的理论知识与实践联系起来,更重要的是它让我们提高了自己的实际动手能力,锻炼了我们独立解决问题的能力。
在本次课程设计过程中,我学习到了许多其他学科的知识,并且对以前所学的内容也有了更加深刻的理解。但是在本次课程设计过程中,我也发现我对许多知识还未做到灵活应用,在以后的学习道路上我还应该继续努力。
六、参考文献
[1]数字信号处理/高西全 丁玉美
西安电子科技大学出版社,20##年
[2]数字信号处理教程/王世一
北京理工大学出版社,20##年
[3]数字信号处理/(美)普埃克 等著,方艳梅 等译
电子工业出版社,20##年
[4]数字信号处理的MATLAB实现 /万永革
科学出版社,20##年
[5]傅里叶变换在信号处理中的优越性/李亚峻 史兴荣
天津科技大学电子信息与自动化学院 300222
[6]DFT在信号谱分析中的应用/林爱英 滕红丽 袁超
河南农业大学 450002
[7]MATLAB在数字信号处理中的应用/巩萍 赵杰
徐州医学院医学影像学院 221004
七、致谢
在本次课程设计中,我在收获知识的同时也收获了阅历,收获了成熟与喜悦。在此过程中,通过大量的查阅资料、请教指导老师、与同学相互探讨,使我在专业知识和动手实践方面都得到了很大的提升。在此,我要对给予过我帮助的老师们、同学们,表示衷心的感谢和由衷的敬意。
课设的成功离不开老师的耐心指导和帮助,少不了各位成员的相互配合。没有大家的共同努力,也就收获不了今天的成功,在此,要再次感谢所有人的努力与帮助,谢谢各位。