实验2_FFT的实现

实验2_FFT的实现
实验2_FFT的实现

电 子 科 技 大 学

实 验 报 告

学生姓名: 学 号: 指导教师:

一、实验室名称:数字信号处理实验室 二、实验项目名称:FFT 的实现 三、实验原理:

一.FFT 算法思想:

1.DFT 的定义:

对于有限长离散数字信号{x[n]},0 ≤ n ≤ N-1,其离散谱{x[k]}可以由离散付氏变换(DFT )求得。DFT 的定义为:

21

[][]N j

nk N

n X k x n e

π--==∑,k=0,1,…N-1

通常令2j

N

N e

W π-=,称为旋转因子。

2.直接计算DFT 的问题及FFT 的基本思想:

由DFT 的定义可以看出,在x[n]为复数序列的情况下,完全直接运算N 点DFT 需要(N-1)2次复数乘法和N (N-1)次加法。因此,对于一些相当大的N 值(如1024)来说,直接计算它的DFT 所作的计算量是很大的。

FFT 的基本思想在于,将原有的N 点序列分成两个较短的序列,这些序列的DFT 可以很简单的组合起来得到原序列的DFT 。例如,若N 为偶数,将原有的N 点序列分成两个(N/2)点序列,那么计算N 点DFT 将只需要约[(N/2)2 ·2]=N 2/2次复数乘法。即比直接计算少作一半乘法。因子(N/2)2表示直接计算(N/2)点DFT 所需要的乘法次数,而乘数2代表必须完成两个DFT 。上述处理方法可以反复使用,即(N/2)点的DFT 计算也可以化成两个(N/4)点的DFT (假定N/2为偶数),从而又少作一半的乘法。这样一级一级的划分下去一直到最后就划分成两点的FFT 运算的情况。

3.基2按时间抽取(DIT )的FFT 算法思想:

设序列长度为2L N =,L 为整数(如果序列长度不满足此条件,通过在后面补零让其满足)。

将长度为2L N =的序列[](0,1,...,1)x n n N =-,先按n 的奇偶分成两组:

12[2][][21][]

x r x r x r x r =+=,r=0,1,…,N/2-1

DFT 化为:

1/21

/21

2(21)0

/21

/21

22120

0/21

/21

1/2

2/2

[]{[]}[][2][21][][][][]N N N nk rk r k

N

N

N

n r r N N rk k rk

N

N

N

r r N N rk k rk

N N

N r r X k DFT x n x n W

x r W

x r W x r W W

x r W x r W

W

x r W ---+===--==--=====

+

+=+=

+∑∑

上式中利用了旋转因子的可约性,即:2/2rk

rk

N

N W W =。又令

/2

1

/21

11

/22

2/2

[][],[][]N N

rk

rk

N

N r r X k x r W

X k x r W

--===

=∑∑,则上式可以写成: 12[][][]k

N X k X k W X k =+(k=0,1,…,N/2-1)

可以看出,12[],[]X k X k 分别为从[]X k 中取出的N/2点偶数点和奇数点序列的N/2点DFT 值,所以,一个N 点序列的DFT 可以用两个N/2点序列的DFT 组合而成。但是,从上式可以看出,这样的组合仅表示出了[]X k 前N/2点的DFT 值,还需要继续利用12[],[]X k X k 表示[]X k 的后半段本算法推导才完整。利用旋转因子的周期性,有:(/2)

/2/2

rk

r k N N N W W +=,则后半段的DFT 值表达式:

/21/21()211/21/21

00

[][][][]2N N N r k rk N N r r N X k x r W x r W X k --+==+===∑∑,同样,22[][]2N X k X k += (k=0,1,…,N/2-1),所以后半段(k=N/2,…,N-1)的DFT 值可以用前半段k 值表达式获得,中间还利用到()2

2N

N

k k k N

N

W W W W +==-,

得到后半段的[]X k 值表达式为:12[][][]k

N X k X k W X k =-(k=0,1,…,N/2-1)

。 这样,通过计算两个N/2点序列12[],[]x n x n 的N/2点DFT 12[],[]X k X k ,可以组合得到N 点序列的DFT 值[]X k ,其组合过程如下图所示:

1[]X k 12[][]k

N X k W X k +

2[]X k nk

N W -1 12[][]k N X k W X k -

比如,一个N = 8点的FFT 运算按照这种方法来计算FFT 可以用下面的流程图来表示:

x(0)

x(1)

x(2)

x(3)x(4)

x(5)

x(6)

x(7)

X(7)

X(6)X(5)X(4)X(3)X(2)

X(1)X(0)

4.基2按频率抽取(DIF )的FFT 算法思想:

设序列长度为2L N =,L 为整数(如果序列长度不满足此条件,通过在后面补零让其满足)。

在把[]X k 按k 的奇偶分组之前,把输入按n 的顺序分成前后两半:

1

/21

1

/2

/21

/21

()2

00

/21

2

[]{[]}[][][][][]2

[[][]],0,1,...,1

2

N N N nk

nk nk

N

N

N n n n N N N N n k nk N N

n n N N k nk N N n X k DFT x n x n W

x n W

x n W N x n W x n W N x n x n W W k N ---===--+==-====

+

=+

+=

++=-∑∑

因为21N N

W

=-,则有2(1)N k k N

W

=-,所以:

/21

[][[](1)[]],0,1,...,12

N k

nk

N n N X k x n x n W k N -===

+-+=-∑

按k 的奇偶来讨论,k 为偶数时:

/21

20

[2][[][]],0,1,...,12

N rn N n N X r x n x n W k N -==

++

=-∑

k 为奇数时:/21

(21)0

[21][[][]],0,1,...,12

N r n

N n N X r x n x n W k N -+=+=-+=-∑

前面已经推导过2/2rk

rk N

N W W =,所以上面的两个等式可以写为:

/21

/20

[2][[][]],0,1,...,/212

N rn

N n N X r x n x n W r N -==

++

=-∑

/21

/20

[21]{[[][]]},0,1,...,/212

N n nr N N n N X r x n x n W W r N -=+=

-+

