MATLAB程序设计实验报告 本文关键词:程序设计,实验,报告,MATLAB
MATLAB程序设计实验报告 本文简介:MATLAB程序设计实验报告学院:地球物理与石油资源学院班级:物探(基)10901姓名:刘豪合作人:侯颖学号:200906170班内编号:09指导教师:陈义群完成日期:2012年4月20日一、实验项目:IIR数字滤波器的设计法二、时间地点:2012/4/17-2012/4/21三、实验内容1、数字滤
MATLAB程序设计实验报告 本文内容:
MATLAB程序设计实验报告
学
院:地球物理与石油资源学院
班
级:
物探(基)10901
姓
名:
刘豪
合
作
人:
侯颖
学
号:
200906170
班内编号:
09
指导教师:
陈义群
完成日期:
2012年4月20日
一、实验项目:IIR数字滤波器的设计法
二、时间地点:2012/4/17-2012/4/21
三、实验内容
1、数字滤波器知识
数字滤波器与模拟滤波器相对应,在数字信号处理中,如果一个离散时间系统是用来对输入信号进行滤波处理,那么该系统就可以称为数字滤波器(Digital
Filter)。因此,数字滤波器实际上就是离散时间系统。
数字滤波器的基本输入/输出关系为:
yn=xn*hn=k=-∞∞xkh(x-k)
其中h(n)为滤波器的单位抽样响应。
数字滤波器的转移函数为:
Hz=B(z)A(z)=b1+b2z-1+…+b(nb+1)z-nba1+a2z-1+…+a(na+1)z-na
如果A(z)=1,则称滤波器为(有限冲激响应)FIR滤波器;否则为(无限冲激响应)IIR滤波器。令
z=ejw,得到滤波器的频率响应为:
Hejw=kr=1M(ejw-qr)k=1N(ejw-qk)
定义|H(ejw)|
为滤波器的幅频响应,而
φ(ejw)为滤波器的相频响应。
2、IIR数字滤波器的频率变换设计法
IIR数字滤波器的频率变换设计法的基本思想是,由原型低通滤波器,通过频率变换形成不同形式的数字滤波器。其实现过程分为两种:第一种,首选根据滤波器设计要求,设计模拟原型低通滤波器,然后进行频率变换,将其转换为相应的数字滤波器;第二种,首选根据滤波器的设计要求,设计模拟原型低通滤波器,然后利用冲激响应不变法或双线性变换法,将原型低通滤波器数字化成数字原型低通滤波器,最后进行频率变换,将数字原型低通滤波器转换为相应的数字滤波器(高通、带通等)。
1.
MATLAB的典型设计
为了实现频率变换设计IIR数字滤波器,MATLAB在信号处理具箱中提供了大量的IIR数字滤波器设计的相关函数,其中包括IIR滤波器阶次估计函数、模拟低通滤波器原型设计函数,以及模拟滤波器变换函数。每个函数有多钟调用方法
Buttord
计算Butterworth滤波器的阶次和截止频率
Cheb1lord
计算ChebyshevI型滤波器的阶次
Cheb2lord
计算ChebyshevII型滤波器的阶次
elipord
计算椭圆滤波器最小阶次
besselap
Bessel模拟低通滤波器原型设计
buttap
Butterworth模拟低通滤波器原型设计
cheb1ap
Chebyshev
I型模拟低通滤波器原型设计
cheb2ap
Chebyshev
II型模拟低通滤波器原型设计
elipap
椭圆模拟低通滤波器原型设计
lp2bp
把低通模拟滤波器转换成带通滤波器
lp2bs
把低通模拟滤波器转换成带阻滤波器
lp2hp
把低通模拟滤波器转换成高通滤波器
lp2
改变低通模拟滤波器的截止频率
因此,利用这些函数,IIR数字滤波器的频率变化设计将变得非常简单。利用MATLAB设计IIR数字滤波器可以分为以下几类来实现。
①
按一定规则将数字滤波器的技术指标转换为模拟低通滤波器的技术指标[a]
②
根据转换后的技术指标使用滤波器阶数函数,确定滤波器的最小阶数N和截止频率
?c
。
③
利用最小阶数N产生模拟低通滤波器原型。
④
利用截止频率
?c
把模拟低通滤波器原型转换成模拟低通、高通、带通或者带阻滤波器。
⑤
利用冲激响应不变法或者双线性变换法把模拟滤波器转换成数字滤波器。
四、实验结论
1、MATLAB的典型设计
(1)、设计一个数字信号处理系统,它的采样率为100Hz,希望在该系统中设计一个Butterworth型高通数字滤波器,使其通带中允许的最大衰减为0.5dB,阻带内的最小衰减为40dB,通带上限临界频率为30Hz,阻带下限临界频率为40Hz。
程序如下:
(2)、利用冲激响应不变法设计一个低通ChebyshevI型数字滤波器,其通带上限临界频率为0.3Hz,阻带临界频率为0.4Hz,采样频率为1000Hz,在通带内的最大衰减为0.3dB,阻带内的最小衰减为80dB。
程序如下:
2、MATLAB的直接设计
(1)、试设计一个阻带IIR数字滤波器,具体要求是,通带截止频率wp1=600Hz,wp2=800Hz;阻带截止频率ws1=700Hz,ws2=750Hz;通带内的最大衰减为rp=0.1dB;阻带内的最小衰减为rs=45dB;采样频率为Fs=2000Hz。
程序如下:
(2)、设计一个ChebyshevI型带通滤波器,具体要求:wp1=55Hz,wp2=75Hz,ws1=50Hz,ws2=80Hz,rp=0.5,rs=55,Fs=200Hz。
程序如下:
五、心得体会
Matlab是一种用于科学技术计算的高性能语言。它将计算、可视化和程序设计集成在一个非常容易使用的环境之中,是我们熟悉的数学符号表示问题与答案。通过对matlab课程的学习,让我们可以更进一步的运用软件来解决我们在地震勘探中所遇到的信号分析的相关问题,也可以让我们在学习生活中更好的运用matlab程序来解决更对我们平常用生活中难以计算的问题。它是地震勘探开发研究中一个重要的工具。
篇2:《汇编语言程序设计》学习心得自主学习报告
《汇编语言程序设计》学习心得自主学习报告 本文关键词:汇编,自主学习,学习心得,语言程序设计,报告
《汇编语言程序设计》学习心得自主学习报告 本文简介:自主学习报告书题目:学习汇编语言程序设计报告学习课程:《汇编语言程序设计》姓名:专业:学号:福建工程学院国脉信息学院教务处制二○一二年六月学习汇编语言程序设计报告书由于实际工作中对汇编语言程序设计应用较多,在业余时间我自主学习了北京大学出版社出版的《汇编语言程序设计》一书。这一本书介绍了80x86汇
《汇编语言程序设计》学习心得自主学习报告 本文内容:
自主学习报告书
题
目:学习汇编语言程序设计报告
学习课程:
《汇编语言程序设计》
姓
名:
专
业:
学
号:
福建工程学院国脉信息学院教务处
制
二○一二年六月
学习汇编语言程序设计报告书
由于实际工作中对汇编语言程序设计应用较多,在业余时间我自主学习了北京大学出版社出版的《汇编语言程序设计》一书。这一本书介绍了80x86汇编语言程序设计的方法和技术,共分为两个部分:第一部分介绍80x86cpu的编程结构,汇编语言程序的格式和伪指令,80x86cpu的寻址方式和指令系统;第二部分深入讨论分支程序、循环程序、子程序基本程序设计方法,以及以中断为主的i/o程序设计,其中包括宏指令、多模块连接技术、汇编语言与高级语言的混合编程、dos和bios提供的常用中断调用,以及文件系统等内容。
通过本书,我深入的掌握了汇编语言的编程方法、思路和技巧,并对计算机的底层编程有一定认识;还对计算机底层运行程序的机制及计算机的工作原理有了深入的了解。
在学汇编的过程中,最重要的就是要掌握汇编语言中的指令的一些基本用法。当然要能够真正的了解其中的内涵,这样在实际的编程中也能够像运用高级语言一样灵活的变通。汇编语言作为一种低级程序设计语言,既然是低级所以应该是最底层的,与计算机内部的结构联系应该联系很密切,而且我在学习中也深刻的了解到了这一点。比如说后来学到的寄存器、中断、还要各种寻址方式以及进栈出栈,好多的就是设计到计算机硬件。前面几章都是对计算机内部结构和一些常用的指令以及寻址方式的寻址方式。到后面学到子程序以及宏的作用才真正发现到其实跟高级语言差别不大。以C语言为例,C语言也是由一个一个的函数组成的。没想到想汇编这样的低级语言也可以这样。在汇编语言的子程序和宏中,我个人更感觉宏的运用更像我们高级语言的子函数,通过定义好的宏,我们在后面直接调用就可以了。尤其是宏带参数的宏跟C语言中带参数的函数真的很像,根据参数的不同调用宏就能得到不同的结果。而汇编中的子程序没有这个传递参数这个功能。在调用子程序的时候要注意各寄存器中的内容。子程序是在程序执行期间由主程序调用的,它只占有它自身大小的一个空间,他不仅是源程序级别
简化,形成的目标代码较短;而宏调用则是在汇编期间展开的,每调用依次进把宏定义体展开一次,它是源程序级的简化。因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间越大。如果宏调用次数较多的话,则其空间上的开销也是应该考虑的因素
汇编程序给人感觉最烦的就是好多程序的结果不能直接通过运行EXE文件显示出来,而更多的是经过DEBUG单步调试才能看到其内在变化,看是否正确。汇编程序不像其他的高级语言一样需要编译器,而是直接的就能在记事本上编写,然后进行汇编和连接就可以了。学习汇编调试,关键就是要掌握DEBUG的运用。汇编程序把汇编语言翻译成机器语言的过程称为汇编。是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。相比较以前学过的高级语言如C、C++等,电脑等于在迁就人的思维方式,但学汇编,人却必须要去迁就电脑的思维方式,要设身处地地用电脑的角度去思考问题,这就是我们学习汇编语言时遇到的最大的障碍。
一开始,我对PC的寻址方式和很不理解。这方面的知识是很抽象的,需要比较强的空间想象能力。尤其是我们在输入字符串时,那这些字符是如何进行排列的呢。对于这个问题,我相信很多人也和我一样很难想象。汇编语言的寻址方式有直接寻址,寄存器寻址,基址变址寻址,相对基址变址寻址等等,掌握这些都是编写汇编程序很重要的环节。在编写汇编程序时,应该注意特别容易出现的错误,例如在编写数据传送指令时,目的操作数和源操作数的类型一定要匹配,CS不能作为目的操作数,offset后只能跟简单地址符号等等。
学习完这本书后,我也对之前的高级语言中的一些知识有了更新的认识,能够让我们更好的理解高级语言,尤其是高级语言中的C语言,汇编语言对于内存的操作都是基于内存地址的,而C语言中最令人头疼的指针概念,说白了就是内存的地址指针的学习和应用中最头疼的就是在指针这个抽象的概念和实际的内存单元之间建立思维映射,而这些恰恰是我们在汇编语言学习中频繁做的一件平常事另外,对于C语言中的数据类型形参实参函数调用全局变量局部变量等概念及操作,我们都可以用汇编语言中的一些操作相关联,把这些抽象的概念和过程,通过汇编语言形成一个具体的映像,深度剖析,这样我们才能真正的学会学好C语言计算机科学的各个方面是一个统一的整体,只有多方面穿插,交互才能更好的搭建计算机知识体系。
我认为汇编语言本身还是一门很重要的应用技术。首先由于汇编的操作由于跟硬件紧密相关,所以,很多硬件设施的嵌入式编程使用的都是使用的汇编语言,因为汇编语言更直接有效率。现在的数码产品很多,而这些数码产品赖以生存的芯片,主板等,都包含了嵌入式程序,而这些程序中,汇编语言的使用是相当重要的。
通过一个月多的自主学习,我常常上网搜索资料辅助理解,遇到难以理解的问题时也学会自己解决,我想这不仅是知识层面上的提升,更是自己在学习能力上的提升。这样的学习能力将非常有助于我今后的个人能力提高,我会把这种自主学习培养成为习惯,持之以恒下去。
篇3:程序设计实验报告4
程序设计实验报告4 本文关键词:程序设计,实验,报告
程序设计实验报告4 本文简介:实验报告四课程名称程序设计基础实验日期4月27日实验项目名称数组的应用实验地点1#606实验类型□验证型√设计型□综合型学时2一、实验目的及要求(本实验所涉及并要求掌握的知识点)1、了解并掌握数组的定义、初始化和引用。2、熟练掌握筛法的思想与设计步骤。3、熟练掌握二分查找法的思想与设计步骤。4、熟练
程序设计实验报告4 本文内容:
实验报告四
课程名称
程序设计基础
实验日期
4月27日
实验项目名称
数组的应用
实验地点
1#606
实验类型
□验证型
√设计型
□综合型
学
时
2
一、实验目的及要求(本实验所涉及并要求掌握的知识点)
1、了解并掌握数组的定义、初始化和引用。
2、熟练掌握筛法的思想与设计步骤。
3、熟练掌握二分查找法的思想与设计步骤。
4、熟练掌握冒泡排序算法的思想与设计步骤。
二、实验环境(本实验所使用的硬件设备和相关软件)
安装XP操作系统的电脑一台
Microsoft
Visual
C++6.0软件
三、实验内容、步骤及结果
1、
采用筛法求1-100间所有的素数,并且每行输出7个。
#include
#include
int
main()
{
int
count,i,m,n;
count=0;
for(m=2;m<=100;m++){
n=sqrt(m);
for(i=2;in){
printf(“%6d“,m);
count++;
if(count%7==0)
printf(“/n“);
}
}printf(“/n“);
return
0;
}
2、
请按由大到小的次序输入十个整数,再输入一个整数x,采用二分查找法查找x在该数列中的位置,若找到,则显示位置;否则,提示“NO
FOUND”。
#include
int
main()
{
int
a[10]={10,9,8,7,6,5,4,3,2,1};
int
low,high,mid,n=10,x;
printf(“Enter
x:“);
scanf(“%d“,low=0;high=n-1;
while(low<=high){
mid=(low+high)/2;
if(x==a[mid])
break;
else
if(x
high=mid-1;
else
low=mid+1;
}
if(low<=high)
printf(“Index
is
%d/n“,mid);
else
printf(“NOT
found/n“);
return
0;
}
3、
请输入十个整数,采用冒泡排序法按由小到大的次序排序后输出。
#include
#include
int
main(int
argc,char*
argv[]){
int
i,a[10],*p;p=a;
void
sort(int*p);
printf(“请输入数组a。/n“);
for(i=0;i<10;i++)scanf(“%d“,printf(“原数组a为。/n“);
for(i=0;i<10;i++)
printf(“%3d“,a[i]);
printf(“/n“);
sort(p);
printf(“排序后数组a为。/n“);
for(i=0;i<10;i++,p++)
printf(“%3d“,*p);
printf(“/n“);}
void
sort(int*p){
int
i,j,t;
for(i=0;i<9;i++)
for(j=0;j*(p+j+1))
{
t=*(p+j);(p+j)=*(p+j+1);(p+j+1)=t;
}
}
4、
一个数如果从左往右读和从右往左读是相同的,则称这个数为回文数,比如898,1221,15651都是回文数。求:既是回文数又是质数的5位十进制数有多少个?
#include
#include
void
main()
{
int
i,j,m,n,p,q,count,sum=0;
int
v;
for(i=10000;i<=99999;i++)
{
m=i/10000;
q=i%10;
n=(i%10000)/1000;
p=(i%100)/10;
v=
1;
if((m==q)j*j
if(i%j==0)
{
v
=
0;
break;
}
if(v)
{
sum++;
}
}
}
printf(“%d/n“,sum);
}
5、N盏灯排成一排,从1到N按顺序依次编号。有N个人也从1到N依次编号,第一个人(1号)将灯全部关闭。第二个人(2号)将凡是2和2的倍数的灯打开。第三个人(3号)将凡是3和3的倍数的灯做相反处理(该灯如为打开的,将它关闭;如为关闭的,将它打开)。以后的人都和3号一样,将凡是与自己相同的灯和是自己编号倍数的灯做相反处理。请问:当第N个人操作之后,哪几盏灯是点亮的?
四、实验总结(对本实验结果进行分析,实验心得体会及改进意见)
通过本次实验,我进一步了解和掌握了掌握数组的定义、初始化和引用。,并成功了几个程序的编写。但是,在这个过程中也暴漏出来一些问题,比如,对的二分查找法的思想与设计步骤使用不够熟练,在今后的学习中,我会努力学习理论知识,同时加强自己的动手能力,做到理论与实践相结合,真正提高自己的专业水平。
实验评语
实验成绩
指导教师签名:
2013年4月27日