=-∑ 通过上面的推导,[]X k 的偶数点值[2]X r 和奇数点值[21]X r +分别可以由组合而成的N/2点的序列来求得,其中偶数点值[2]X r 为输入x[n]的前半段和后半段之和序列的N/2点DFT 值,奇数点值[21]X r +为输入x[n]的前半段和后半段之差再与n

N W 相乘序列的N/2点DFT 值。

令1[][][]2

N x n x n x n =++

,2[][[][]]2n

N N x n x n x n W =-+,则有:

/21

/21

1/2

2/20

[2][],[21][],0,1,...,

12

N N rn

rn

N N n n N

X r x n W

X r x n W r --===

+=

=-∑

这样,也可以用两个N/2点DFT 来组合成一个N 点DFT ,组合过程如下图所示:

[]x n [][]2

N

x n x n ++

[]2N x n + -1 n N W [[][]]2

n

N N x n x n W -+

二.在FFT 计算中使用到的MATLAB 命令:

函数fft(x)可以计算R 点序列的R 点DFT 值;而fft(x,N)则计算R 点序列的N 点DFT ,若R>N ,则直接截取R 点DFT 的前N 点,若R

四、实验目的:

离散傅氏变换(DFT )的目的是把信号由时域变换到频域,从而可以在频域分析处理信息,得到的结果再由逆DFT 变换到时域。FFT 是DFT 的一种快速算法。在数字信号处理系统中,FFT 作为一个非常重要的工具经常使用,甚至成为DSP 运算能力的一个考核因素。

本实验通过直接计算DFT ,利用FFT 算法思想计算DFT ,以及使用MATLAB 函数中的FFT 命令计算离散时间信号的频谱,以加深对离散信号的DFT 变换及FFT 算法的理解。

五、实验内容:

a) 计算实数序列5()cos

,025616

x n n n π

=≤≤的256点DFT 。 b) 计算周期为1kHz 的方波序列(占空比为50%,幅度取为+/-512,采样

频率为25kHz ,取256点长度) 256点DFT 。

六、实验器材(设备、元器件):

安装MATLAB 软件的PC 机一台,DSP 实验演示系统一套。

七、实验步骤:

(1) 先利用DFT 定义式,编程直接计算2个要求序列的DFT 值。

(2) 利用MATLAB 中提供的FFT 函数,计算2个要求序列的DFT 值。 (3) (拓展要求)不改变序列的点数,仅改变DFT 计算点数(如变为计

算1024点DFT 值),观察画出来的频谱与前面频谱的差别,并解释这种差别。通过这一步骤的分析,理解频谱分辨力的概念,解释如何提高频谱分辨力。

(4) 利用FFT 的基本思想(基2-DIT 或基2-DIF ),自己编写FFT 计

算函数,并用该函数计算要求序列的DFT 值。并对前面3个结果进行对比。

(5) (拓展要求)尝试对其他快速傅立叶变换算法(如Goertzel 算法)

进行MATLAB 编程实现,并用它来计算要求的序列的DFT 值。并与前面的结果进行对比。

(6) (拓展要求)在提供的DSP 实验板上演示要求的2种序列的FFT

算法(基2-DIT ),用示波器观察实际计算出来的频谱结果,并与理论结果对比。

八、实验数据及结果分析:

注:本次实验在寝室电脑上完成,所用MATLAB版本为MATLAB R2010b 程序:

(2)对要求的2种序列进行基2-DIT和基2-DIF FFT算法程序序列生成的代码同(1)。这里给出FFT算法的程序:

(3)对要求的2种序列用MATLAB中提供的FFT函数进行计算的程

结果:

(1)对2种要求的序列直接进行DFT计算的频域波形

50

100

150200250

300

-1-0.500.5

1Time index n

A m p l i t u d e Sinusoidal, time-domain sequence

Frequency index k

M a g n i t u d e

Magnitude of DFT samples(direct method)

050

100150200250300

-1000

-50005001000

Time index n

A m p l i t u d e

Periodic square wave, time-domain sequence

4

Frequency index k

M a g n i t u d e

Magnitude of DFT samples(direct method)

(2) 对2种要求的序列进行基2-DIT 和基2-DIF FFT 算法频域波形

(3) 对2种要求的序列用MATLAB 中提供的FFT 函数计算的频域波形。

Frequency index k

M a g n i t u d e

Magnitude of DFT samples-Sinusoidal wave(fft method)

4

Frequency index k

M a g n i t u d e

Magnitude of DFT samples-Periodic square wave(fft method)

(4)(拓展要求)分析利用上面的方法画出的信号频谱与理论计算出来的频谱之间的差异,并解释这种差异。

(5)(拓展要求)保持序列点数不变,改变DFT 计算点数(变为1024点),观察频谱的变化,并分析这种变化,由此讨论如何提高频谱分辨力的问题。

M a g n i t u d e

Frequency index k

1024 DFT samples of sinusoidal sequence

4

M a g n i t u d e

Frequency index k

1024 DFT samples of square wave sequence

可见,将DFT 计算点数由256点增加到1024点后,频谱变得更密了。这是由于“栅栏效应”——通过栅栏观察频谱,可能造成一些频谱丢失。增加DFT 计算点数相当于时域补零,使得谱线更密。但是补零并不能提高频谱分辨率,提高频谱分辨率的有效方法是增加采样信号的实际长度。

九、实验结论:

1. 直接用DFT 定义和用FFT 算法计算的DFT 结果一致,但是FFT 算法的效率更高。

2. 时域补零并不能提高频谱分辨率,有效的方法是增加采样信号的实际长度。

十、总结及心得体会:

通过本实验,加强了MATLAB 使用技能,练习了用定义和FFT 算法计算序列的DFT ;对于FFT 算法,用基2-DIT 实现,由于时间原因,没有做基2-DIF ,但基本思想一致,只是变成频域抽样;实验加深了我对FFT 算法思想的理解,学到了不少新知识、新技巧,将许多知识运用到了实践中。

十一、对本实验过程及方法、手段的改进建议:

1.建议在实验指导书中增加一些内容,如编程思想、码位倒序等,因为具体的编程实现和仅了解算法思想之间还是有一定差别的。

2.建议适当调整实验时间段,不要和考试时间段重合,让同学们有机会认真研究实验内容,并有时间和老师交流。

报告评分:

指导教师签字:

《GIS设计与实现》复习资料

《GIS设计与实现》复习资料 默认分类2009-07-03 08:20:49 阅读341 评论0 字号:大中小订阅 《GIS设计与实现》复习资料 第一章引论 1、何谓GIS?GIS主要研究的内容是什么? GIS是以计算机技术为依托,以具有空间内涵的地理数据为处理对象,运用系统工程和信息科学的理论,采集、储存、显示、处理、分析、输出地理信息的计算机系统,为规划、管理和决策提供信息来源和技术支持。 研究内容:数据采集、数据存储、数据处理和分析、数据输出。 2、GIS逐步走向成熟的今天,其发展呈现出哪些趋势? ①GIS趋于综合性发展②GIS数据模型研究 ③GIS数据共享和互操作促进GIS社会化发展 ④GIS产业化发 展⑤GIS软件向组件式GIS发展 3、从发展历程角度来看,GIS软件经历了哪几个阶段,各阶段的主要特点是什么? ①集成式GIS:在一个系统中集成了GIS的各项功能; ②模块式GIS:系统分成许多相对独立的功能模块; ③核心式GIS:从底层提供GIS功能,通过API访问; ④组件式GIS:通过标准通信接口实现模块间通信及GIS与其它系统集成; ⑤万维网GIS:结合Internet,实现GIS的共享和互操作。 第二章 GIS设计思想和方法 1、GIS设计与一般信息系统设计相比较,有什么差异?

3、GIS作为一个特殊的软件领域,其设计过程有哪些区别于其他软件设计的独有特点? 1)GIS处理的是空间数据,具有数据量庞大、实体种类繁多、实体间的关联复杂等特点。 2)GIS设计以空间数据为驱动。 3)GIS工程投资大、周期长、风险大、涉及部门繁多。 4、什么是UML?数据质量?结构化生命周期法、原型法、编码、继承、对象? 1)UML(Unified Modeling Language)又称统一建模语言或标准建模语言。它是一种定义良好、易于表达、功能强大且普遍适用的建模语言。其支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。 UML是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行建模,而且,UML 适用于系统开发过程中从需求规格描述到系统完成后测试的不同阶段。 2)数据质量:是对空间数据在表达空间位置、空间关系、专题特征等要素时,所能达到的准确性、一致性、完整性的度量,一般描述为空间数据的可靠性和精度,用误差来表示。 3)结构化生命周期法:规定了软件开发过程中的各项工程活动,一般包括可行性分析、需求分析、总体设计、详细设计、编码及测试六项活动,并规定了它们自上而下,相互衔接的固定次序,前一阶段的成果是后一阶段工作开展的基础。 4)原型法:其主要思想是借助原型来辅助软件开发。在开发初期,开发人员根据自己对用户需求的理解,利用开发工具快速构造出原型软件,用户及开发人员通过对原型软件的试运行、评价、修正和改进,逐步明确对软件的功能需求以进行正式开发或者直接把原型扩充成最终产品。 5)编码:是根据一定的协议或格式把模拟信息转换成比特流的过程。 6)继承:是对具有层次关系的类的属性和操作进行共享的一种机制。如在一个已有的基础上加上若干新内容形成新类。

实验二 链表操作实现

实验二链表操作实现 实验日期: 2017 年 3 月 16 日 实验目的及要求 1. 熟练掌握线性表的基本操作在链式存储上的实现; 2. 以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点; 3. 掌握线性表的链式存储结构的定义和基本操作的实现; 4. 通过本实验加深对C语言的使用(特别是函数的参数调用、指针类型的应用)。 实验容 已知程序文件linklist.cpp已给出学生身高信息链表的类型定义和基本运算函数定义。 (1)链表类型定义 typedef struct { int xh; /*学号*/ float sg; /*身高*/ int sex; /*性别,0为男生,1为女生*/ } datatype; typedef struct node{ datatype data; /*数据域*/ struct node *next; /*指针域*/ } LinkNode, *LinkList; (2)带头结点的单链表的基本运算函数原型 LinkList initList();/*置一个空表(带头结点)*/ void createList_1(LinkList head);/*创建单链表*/ void createList_2(LinkList head);/* 创建单链表*/ void sort_xh(LinkList head);/*单链表排序*/ void reverse(LinkList head);/*对单链表进行结点倒置*/ void Error(char *s);/*自定义错误处理函数*/ void pntList(LinkList head);/*打印单链表*/ void save(LinkList head,char strname[]);/*保存单链表到文件*/

编译原理实验报告

课程实验报告课程名称:《编译原理》 专业班级:计算机科学与技术11级10班 学号:XXXXXXX 姓名:X X 指导教师:刘铭 报告日期:2014年6月16日

计算机科学与技术学院 目录 目录 (2) 1 实验一词法分析 (3) 1.1实验目的 (3) 1.2实验要求 (3) 1.3算法思想 (4) 1.4实验程序设计说明 (5) 1.5词法分析实现 (6) 1.6词法实验结果及结果分析 (12) 2 实验二语法分析 (13) 2.1 实验目的 (13) 2.2 实验要求 (13) 2.3 算法思想 (13) 2.4 实验程序设计说明 (15) 2.5 语法分析实现 (15) 4 实验中遇到的问题及解决 (22) 参考资料 (23)

1 实验一词法分析 1.1 实验目的 设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 1.2 实验要求 1、待分析的简单的词法 (1)关键字: begin if then while do end 所有的关键字都是小写。 (2)运算符和界符 := + - * / < <= <> > >= = ; ( ) # (3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义: ID = letter (letter | digit)* NUM = digit digit* (4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。 2、各种单词符号对应的种别码: 表1 各种单词符号对应的种别码 3、词法分析程序的功能: 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。 其中:syn为单词种别码; token为存放的单词自身字符串;

《数据结构》实验报告 设计循环单链表

《数据结构》实验报告 1、实验名称:设计循环单链表 2、实验日期: 2013-3-26 3、基本要求: 1)循环单链表的操作,包括初始化、求数据元素个数、插入、删除、取数据元素; 2)设计一个测试主函数实际运行验证所设计循环单链表的正确性。 4、测试数据: 依次输入1,2,3,4,5,6,7,8,9,10,删除5,再依次输出数据元素。 5、算法思想或算法步骤: 主函数主要是在带头结点的循环单链表中删除第i个结点,其主要思想是在循环单链表中寻找到第i-1个结点并由指针p指示,然后让指针s指向a[i]结点,并把数据元素a[i]的值赋给x,最后把a[i]结点脱链,并动态释放a[i]结点的存储空间。 6、模块划分: 1)头文件LinList.h。头文件LinList.h中包括:结点结构体定义、初始化操作、求当前数据个数、插入一个结点操作、删除一个结点操作以及取一个数据元素操作; 2)实现文件dlb.cpp。包含主函数void main(void),其功能是测试所设计的循环单链表的正确性。

7、数据结构: 链表中的结点的结构体定义如下: typedef struct Node { DataType data; struct Node *next; }SLNode; 8、源程序: 源程序存放在两个文件中,即头文件LinList.h和实现文件dlb.cpp。//头文件LinList.h typedef struct Node { DataType data; struct Node *next; }SLNode; void ListInitiate(SLNode **head) //初始化 { *head=(SLNode *)malloc(sizeof(SLNode)); //申请头结点,由head指示其地址 (*head)->next=*head; }

GIS设计和开发

gis设计与开发 Gis设计与开发思路 现实需求、GIS概念模型、机理过程、人机交互系统、现实需求 开发方式:独立开发,扩展式二次开发,集成式二次开发 第一章GIS设计思想内容,标准 (一)GIS设计目标 通过改进系统设计方法,严格执行开发的内容划分,进行阶段质量把关以及做好项目建设的组织管理工作,从而达到增强系统的实用性,降低系统开发和应用的成本,延长系统生命周期的目的。 (二)GIS设计的特点 1、数据:数据量大,实体种类繁多、实体间关联复杂的特点 2、功能:GIS设计以空间数据为驱动 3、工程:GIS工程投资大,周期长,风险大,涉及部门繁多 二gis设计的理论基础 Gis工程学:GIS本身发展和将系统工程学思想引入GIS设计的产物 (一)GIS工程学体系 1、任务:寻求系统总体最优化 2、基础理论:(1)系统学思想(整体性,层次性,相关性,功能性,动态性),(2)系统工程学(3)软件工程学(4)地理信息科学三层次(理论,技术,应用) 3、方法论:根据GIS工程学的基础理论而形成的一系列程序化的基本操作技术与方法(二)GIS工程学的特点 1、以空间信息系统工程优化为目的 2、横跨多学科 3、直接面向决策,为可持续发展提供决策支持 4、与GIS产业化密切相关 三GIS设计的内容 (一)设计原则:标准化,先进性,兼容性,高效性,可靠性通用性 (二)设计内容 软件设计和数据库设计 第二章gis设计的方法 一、结构化生命周期法 1、结构化生命周期法又称结构化分析和设计方法,又称结构化系统开发方法 结构化生命周期法是系统分析员,软件工程师,程序员以及最终用户按照用户至上的原则,自顶向下分析与设计和自底向上逐步实施建立计算机系统的一个过程,是组织,管理和控制信息系统的开发过程的一种基本框架。 2、基本思想:(1)要求设计过程必须严格按照阶段进行 (2)在系统建立之前就必须严格的定义和描述用户的需求。 3、阶段划分:(1)系统开发的准备阶段 (2)调查研究及可行性研究阶段

编译原理实验报告

编译原理实验报告 姓名: 学号: 班级: 学院: 南昌大学信息工程学院计算机系 2014年6月

目录 实验一 (3) 实验二 (8) 实验三 (15)

实验1 词法分析程序的设计 学生姓名:学号:专业班级: 实验类型:□验证□综合□设计□创新实验日期:实验成绩: 一、实验目的 掌握计算机语言的词法分析程序的开发方法。 二、实验内容 编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。 三、实验要求 1、根据以下的正规式,编制正规文法,画出状态图; 标识符<字母>(<字母>|<数字字符>)* 十进制整数0 |(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* 如有余力,则进一步分析八进制和十六进制整数,其正规式如下: 八进制整数0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)* 十六进制整数0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)* 运算符和界符+ - * / > < =<= >=( ) ;{ } 关键字main if then else while do int (可根据需要添加) 2、根据状态图,设计词法分析函数int scan( ),完成以下功能: 1)从文本文件中读入测试源代码,根据状态转换图,分析出一个单词, 2)以二元式形式输出单词<单词种类,单词属性> 其中单词种类用整数表示: 0:标识符 1:十进制整数 2:八进制整数 3:十六进制整数 运算符和界符,关键字采用一字一符,不编码 其中单词属性表示如下: 标识符,整数由于采用一类一符,属性用单词表示 运算符和界符,关键字采用一字一符,属性为空 3、编写测试程序,反复调用函数scan( ),输出单词种别和属性。 四、实验环境 PC微机 DOS操作系统或Windows 操作系统 Turbo C 程序集成环境或Visual C++ 程序集成环境

GIS设计与实现 期末考试复习资料

选择题 1、GIS软件体系结构设计。指软件的整体结构,即软件系统是由哪些构件及构件的连接件组成的。 GIS软件体系结构的类型: 、单机结构。GIS软件的所有的功能(输入输出、数据和应用程序)都在一台计算机上实现。随着计算机技术的发展,该结构逐渐在应用中被淘汰。 、客户机/服务器体系结构Client/Server,简称C/S)。C/S体系结构一般部署在局域网中,由客户应用程序(前台程序)和服务器程序(后台程序)组成。 C/S模式的特性 位置透明性 平台独立性 数据结构透明 分布式的查询 、浏览器/服务器体系结构(Browser/Server,简称B/S)。它是一种高度集中的分布式处 理模式,数据和GIS软件均存放在服务器 端,使用通用的浏览器作为客户端应用的 执行环境,不需在客户端进行任何软件的 安装和维护工作。 B/S模式一般采用三层结构: 客户端、应用服务器和数据服务器。 、面向地理信息服务的WebGIS。将WEB服务应用于GIS。目前正处于实验性阶段 2、GIS接口设计。 、系统与标准数据的接口。所谓“标准数据”是指常用的商业GIS软件的数据格式,如ESRI的Shp、MapInfo的Mif等格式。 、互操作接口。指设计GIS之间、GIS内各子系统之间和子系统内各个模块之间的接口,使它们能够较好地进行通讯和实现功能共享。 、空间数据与属性数据的接口。在GIS中,空间数据与属性数据的结合有两种形式:绑定式和分离式,下表给出两种结合方式的比较。 、GIS与系统开发环境的接口。CAD、OA、RDBMS是政府部门GIS工程方案中系统开发环境的组成部分。将这三者和GIS集成起来,设计良好的接口,组建高效的图文信息系统,是GIS工程方案的核心内容之一。

编译原理实验报告《LL(1)语法分析器构造》

《LL(1)分析器的构造》实验报告 一、实验名称 LL(1)分析器的构造 二、实验目的 设计、编制、调试一个LL(1)语法分析器,利用语法分析器对符号串的识别,加深对语法分析原理的理解。 三、实验内容和要求 设计并实现一个LL(1)语法分析器,实现对算术文法: G[E]:E->E+T|T T->T*F|F F->(E)|i 所定义的符号串进行识别,例如符号串i+i*i为文法所定义的句子,符号串ii+++*i+不是文法所定义的句子。 实验要求: 1、检测左递归,如果有则进行消除; 2、求解FIRST集和FOLLOW集; 3、构建LL(1)分析表; 4、构建LL分析程序,对于用户输入的句子,能够利用所构造的分析程序进行分析,并显示出分析过程。 四、主要仪器设备 硬件:微型计算机。 软件: Code blocks(也可以是其它集成开发环境)。 五、实验过程描述 1、程序主要框架 程序中编写了以下函数,各个函数实现的作用如下: void input_grammer(string *G);//输入文法G

//将文法G预处理得到产生式集合P,非终结符、终结符集合U、u, int eliminate_1(string *G,string *P,string U,string *GG);//消除文法G中所有直接左递归得到文法GG int* ifempty(string* P,string U,int k,int n);//判断各非终结符是否能推导为空 string* FIRST_X(string* P,string U,string u,int* empty,int k,int n);求所有非终结符的FIRST集 string FIRST(string U,string u,string* first,string s);//求符号串s=X1X2...Xn的FIRST集 string** create_table(string *P,string U,string u,int n,int t,int k,string* first);//构造分析表 void analyse(string **table,string U,string u,int t,string s);//分析符号串s 2、编写的源程序 #include #include #include using namespace std; void input_grammer(string *G)//输入文法G,n个非终结符 { int i=0;//计数 char ch='y'; while(ch=='y'){ cin>>G[i++]; cout<<"继续输入?(y/n)\n"; cin>>ch; } } void preprocess(string *G,string *P,string &U,string &u,int &n,int &t,int &k)//将文法G预处理产生式集合P,非终结符、终结符集合U、u, { int i,j,r,temp;//计数 char C;//记录规则中()后的符号 int flag;//检测到() n=t=k=0; for( i=0;i<50;i++) P[i]=" ";//字符串如果不初始化,在使用P[i][j]=a时将不能改变,可以用P[i].append(1,a) U=u=" ";//字符串如果不初始化,无法使用U[i]=a赋值,可以用U.append(1,a) for(n=0;!G[n].empty();n++) { U[n]=G[n][0]; }//非终结符集合,n为非终结符个数 for(i=0;i

单链表实验报告

计算机与信息技术学院综合性、设计性实验报告 一、实验目的 (1)熟悉顺序表的创建、取值、查找、插入、删除等算法,模块化程序设计方法。 二、实验仪器或设备 (1)硬件设备:CPU为Pentium 4 以上的计算机,内存2G以上 (2)配置软件:Microsoft Windows 7 与VC++6.0 三、总体设计(设计原理、设计方案及流程等) 设计原理: 单链表属于线性表,线性表的存储结构的特点是:用一组任意存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。因此,对于某个元素来说,不仅需要存储其本身的信息,还需要存储一个指示其直接后继的信息。 设计方案: 采用模块化设计的方法,设计各个程序段,最终通过主函数实现各个程序段的功能。设计时,需要考虑用户输入非法数值,所以要在程序中写入说可以处理非法数值的代码。 设计流程: 1. 引入所需的头文件; 2. 定义状态值; 3. 写入顺序表的各种操作的代码; 写入主函数,分别调用各个函数。在调用函数时,采用if结构进行判断输 入值是否非法,从而执行相应的程序 四、实验步骤(包括主要步骤、代码分析等) #include // EOF(=A Z 或F6),NULL #in clude // srand( ) ,rand( ),exit (n) #in clude // malloc( ),alloc( ),realloc() 等 #in clude // INT_MAX 等 #in clude #in clude #in clude // floor(),ceil( ),abs() #in clude // cout,ci n #in clude // clock( ),CLK_TCK,clock_t #defi ne TRUE 1 #defi ne FALSE 0 #defi ne OK 1 #defi ne ERROR 0 #defi ne INFEASIBLE -1

实验二单链表基本操作技巧

实验二单链表基本操作 一实验目的 1.学会定义单链表的结点类型,实现对单链表的一些基本操作和具体 的函数定义,了解并掌握单链表的类定义以及成员函数的定义与调用。 2.掌握单链表基本操作及两个有序表归并、单链表逆置等操作的实现。二实验要求 1.预习C语言中结构体的定义与基本操作方法。 2.对单链表的每个基本操作用单独的函数实现。 3.编写完整程序完成下面的实验内容并上机运行。 4.整理并上交实验报告。 三实验内容 1.编写程序完成单链表的下列基本操作: (1)初始化单链表La。 (2)在La中第i个元素之前插入一个新结点。 (3)删除La中的第i个元素结点。 (4)在La中查找某结点并返回其位置。 (5)打印输出La中的结点元素值。 2 .构造两个带有表头结点的有序单链表La、Lb,编写程序实现将La、 Lb合并成一个有序单链表Lc。 合并思想是:程序需要3个指针:pa、pb、pc,其中pa,pb分别指向La表与Lb表中当前待比较插入的结点,pc 指向Lc表中当前最后一个结点。依次扫描La和Lb中的元素,比较当前元素的值,将较小者链接到*pc 之后,如此重复直到La或Lb结束为止,再将另一个链表余下的内容链接到pc所指的结点之后。 3.构造一个单链表L,其头结点指针为head,编写程序实现将L逆置。 (即最后一个结点变成第一个结点,原来倒数第二个结点变成第二个结点,如此等等。) 四思考与提高 1.如果上面实验内容2中合并的表内不允许有重复的数据该如何操作? 2.如何将一个带头结点的单链表La分解成两个同样结构的单链表Lb,Lc,使得Lb中只含La表中奇数结点,Lc中含有La表的偶数结点?

链表实验报告

链表实验报告

————————————————————————————————作者: ————————————————————————————————日期:

《数据结构》实验报告二 系别:嵌入式系统工程系班级:嵌入式11003班 学号:11160400314姓名:孙立阔 日期:2012年4月9日指导教师:申华 一、上机实验的问题和要求: 单链表的查找、插入与删除。设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求: 1.从键盘输入10个字符,产生不带表头的单链表,并输入结点值。 2.从键盘输入1个字符,在单链表中查找该结点的位置。若找到,则显示“找到了”;否则, 则显示“找不到”。 3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插 入在对应位置上,输出单链表所有结点值,观察输出结果。 4.从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。 5.将单链表中值重复的结点删除,使所得的结果表中个结点值均不相同,输出单链表所有结 点值,观察输出结果。 6.删除其中所有数据值为偶数的结点,输出单链表所有结点值,观察输出结果。 7.(★)将单链表分解成两个单链表A和B,使A链表中含有原链表中序号为奇数的元素, 而B链表中含有原链表中序号为偶数的元素,且保持原来的相对顺序,分别输出单链表A和单链表B的所有结点值,观察输出结果。 二、程序设计的基本思想,原理和算法描述: (包括程序的结构,数据结构,输入/输出设计,符号名说明等) 创建一个空的单链表,实现对单链表的查找,插入,删除的功能。 三、源程序及注释: #defineOK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define TRUE 1

GIS设计与实现单选

GIS设计与实现自测题 一、单项选择题 1、结构化程序设计概念最早由 E.W.Dijkstra于()年提出 A. 1965年 B. 1963年 C. 1962年 D. 1967年 2、()是GIS中最底层和最基本的技术。 A. 地理数据存储 B. 地理空间分析 C. 地理数据处理 D. 地理数据建模 3、在成寻流程图常用符号中菱形表示() A. 逻辑判断 B. 控制流 C. 处理步骤 D. 程序起止 4、E-R图中椭圆表示() A. 实体 B. 属性 C. 关系 D. 联系 5、通过数据校正与()等手段可以提高输出质量 A. 编辑与图形整饰 B. 误差消除 C. 坐标转换 D. 数字化 6、GIS软件可分为工具型软件和() A. 应用型软件 B. 嵌入式软件 C. 基础软件 D. 数据处理软件 7、GIS软件可分为工具型软件和() A. 应用型软件 B. 嵌入式软件 C. 基础软件 D. 数据处理软件 8、空间数据结构分为矢量结构、栅格结构和() A. 不规则三角网 B. 拓扑数据 C. 空间数据 D. 属性数据 9、第现实地理系统的计算机模拟可分为三个层次:()、逻辑模型和物理模型。 A. 空间分布模型 B. 概念模型 C. 数据模型 D. 应用模型 10、GIS设计以()为驱动 A. 空间数据 B. 业务数据 C. 属性数据 D. 功能数据 11、GIS系统工程学中三维结构是()提出的。 A. A.D.Hall B. GoodChild C. Grady Booch D. Jackbson 12、GIS系统工程学中的三维结构包含时间维、知识维和() A. 逻辑维 B. 理论维 C. 方法维 D. 工程学 13、地理信息系统科学体系分为三个层次:理论地理信息科学、技术地理信息科学和() A. 应用地理信息科学 B. 空间地理信息科学 C. 虚拟地理信息科学 D. 基础地理信息科学 14、结构化生命周期法将系统开发过程划分为()个主要阶段 A. 七个 B. 六个 C. 三个 D. 五个15、面向对象技术的三个基本的概念为对 象、类和() A. 接口 B. 继承 C. 派生 D. 超类 16、在用例图中,参与者之间主要是 ()关系 A. 泛化 B. 包含 C. 扩展 D. 继承 17、OMT采用对象模型、动态模型和() 等来描述一个系统 A. 静态模型 B. 功能模型 C. 混合模型 D. 结构模型 18、OMT采用对象模型、动态模型和() 等来描述一个系统 A. 静态模型 B. 功能模型 C. 混合模型 D. 结构模型 19、对象模型用()来表示 A. 对象图 B. 类图 C. 序列图 D. 活动图 20、动态模型用()图来表示 A. 状态图 B. 活动图 C. 数据流图 D. 动态图 21、原型从本质上可分为两种类型:丢弃 型原型和() A. 进化型原型 B. 进取型原型 C. 渐进型原型 D. 试验型原型 22、系统定义的基本任务包括功能需求、 性能需求、环境需求和() A. 数据需求 B. 软件需求 C. 用户需求 D. 硬件需求 23、系统定义的基本任务包括功能需求、 性能需求、环境需求和() A. 数据需求 B. 软件需求 C. 用户需求 D. 硬件需求 24、GIS数据流图中的椭圆形图标表示() A. 外部实体 B. 加工 C. 数据流 D. 数据存储文件 25、数据字典是关于()的集合 A. 数据信息 B. 数据对象 C. 属性信息 D. 实体 26、数据字典和()一起构成信息 系统的逻辑模型 A. 数据流图 B. 结构图 C. 用例图 D. 层次图 27、在用例图中,用例和参与者之间的关 系是() A. 关联关系 B. 泛化关系 C. 包含关系 D. 扩展关系 28、在一定条件下,把新的行为加入到已 有的用例中,获得新用例称为()用 例 A. 扩展 B. 包含 C. 关联 D. 泛化 29、GIS总体设计主要任务是将系统需求转 换为数据结构和() A. 数据设计 B. 软件体系结构 C. 体系结构设计 D. 层次图、HPO图、结构图 30、在结构图中,尾部是空心圆表示传递 的是() A. 数据 B. 模块调用 C. 控制信息 D. 模块名 31、面向对象的设计方法采用()来 组织和构造系统总体设计过程 A. 类图 B. 结构图 C. 用例图 D. 层次图 32、用于建立系统与其参与者之间交互的 模型称为() A. 边界类 B. 实体类 C. 分析类 D. 控制类 33、类的组成包括类、()以及他们之间 的关系。 A. 接口 B. 控制流 C. 对象 D. 数据流 34、具体描述建立在类的一般描述之上, 并对其进行扩展,这种关系为() A. 泛化关系 B. 扩展关系 C. 关联关系 D. 实现关系 35、在GIS用户界面的开发中,一般采用 ()方法 A. 原型化 B. 瀑布型 C. 结构化 D. 面向对象型 36、PDL的过程元素是() A. 块结构 B. 语法 C. 模块 D. 数据说明 37、在序列图中,表示对象的过程处于激 活状态时,生命线是() A. 双道线 B. 带箭头的虚线 C. 虚线 D. 垂直的虚线 38、序列图由对象、生命线、激活和() 组成 A. 消息 B. 类 C. 用例 D. 操作 39、在活动图中,活动的起点用() 图标表示。 A. 黑的实心圆 B. 空心圆 C. 圆角矩形 D. 平滑的圆角矩形 40、空间数据库中常用的坐标系有地理坐 标系和() A. 平面直角坐标系 B. 屏幕坐标系

实验二 单链表的基本算法

实验二单链表的基本算法一.实验目的: 通过上机编程掌握 1.生成单链表的基本算法; 2.在单链表上的插入、删除运算。 二.实验要求: 1. 给出程序设计的基本思想、原理和算法描述。 2. 画出程序流程图;根据数据结构有关知识编出算法程序; 3. 源程序给出注释; 4. 保存和打印出程序的运行结果,并结合程序进行分析。 三.实验内容: 1.编写函数实现单链表的基本运算: (1)单链表的生成 (2)单链表的插入 (3)单链表的删除 2.编写主函数测试单链表的各种基本运算: (1)生成一个至少包含有5个元素的单链表,元素值由计算机输入 (2)在表中的第5个位置上插入元素”7” (3)删除表中的第6个元素 (4)显示(1)—(3)每一步的操作结果

实验原理:首先建立头结点,形成一个单链表,通过malloc函数创建新的结点单元,将要读取的数据赋值给新结点。其次插入链表,从头结点开始依次延指针域查找需要插入的结点,为插入数据元素x生成一个新结点s,将x插入在s和s-1之间。最后链表结点删除,找到指定结点的前趋结点通过改变连接完成删除。 源程序: #include #include typedef int datatype; typedef struct node/*结构体更名为NODE*/ { datatype data; struct node *next; }NODE; NODE *creatlink() /*建立带头结点的单链表*/ { NODE *head,*s ,*p; int x; head=(NODE*)malloc(sizeof(NODE)); /*生成一个NODE型新结点并赋值给head*/ p=head; scanf("%d",&x); while(x!=0) { s=(NODE*)malloc(sizeof(NODE)); /*生成一个NODE型新结点并赋值给s*/

链表实现多项式相加实验报告

实验报告 课程名称:数据结构 题目:链表实现多项式相加 班级: 学号: 姓名: 完成时间:2012年10月17日

1、实验目的和要求 1)掌握链表的运用方法; 2)学习链表的初始化并建立一个新的链表; 3)知道如何实现链表的插入结点与删除结点操作; 4)了解链表的基本操作并灵活运用 2、实验内容 1)建立两个链表存储一元多项式; 2)实现两个一元多项式的相加; 3)输出两个多项式相加后得到的一元多项式。 3、算法基本思想 数降序存入两个链表中,将大小较大的链表作为相加后的链表寄存处。定义两个临时链表节点指针p,q,分别指向两个链表头结点。然后将另一个链表中从头结点开始依次与第一个链表比较,如果其指数比第一个小,则p向后移动一个单位,如相等,则将两节点的系数相加作为第一个链表当前节点的系数,如果为0,则将此节点栓掉。若果较大,则在p前插入q,q向后移动一个,直到两个链表做完为止。 4、算法描述 用链表实现多项式相加的程序如下: #include #include #include struct node{ int exp; float coef; struct node*next; };

void add_node(struct node*h1,struct node*h2); void print_node(struct node*h); struct node*init_node() { struct node*h=(struct node*)malloc(sizeof(struct node)),*p,*q; int exp; float coef=1.0; h->next=NULL; printf("请依次输入多项式的系数和指数(如:\"2 3\";输入\"0 0\"时结束):\n"); p=(struct node*)malloc(sizeof(struct node)); q=(struct node*)malloc(sizeof(struct node)); for(;fabs(coef-0.0)>1.0e-6;) { scanf("%f %d",&coef,&exp); if(fabs(coef-0.0)>1.0e-6) { q->next=p; p->coef=coef; p->exp=exp; p->next=NULL; add_node(h,q); } } free(p); free(q); return(h); } void add_node(struct node*h1,struct node*h2) { struct node*y1=h1,*y2=h2; struct node*p,*q; y1=y1->next; y2=y2->next; for(;y1||y2;) if(y1) { if(y2) { if(y1->expexp) y1=y1->next; else if(y1->exp==y2->exp) { y1->coef+=y2->coef; if(y1->coef==0)

GIS设计与实现

GIS设计与实现

GIS构成由4个基本要素构成:硬件、软件、数据、人员 一硬件计算机硬件环境包括从GIS数据采集 到数据处理乃至数据输出所涉及到的所有硬件 设备 ?数据采集、输入设备 ?采集设备包括测绘仪器和遥感设备 ?输入设备包括数字化仪、扫描仪以 及计算机的输入设备 ?数据存储和处理设备 ?存储设备包括磁盘、磁带机等磁存 储介质以及一些光存储介质 ?处理设备包括计算机、图像处理器、 网络设备等 ?输出设备 ?输出设备通常是标准的计算机外围 设备,如打印机、绘图仪 ?还可以通过计算机显示器或是外接 的高分辨率显示装置(如投影仪等) 进行输出 二软件 ?GIS软件可以分为工具型软件和应用型软件

?

?矢量数据结构 ?不规则三角网(TIN) ?属性数据是表征空间实体属性信息的数 据,一般用关系型数据库进行管理 四人员 ?人员是GIS的重要构成因素 ?人员在GIS中 ?对GIS软件进行开发、维护和升级 ?对GIS数据进行搜集、入库和管理 ?应用GIS进行生产生活实践,实现GIS 的价值 GIS用户:GIS最终用户、GIS专业人士、GIS开发商/系统集成商 GIS设计特点 ?GIS处理的是空间数据,具有数据量庞大、实体种类繁多、实体间的关联复杂等特点?GIS设计以空间数据位驱动 ?GIS工程投资大、周期长、风险大、涉及部门繁多。 GIS工程学体系主要由任务、基础理论和方法论三方面组成

?任务 ?运用系统论的理论和方法,实现GIS工 程的最优设计、最优管理和最优运行, 以求得系统总体最优化 ?基础理论 ?系统学 ?地理信息科学 ?系统工程学 ?…… ?方法论 ?根据理论形成的一系列程序化的基本操 作技术与方法 地理信息科学 ?地理信息科学 ?1992年GoodChild首次提出 ?研究地理信息的本质特征与运动规律 ?被划分为三个层次 ?地理信息科学被划分为三个层次 ?理论地理信息科学 ?技术地理信息科学 ?应用地理信息科学 信息资源共享

编译原理实验题目及报告要求

编译原理上机实验试题 一、实验目的 通过本实验使学生进一步熟悉和掌握程序设计语言的词法分析程序的设计原理及相关的设计技术, 如何针对确定的有限状态自动机进行编程序;熟悉和 掌握程序设计语言的语法分析程序的设计原理、熟悉 和掌握算符优先分析方法。 二、实验要求 本实验要求:①要求能熟练使用程序设计语言编程;②在上机之前要有详细的设计报告(预习报告); ③要编写出完成相应任务的程序并在计算机上准确 地运行;④实验结束后要写出上机实验报告。 三、实验题目 针对下面文法G(S): S→v = E E→E+E│E-E│E*E│E/E│(E)│v │i 其中,v为标识符,i为整型或实型数。要求完成 ①使用自动机技术实现一个词法分析程序; ②使用算符优先分析方法实现其语法分析程序,在 语法分析过程中同时完成常量表达式的计算。

1、题目(见“编译原理---实验题目.doc,“实验题目”中的第一项) 2、目的与要求(见“编译原理---实验题目.doc”) 3、设计原理: (1)单词分类:标识符,保留字,常数,运算符,分隔符等等 (2)单词类型编码 (3)自动机 4、程序流程框图 5、函数原型(参数,返回值) 6、关键代码(可打印,只打印关键代码) 7、调试: (1)调试过程中遇到的错误,如何改进的; (2)需要准备测试用例(至少3个,包含输入和输出)——(可打印) 8、思考: (1)你编写的程序有哪些要求是没有完成的,你觉得该采用什么方法去完成; (2)或者是你觉得程序有哪些地方可以进一步完善,简述你的完善方案。

1、题目(见“编译原理---实验题目.doc,“实验题目”中的第二项) 2、目的与要求(见“编译原理---实验题目.doc”) 3、设计原理:构造出算法优先关系表 4、程序流程框图 5、函数原型(参数,返回值) 6、关键代码(可打印,只打印关键代码) 7、调试: (1)调试过程中遇到的错误,如何改进的; (2)需要准备测试用例(至少3个,包含输入和输出)——(可打印) 8、思考: (1)你编写的程序有哪些要求是没有完成的,你觉得该采用什么方法去完成; (2)或者是你觉得程序有哪些地方可以进一步完善,简述你的完善方案。

GIS设计与实现课程设计

目录 1.设计背景:................................................................................................................ 2.设计目标.................................................................................................................... 设计原则与设计方法...................................................................................................... 1.设计原则:................................................................................................................ 设计方法.......................................................................................................................... 三、需求分析(系统定义).......................................................................................... 1.系统设计的方法........................................................................................................ 2.系统定义:................................................................................................................ 四、系统设计(系统结构体系、模块设计).............................................................. 结构体系设计:.............................................................................................................. 2.系统模块设计:........................................................................................................ 五、数据库设计.............................................................................................................. 1.概述............................................................................................................................ 2.需求分析.................................................................................................................... 3.概念设计.................................................................................................................... 4.逻辑模型.................................................................................................................... 5.物理设计.................................................................................................................... 6.数据字典设计............................................................................................................ 六、系统实施计划.......................................................................................................... 七、总结.......................................................................................................................... 设计背景与目标 1.设计背景: 随着现代社会的发展,大学校园的规模日益扩展,传统的管理方法显得力不从心,为了提高效率,节省物力人力资源,大学校园的管理也将逐步实现现代信息化管理。而地理信息系统(一种基于空间数据库的空间信息处理与分析技术,已被广泛应用于市政、交通、电信、军事和旅游等领域,具有极其广泛的应用前景,从地理关系的角度分析和解决与地理信息有关的问题往往会得到意想不到的效果。)技术的发展恰好迎合了这个需求,可以为大学校园的数字化、信息化管理提供相应的技术支持,大学校园多媒体管理系统应运而生。我校虽然已经有了较完善的校园多媒体管理系统,但是身为我校地理信息系统专业的学生,专业相关的课程设计选择这个题目显得更有意义,特建立我校的空间管理GIS系统。 2.设计目标 要求包括道路及道路基本信息、建筑基本信息、校园特殊标记的空间数

相关文档
最新文档