当前位置:文档之家› 《银行家算法的模拟实现》—实验报告

《银行家算法的模拟实现》—实验报告

《银行家算法的模拟实现》—实验报告
《银行家算法的模拟实现》—实验报告

《银行家算法的模拟实现》 --实验报告

题目: 银行家算法的模拟实现

专业:

班级:

组员:

指导老师:

一、实验目的

死锁会引起计算机工作僵死,因此操作系统中必须防止。本实验的目的在于让学生独立的使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生,以加深对课堂上所讲授的知识的理解。

二、实验内容

模拟实现银行家算法实现死锁避免。要求:初始数据(如系统在T0时刻的资源分配情况、每一种资源的总数量)从文本文件读入,文件中给出最大需求矩阵Max、分配矩阵Allocation,在程序中求得需求矩阵Need和可利用资源向量Available。

三、实验分析过程

1、整个银行家算法的思路。

先对用户提出的请求进行合法性检查,再进行预分配,利用安全性检查算法进行安全性检查。

1)进程一开始向系统提出最大需求量.

2)进程每次提出新的需求(分期贷款)都统计是否超出它事先提出的最大需求量.

3)若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的

剩余资源量,若不超出,则分配,否则等待

2、算法用到的主要数据结构和C语言说明。

(1)、可利用资源向量INT A V AILABLE[M] M为资源的类型。

(2)、最大需求矩阵INT MAX[N][M] N为进程的数量。

(3)、已分配矩阵INT ALLOCA TION[N][M]

(4)、还需求矩阵INT NEED[N][N]

(5)、申请各类资源数量int Request[x]; //

(6)、工作向量int Work[x];

(7)、int Finish[y]; //表示系统是否有足够的资源分配给进程,0为否,非0为是

3、银行家算法(主程序)

(1)、系统初始化。输入进程数量,资源种类,各进程已分配、还需求各资源数量,各资源可用数量等

(2)、输入用户的请求三元组(I,J,K),为进程I申请K个J类资源。

(3)、检查用户的请求是否小于还需求的数量,条件是K<=NEED[I,J]。如果条件不符则提示重新输入,即不允许索取大于需求量

(4)、检查用户的请求是否小于系统中的可利用资源数量,条件是K<=A V ALIABLE[I,J]。

如果条件不符则申请失败,阻塞该进程,重新进行进程动态资源申请(使用goto语句)

(5)、进行资源的预分配,语句如下:

A V ALIBLE[I][J]= A V ALIBLE[I][J]-K;

ALLOCATION[I][J]= ALLOCATION[I][J]+K;

NEED[I][J]=NEED[I][J]-K;

(6)、系统调用安全性检查算法(checksafe()函数)进行检查,如果检查通过,则不用回收,否则进行回收,进程资源申请失败进入等待。

4、安全性检查算法(checksafe()子函数)

(1)、设置两个临时变量。

FINISH[N]记录进程模拟执行的结束状态,初值为0,如果可以模拟执行结束,则可设为1,也可设为其它非零值以表示执行的先后次序。

WORK[M]记录模拟执行中资源的回收情况,初值为A V AILABLE[M]的值。(2)、在进程中查找符合以下条件的进程。

条件1:FINISH[I]=0

条件2:NEED[I][J]〈=WORK[J]

(3)、如果查找成功则进行资源的模拟回收,语句如下:

WORK[J]=WORK[J]+ALLOCA TION[I][J];

FINISH[I]=1 或查找到的顺序号

(4)、如果查找不成功,则检查所有进程的FINISH[],如果有一个为0,则系统不为0,返回不成功标志。否则返回成功标志。

四、系统流程图

五、程序源代码

#include

#include

#include

const unsigned short c=3;//资源类数const unsigned short t=5;//进程数

void print();//用于打印输出表格的函数void input();//用于输入的函数

void tryfenpei(int i);//试分配函数;void refenpei(int i);//恢复数据函数void checksafe(int s);//安全检测函数int temp[t];

int work[c];

//定义初始化数组

int need[t][c],request[c],available[c];

int max[t][c]={3, 5, 7 ,9 ,11,6 ,8 ,2 ,9, 5,6 ,3 ,5 ,7 ,4};

int allocation[t][c]={1 ,2 ,5 ,4, 8,5 ,4, 1 ,8 ,3 ,3 ,2 ,4, 3, 1};

int total[c]={17,21,25};

int in;//用户选择的进程号

/*------------------main函数-----------------------------*/

int main(int argc,char *argv[])

{

int i;

char ch='Y';

int l=0,m=0,a;

for( i=0;i

{

for(int j=0;j

need[i][j]=max[i][j]-allocation[i][j];

}

for( m=0;m

{

a=0;

for(int l=0;l

a+=allocation[l][m];

available[m]=total[m]-a;

}

do {

if(ch=='Y'||ch=='y')

{

cout<<"ok,现在开始进入实验……"<

cout<<"请输入需要请求的进程号(0-4):";

while(cin>>in)

{

if(!(0<=in&&in<=4))

{

cout<<"这里没有该进程,请重新输入~"<

}

else break;

}

cout<<"您输入的是"<<"p["<

cout<<"该进程需求量为:";

for(i=0;i

{

need[in][i]=max[in][i]-allocation[in][i];

cout<

cout<

cout<

cout<<"请输入请求资源向量:";//输入格式为x

for(i=0;i

{

while(cin>>request[i])

{

if(request[i]<0) cout<<"sorry,输入的数字无效~"<

else if(request[i]>need[in][i])

cout<<"超出进程需求量~"<

if(request[i]>available[i])

cout<<"系统没有足够多的可用资源量满足进程需要~"<

else break;

}

}

cout<<"输入成功~,您输入的是:"<

<

cout<<"等待已久的银行家算法开始执行~"<

tryfenpei(in);//分配函数

cout<<"试分配完成~"<

cout<<"现在进入安全性检测……"<

checksafe(in);//安全性检测函数

cout<<"您还想继续银行家算法的实验吗~?(y-继续n终止)";

}

else if(ch=='N'||ch=='n')

{

cout<<"感谢您的使用,Bye~"<

break;

}

else

cout<<"输出无效!请重新输入"<

}

while (cin>>ch);

}

/*-------输出函数-------*/

void print()

{

int i,j;

cout<<"更新数据中..."<

cout<<"|-------|------------|-----------|----------|-----------|"<

cout<<"|-------|最大需求矩阵|已分配矩阵-|-需求矩阵-|可利用资源-|"<

cout<<"| 资源| Max | Allocation| Need | available |"<

cout<<"| | A B C | A B C | A B C | A B C |"<

cout<<"|进程| | | | |"<

cout<<"|-------|------------|-----------|----------|-----------|"<

for(i=0;i<5;i++)

{

cout<<"| p"<

for(j=0;j<3;j++) {

cout<

cout<<" | ";

for(j=0;j<3;j++) {

cout<<" "<

cout<<" | ";

for(j=0;j<3;j++) {

cout<<" "<

cout<<" |";

if(i==0) {

for(j=0;j<3;j++) {

cout<<" "<

cout<<" |"; }

if(i>0)

{cout<<" |"; }

cout<

cout<<"|-------|------------|-----------|----------|-----------|"<

}

/*--------试分配函数-------*/

void tryfenpei(int i)

{

for(int f=0;f

{

available[f]=available[f]-request[f];

allocation[i][f]=allocation[i][f]+request[f];

need[i][f]=need[i][f]-request[f];

}

/*--------恢复数据函数-------*/

void refenpei(int i)

{

for(int f=0;f

{

available[f]=available[f]+request[f];

allocation[i][f]=allocation[i][f]-request[f];

need[i][f]=need[i][f]+request[f];

}

}

int com(int *p,int *q)

{

int i;

for(i=0;i

if(p[i]>q[i])

return 0;

return 1;

}

/*--------安全检测函数---------*/

void checksafe(int s)

{

int flag,temp[t],i,j,l,k=0;

bool finish[t];

for(i=0;i

finish[i]=false;

for(j=0;j

work[j]=available[j];

cout<<"|-------|-----------------|----------|"<

cout<<"| resource |-Work+Allocation-|--Finish--|"<

cout<<"| | A B C | T/F |"<

cout<<"|programme | | |"<

cout<<"|-------|-----------------|----------|"<

for(i=0;i

{

l=0;

for(j=0;j

{

if(need[i][j]>work[j])

l=1;

break;

}

if(finish[i]==false&&l==0)

{

cout<<"| p"<

for(j=0;j

{

work[j]=work[j]+allocation[i][j];

if(work[j]>9)

cout<<" "<

else

cout<<" "<

}

cout<<" ";

cout<<"|";

cout<<" ";

finish[i]=true;

cout<<"true ";

cout<<"|";

temp[k]=i;//cout<<'temp="<

k++;

i=-1; //从用户选择的进程开始对每个进程都要检测

cout<

}

}

cout<<"|-------|-----------------|----------|"<

for(i=0;i

{

if(finish[i]==false)

flag=1;

if(flag==1)

{

cout<<"系统不安全!本次资源申请不成功感!"<

cout<<"正在恢复原来的数据..."<

refenpei(in);

cout<<"恢复数据成功!正在打印输出..."<

print();

}

else

{

cout<<"找到一个安全系列:";

for(i=0;i

cout<<"P"<";

cout<

cout<<"开始给第"<<"p]"<

cout<<"分配完成!打印输出..."<

print();

cout<

}

}

}

五、程序运行结果及分析

1、运行结果

输入初值,进行安全性测试,结果安全序列,依次为P4-P0-P1-P2-P3分配资源:

资源不足,无法继续实验:

2、出现问题及解决方案

本程序考虑了程序功能实现、格式显示合理化、输入错误异常处理等各个方面的设计,尽可能使程序设计的更加完美。在长期的设计调试过程中遇到过许多问题,通过网上搜索、查询资料、调试试验等方法一一解决。下面大致罗列一些主要问题:

(1)、关于某些判断算法优劣问题:

在程序中很多地方都会用到循环判断是否符合条件的算法,在设计这些算法时有很多方法,而有的算法可以更节省时间。如下安全性算法中寻找寻找符合Finish[i]==0条件的进程的例子:

/* 算法一:

for (j=0; j

if (Work[j]>=Need[i][j]) counter=counter+1;//记数

if(counter==m){…

*/ //算法二:

for (j=0; j

if (Work[j]>=Need[i][j]); //可用大于等于需求

else{

counter=1;

break;

}

if(counter!=1){…

显然算法二要优于算法一。本程序中还有很多类似的地方。这里主要考虑的是一个程序的优化设计问题。

(2)、关于某些系统函数调用时的执行顺序:

在调用一些系统函数如getch() 、system("pause")等时发现其执行顺序的一些问题。如类似:

cout<<" =================================="<

cout<<" \n\n\n"<

system("pause");//暂停

调试时发现此时:在Microsoft Visual C++ 6.0中先执行system("pause") 再输出显示,而在调试器Bloodshed Dev-C++中则顺序执行;但当把cout<<" \n\n\n"<

查找了一下相关帮助:

在OSTREAM.H中有这样的一个inline函数:

inline _CRTIMP ostream& __cdecl endl(ostream& _outs) { return _outs << '\n' << flush; }。

也就是说

endl= return _outs << '\n' << flush;

endl除了写'\n'进外,还调用flush函数,刷新缓冲区,把缓冲区里的数据写入文件或屏幕。如果考虑效率就用'\n'

(3)、关于设置暂停的方法:

在有些地方需要暂停一下以便于用户查看信息等,总结了下大致可用以下几中方法:

方法一:

#include

system("pause");//暂停一下并显示“输入任意键继续…”

方法二:

#include

getchar();//须按回车键结束,不是任意键

方法三:

#include

getch();//等待键盘输入,不返回任何值,无任何显示

方法四:

使用char* tt=new char; cin>>tt; 方式,要求键盘输入一个与程序无关的变量

六、心得体会

“银行家算法的模拟实现”是本学期操作系统课程唯一的课程设计。在设计此程序的过程中,我们遇到过许多问题,也学到了很多东西。本程序的设计实现主要是用C++语言实现,通过对程序算法的设计优化、输出显示的格式设计、输入过程中的异常处理等一些设计过程中的问题的考虑解决,在C++学习上也有了很大的进步。程序设计过程中开始遇到的最大的问题是算法的结构设计问题,课本上只给了设计要求及简单的算法,要真正实现还需要考虑很多方面。在算法的数据结构设计上考虑了很长时间。在程序设计中先后参考了很多网络资料,也参考了一些别人写的的程序,综合这些算法思想和自己的思路对程序做了很好的设计方式,对一些算法的优越性等也作了一些考虑。此外考虑最多的就是异常错误处理的设计。一个好的程序必须能在各种环境下都有其相应的处理方式,至少能应对一些常见的可能发生的错误。比如一般的要求输入为数字时,如果输入了一个非数字字符,程序就会立即出错无法继续运行,本程序针对这个问题设计了一个shuzi();函数进行处理,处理方式为:接受键盘输入的字符为字符串,然后对字符串的每个字符进行判断是否为数字,如果有非数字字符出现则提示出错并要求重新输入。又如在判断是否继续时要求输入Y/N时,按一般的方式,如果输入为多个字符,则多余的字符会保存在缓冲区,到下次要求输入时输入而导致出错,对此问题设计处理方式为接受输入字符保存为串然后只取其首字符进行判断。还有很多类似的错误处理。还有在设置程序的显示优化时,发现暂停函数在不同的情况下执行顺序不同,如此等等。

信号与系统仿真实验报告

信号与系统仿真实验报告1.实验目的 了解MATLAB的基本使用方法和编程技术,以及Simulink平台的建模与动态仿真方法,进一步加深对课程内容的理解。 2.实验项目 信号的分解与合成,观察Gibbs现象。 信号与系统的时域分析,即卷积分、卷积和的运算与仿真。 信号的频谱分析,观察信号的频谱波形。 系统函数的形式转换。 用Simulink平台对系统进行建模和动态仿真。 3.实验内容及结果 3.1以周期为T,脉冲宽度为2T1的周期性矩形脉冲为例研究Gibbs现象。 已知周期方波信号的相关参数为:x(t)=∑ak*exp(jkω),ω=2*π/T,a0=2*T1/T,ak=sin(kωT1)/kπ。画出x(t)的波形图(分别取m=1,3,7,19,79,T=4T1),观察Gibbs现象。 m=1; T1=4; T=4*T1;k=-m:m; w0=2*pi/T; a0=2*T1/T; ak=sin(k*w0*T1)./(k*pi); ak(m+1)=a0; t=0:0.1:40; x=ak*exp(j*k'*w0*t); plot(t,real(x)); 3.2求卷积并画图 (1)已知:x1(t)=u(t-1)-u(t-2), x2(t)=u(t-2)-u(t-3)求:y(t)=x1(t)*x2(t)并画出其波形。 t1=1:0.01:2; f1=ones(size(t1)); f1(1)=0; f1(101)=0; t2=2:0.01:3; f2=ones(size(t2)); f2(1)=0; f2(101)=0; c=conv(f1,f2)/100;

t3=3:0.01:5; subplot(311); plot(t1,f1);axis([0 6 0 2]); subplot(312); plot(t2,f2);axis([0 6 0 2]); subplot(313); plot(t3,c);axis([0 6 0 2]); (2)已知某离散系统的输入和冲击响应分别为:x[n]=[1,4,3,5,1,2,3,5], h[n]=[4,2,4,0,4,2].求系 统的零状态响应,并绘制系统的响应图。 x=[1 4 3 5 1 2 3 5]; nx=-4:3; h=[4 2 4 0 4 2]; nh=-3:2; y=conv(x,h); ny1=nx(1)+nh(1); ny2=nx(length(nx))+nh(length(nh)); ny=[ny1:ny2]; subplot(311); stem(nx,x); axis([-5 4 0 6]); ylabel('输入') subplot(312); stem(nh,h); axis([-4 3 0 5]); ylabel('冲击效应') subplot(313); stem(ny,y); axis([-9 7 0 70]); ylabel('输出'); xlabel('n'); 3.3 求频谱并画图 (1) 门函数脉冲信号x1(t)=u(t+0.5)-u(t-0.5) N=128;T=1; t=linspace(-T,T,N); x=(t>=-0.5)-(t>=0.5); dt=t(2)-t(1); f=1/dt; X=fft(x); F=X(1:N/2+1); f=f*(0:N/2)/N; plot(f,F)

Matlab通信系统仿真实验报告

Matlab通信原理仿真 学号: 2142402 姓名:圣斌

实验一Matlab 基本语法与信号系统分析 一、实验目的: 1、掌握MATLAB的基本绘图方法; 2、实现绘制复指数信号的时域波形。 二、实验设备与软件环境: 1、实验设备:计算机 2、软件环境:MATLAB R2009a 三、实验内容: 1、MATLAB为用户提供了结果可视化功能,只要在命令行窗口输入相应的命令,结果就会用图形直接表示出来。 MATLAB程序如下: x = -pi::pi; y1 = sin(x); y2 = cos(x); %准备绘图数据 figure(1); %打开图形窗口 subplot(2,1,1); %确定第一幅图绘图窗口 plot(x,y1); %以x,y1绘图 title('plot(x,y1)'); %为第一幅图取名为’plot(x,y1)’ grid on; %为第一幅图绘制网格线 subplot(2,1,2) %确定第二幅图绘图窗口 plot(x,y2); %以x,y2绘图 xlabel('time'),ylabel('y') %第二幅图横坐标为’time’,纵坐标为’y’运行结果如下图: 2、上例中的图形使用的是默认的颜色和线型,MATLAB中提供了多种颜色和线型,并且可以绘制出脉冲图、误差条形图等多种形式图: MATLAB程序如下: x=-pi:.1:pi; y1=sin (x); y2=cos (x); figure (1); %subplot (2,1,1); plot (x,y1); title ('plot (x,y1)'); grid on %subplot (2,1,2); plot (x,y2);

Web网页设计实验报告

WEB系统开发 综合实验报告 题目红尘客栈网上订房页面 专业计算机科学与技术(信息技术及应用) 班级计信2班 学生蒋波涛 重庆交通大学 2013年

目录 一、设计目的 (3) 二、设计题目 (3) 三、结构设计 (3) 四、技术分析 (4) 五、设计过程 (7) 六、实验心得 (10) 七、实验总结 (11)

一、设计目的 在Internet飞速发展的今天,互联网成为人们快速获取、发布和传递信息的重要渠道,它在人们政治、经济、生活等各个方面发挥着重要的作用。因此网站建设在Internet 应用上的地位显而易见,它已成为政府、企事业单位信息化建设中的重要组成部分,从而倍受人们的重视。我们当代大学生更是离不开网络给我们带来的好处与便利.但是,我们成天浏览的网站网页到底是如何制作的呢?我想这一点很多同学都没有去深究过.所以,这学期我选择了”web网页设计”这门课, 本课程的设计目的是通过实践使同学们经历网页制作的全过程. 通过设计达到掌握网页设计、制作的技巧。 了解和熟悉网页设计的基础知识和实现技巧。根据题目的要求,给出网页设计方案,可以按要求,利用合适图文素材设计制作符合要求的网页设计作品。 熟练掌握Photoshop cs3、Dreamweaver cs等软件的的操作和应用。增强动手实践能力,进一步加强自身综合素质。学会和团队配合,逐渐培养做一个完整项目的能力。 二、设计题目 《红尘客栈》 三、结构设计 选定主题,确定题目之后,在做整个网站之前对网站进行需求分析。首先,做好需求调研。调研方式主要是上网查阅资料,在图书馆里翻阅相关书籍。 然后,调研结束之后对整个网站进行功能描述,并对网站进行总体规划,接着逐步细化。 我们选做的主题是个人主页,并且选定题目为“红尘客栈”,其目的是做一个简单的网站,介绍酒店概况,提供一定的资讯信息。 四、技术分析 (一)建立布局 在这次的网页设计中用到大量的布局,所以怎么样建立布局是关键。Dreamweaver cs3是大多数人设计网页的称手兵器,也是众多入门者的捷径。特别是其在布局方面的出色表现,更受青睐。大家都知道,没有表格的帮助,很难组织出一个协调合理的页面。 1.点击“ALT+F6”键,进入布局模式,插入布局表格。建立一个大概的布局。 2.使用背景图片:选中该项,按浏览可以插入一幅准备好的图片作为表格的背景,因为图片是以平铺的形式作为表格背景,所以表格大小和图片尺寸都要控制好。 (二)网页中的图像

系统仿真实验报告

中南大学系统仿真实验报告 指导老师胡杨 实验者 学号 专业班级 实验日期 2014.6.4 学院信息科学与工程学院

目录 实验一MATLAB中矩阵与多项式的基本运算 (3) 实验二MATLAB绘图命令 (7) 实验三MATLAB程序设计 (9) 实验四MATLAB的符号计算与SIMULINK的使用 (13) 实验五MATLAB在控制系统分析中的应用 (17) 实验六连续系统数字仿真的基本算法 (30)

实验一MATLAB中矩阵与多项式的基本运算 一、实验任务 1.了解MATLAB命令窗口和程序文件的调用。 2.熟悉如下MATLAB的基本运算: ①矩阵的产生、数据的输入、相关元素的显示; ②矩阵的加法、乘法、左除、右除; ③特殊矩阵:单位矩阵、“1”矩阵、“0”矩阵、对角阵、随机矩阵的产生和运算; ④多项式的运算:多项式求根、多项式之间的乘除。 二、基本命令训练 1.eye(m) m=3; eye(m) ans = 1 0 0 0 1 0 0 0 1 2.ones(n)、ones(m,n) n=1;m=2; ones(n) ones(m,n) ans = 1 ans = 1 1

3.zeros(m,n) m=1,n=2; zeros(m,n) m = 1 ans = 0 0 4.rand(m,n) m=1;n=2; rand(m,n) ans = 0.8147 0.9058 5.diag(v) v=[1 2 3]; diag(v) ans = 1 0 0 0 2 0 0 0 3 6.A\B 、A/B、inv(A)*B 、B*inv(A) A=[1 2;3 4];B=[5 6;7 8]; a=A\B b=A/B c=inv(A)*B d=B*inv(A) a = -3 -4 4 5 b = 3.0000 -2.0000 2.0000 -1.0000

MATLAB通信系统仿真实验报告1

MATLAB通信系统仿真实验报告

实验一、MATLAB的基本使用与数学运算 目的:学习MATLAB的基本操作,实现简单的数学运算程序。 内容: 1-1要求在闭区间[0,2π]上产生具有10个等间距采样点的一维数组。试用两种不同的指令实现。 运行代码:x=[0:2*pi/9:2*pi] 运行结果: 1-2用M文件建立大矩阵x x=[0.10.20.30.40.50.60.70.80.9 1.11.21.31.41.51.61.71.81.9 2.12.22.32.42.52.62.72.82.9 3.13.23.33.43.53.63.73.83.9] 代码:x=[0.10.20.30.40.50.60.70.80.9 1.11.21.31.41.51.61.71.81.9 2.12.22.32.42.52.62.72.82.9 3.13.23.33.43.53.63.73.83.9] m_mat 运行结果: 1-3已知A=[5,6;7,8],B=[9,10;11,12],试用MATLAB分别计算 A+B,A*B,A.*B,A^3,A.^3,A/B,A\B. 代码:A=[56;78]B=[910;1112]x1=A+B X2=A-B X3=A*B X4=A.*B X5=A^3 X6=A.^3X7=A/B X8=A\B

运行结果: 1-4任意建立矩阵A,然后找出在[10,20]区间的元素位置。 程序代码及运行结果: 代码:A=[1252221417;111024030;552315865]c=A>=10&A<=20运行结果: 1-5总结:实验过程中,因为对软件太过生疏遇到了些许困难,不过最后通过查书与同学交流都解决了。例如第二题中,将文件保存在了D盘,而导致频频出错,最后发现必须保存在MATLAB文件之下才可以。第四题中,逻辑语言运用到了ij,也出现问题,虽然自己纠正了问题,却也不明白错在哪了,在老师的讲解下知道位置定位上不能用ij而应该用具体的整数。总之第一节实验收获颇多。

编译原理实验报告

编译原理实验报告 班级 姓名: 学号: 自我评定:

实验一词法分析程序实现 一、实验目的与要求 通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法。 二、实验内容 根据教学要求并结合学生自己的兴趣和具体情况,从具有代表性的高级程序设计语言的各类典型单词中,选取一个适当大小的子集。例如,可以完成无符号常数这一类典型单词的识别后,再完成一个尽可能兼顾到各种常数、关键字、标识符和各种运算符的扫描器的设计和实现。 输入:由符合或不符合所规定的单词类别结构的各类单词组成的源程序。 输出:把单词的字符形式的表示翻译成编译器的内部表示,即确定单词串的输出形式。例如,所输出的每一单词均按形如(CLASS,VALUE)的二元式编码。对于变量和常数,CLASS字段为相应的类别码;VALUE字段则是该标识符、常数的具体值或在其符号表中登记项的序号(要求在变量名表登记项中存放该标识符的字符串;常数表登记项中则存放该常数的二进制形式)。对于关键字和运算符,采用一词一类的编码形式;由于采用一词一类的编码方式,所以仅需在二元式的CLASS字段上放置相应的单词的类别码,VALUE字段则为“空”。另外,为便于查看由词法分析程序所输出的单词串,要求在CLASS字段上放置单词类别的助记符。 三、实现方法与环境 词法分析是编译程序的第一个处理阶段,可以通过两种途径来构造词法分析程序。其一是根据对语言中各类单词的某种描述或定义(如BNF),用手工的方式(例如可用C语言)构造词法分析程序。一般地,可以根据文法或状态转换图构造相应的状态矩阵,该状态矩阵同控制程序便组成了编译器的词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序的另外一种途径是所谓的词法分析程序的自动生成,即首先用正规式对语言中的各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程序所应进行的语义处理工作,然后由一个所谓词法分析程序的构造程序对上述信息进行加工。如美国BELL实验室研制的LEX就是一个被广泛使用的词法分析程序的自动生成工具。 总的来说,开发一种新语言时,由于它的单词符号在不停地修改,采用LEX等工具生成的词法分析程序比较易于修改和维护。一旦一种语言确定了,则采用手工编写词法分析程序效率更高。 四、实验设计 1)题目1:试用手工编码方式构造识别以下给定单词的某一语言的词法分析程序。 语言中具有的单词包括五个有代表性的关键字begin、end、if、then、else;标识符;整型常数;六种关系运算符;一个赋值符和四个算术运算符。参考实现方法简述如下。 单词的分类:构造上述语言中的各类单词符号及其分类码表。 表I 语言中的各类单词符号及其分类码表 单词符号类别编码类别码的助记符单词值

交通运输系统仿真实验报告

一、系统描述 1.1.系统背景 本系统将基于下面的卫星屏幕快照创建一个模型。当前道路网区域的两条道路均为双向,每个运动方向包含一条车道。Tapiolavagen路边有一个巴士站,Menninkaisentie路边有一个带五个停车位的小型停车场。 1.2.系统描述 (1)仿真十字路口以及三个方向的道路,巴士站,停车点;添加小汽车、公交车的三维动画,添加红绿灯以及道路网络描述符; (2)创建仿真模型的汽车流程图,三个方向产生小汽车,仿真十字路口交通运行情况。添加滑条对仿真系统中的红绿灯时间进行实时调节。添加分析函数,统计系统内汽车滞留时间,用直方图进行实时展示。 二、仿真目标 1、timeInSystem值:在流程图的结尾模块用函数统计每辆汽车从产生到丢弃的,在系统中留存的时间。 2、p_SN为十字路口SN方向道路的绿灯时间,p_EW为十字路口EW方向道路的绿灯时间。 3、Arrival rate:各方向道路出现车辆的速率(peer hour)。

三、系统仿真概念分析 此交通仿真系统为低抽象层级的物理层模型,采用离散事件建模方法进行建模,利用过程流图构建离散事件模型。 此十字路口交通仿真系统中,实体为小汽车和公交车,可以源源不断地产生;资源为道路网络、红绿灯时间、停车点停车位和巴士站,需要实施分配。系统中小汽车(car)与公共汽车(bus)均为智能体,可设置其产生频率参数,行驶速度,停车点停留时间等。 四、建立系统流程 4.1.绘制道路 使用Road Traffic Library中的Road模块在卫星云图上勾画出所有的道路,绘制交叉口,并在交叉口处确保道路连通。 4.2.建立智能体对象 使用Road Traffic Library中的Car type模快建立小汽车(car)以及公共汽车(bus)的智能体对象。 4.3.建立逻辑 使用Road Traffic Library中的Car source、Car Move To、Car Dispose、

web动态网页设计实验报告

武汉理工大学华夏学院课程设计 课程名称web技术应用基础 题目在线图书销售系统的设计 专业计算机应用 班级计应1091 姓名 学号10210409126 指导教师库少平

利用已经学习的动态网页知识和数据库知识进行一个综合练习。整个设计过程中采用由点到面的方法即根据体系规划及课程系统规划的要求利用各种工具方法制作各子系统的原型系统然后测试分析原型系统最后根据原型系统的风格框架等完成网络考试的全部内容。根据需要利用ASP、SQL SEVER等技术使用数据库完成交互式模块的设计。基本信息管理包括用户管理员义工等对于此类信息提供了添加修改删除查看等四种功能 二、课程设计要求: 需要我们实现的功能有: 1、系统的用户登录及身份验证要求。 a)系统用户注册 b)验证用户的注册信息 c)系统用户进入系统时身份验证 d)系统用户在不同页面浏览时的身份验证 2、在线图书销售系统要求。 a)允许用户浏览所有图书 b)允许用户按图书种类进行查找 c)允许用户购买自己喜欢的图书 d)允许用户对购物车进行管理 e)系统实现订单的处理 f)系统完成整个购物流程 3、图书销售系统的管理子系统要求。 a)对管理员的身份进行验证 b)对数据库中的图书信息进行管理 c)对数据库中的用户信息进行管理 d)对数据库中的订单信息进行管理

3.1需求分析 本系统设计的主要实现网上图书产品的展示与在线定购以及对不同身份的人员包括管理人员,注册用户和普通浏览者进行管理。图书产品展示能分页分类进行显示。系统采用ASP在网络上架构一个网上的书店,通过网上书店可以轻松实现图书信息的查询和采购。 3.2模块设计 3.2.1 SQL数据库的创建 创建一个空数据库,然后编辑数据表的内容在动态网页面中,一般应用这种方式。

控制系统仿真实验报告

哈尔滨理工大学实验报告 控制系统仿真 专业:自动化12-1 学号:1230130101 姓名:

一.分析系统性能 课程名称控制系统仿真实验名称分析系统性能时间8.29 地点3# 姓名蔡庆刚学号1230130101 班级自动化12-1 一.实验目的及内容: 1. 熟悉MATLAB软件的操作过程; 2. 熟悉闭环系统稳定性的判断方法; 3. 熟悉闭环系统阶跃响应性能指标的求取。 二.实验用设备仪器及材料: PC, Matlab 软件平台 三、实验步骤 1. 编写MATLAB程序代码; 2. 在MATLAT中输入程序代码,运行程序; 3.分析结果。 四.实验结果分析: 1.程序截图

得到阶跃响应曲线 得到响应指标截图如下

2.求取零极点程序截图 得到零极点分布图 3.分析系统稳定性 根据稳定的充分必要条件判别线性系统的稳定性最简单的方法是求出系统所有极点,并观察是否含有实部大于0的极点,如果有系统不稳定。有零极点分布图可知系统稳定。

二.单容过程的阶跃响应 一、实验目的 1. 熟悉MATLAB软件的操作过程 2. 了解自衡单容过程的阶跃响应过程 3. 得出自衡单容过程的单位阶跃响应曲线 二、实验内容 已知两个单容过程的模型分别为 1 () 0.5 G s s =和5 1 () 51 s G s e s - = + ,试在 Simulink中建立模型,并求单位阶跃响应曲线。 三、实验步骤 1. 在Simulink中建立模型,得出实验原理图。 2. 运行模型后,双击Scope,得到的单位阶跃响应曲线。 四、实验结果 1.建立系统Simulink仿真模型图,其仿真模型为

通信工程系统仿真实验报告

通信原理课程设计 实验报告 专业:通信工程 届别:07 B班 学号:0715232022 姓名:吴林桂 指导老师:陈东华

数字通信系统设计 一、 实验要求: 信源书记先经过平方根升余弦基带成型滤波,成型滤波器参数自选,再经BPSK ,QPSK 或QAM 调制(调制方式任选),发射信号经AWGN 信道后解调匹配滤波后接收,信道编码可选(不做硬性要求),要求给出基带成型前后的时域波形和眼图,画出接收端匹配滤波后时域型号的波形,并在时间轴标出最佳采样点时刻。对传输系统进行误码率分析。 二、系统框图 三、实验原理: QAM 调制原理:在通信传渝领域中,为了使有限的带宽有更高的信息传输速率,负载更多的用户必须采用先进的调制技术,提高频谱利用率。QAM 就是一种频率利用率很高的调制技术。 t B t A t Y m m 00sin cos )(ωω+= 0≤t ≤Tb 式中 Tb 为码元宽度t 0cos ω为 同相信号或者I 信号; t 0s i n ω 为正交信号或者Q 信号; m m B A ,为分别为载波t 0cos ω,t 0sin ω的离散振幅; m 为 m A 和m B 的电平数,取值1 , 2 , . . . , M 。 m A = Dm*A ;m B = Em*A ; 式中A 是固定的振幅,与信号的平均功率有关,(dm ,em )表示调制信号矢量点在信号空

间上的坐标,有输入数据决定。 m A 和m B 确定QAM 信号在信号空间的坐标点。称这种抑制载波的双边带调制方式为 正交幅度调制。 图3.3.2 正交调幅法原理图 Pav=(A*A/M )*∑(dm*dm+em*em) m=(1,M) QAM 信号的解调可以采用相干解调,其原理图如图3.3.5所示。 图3.3.5 QAM 相干解调原理图 四、设计方案: (1)、生成一个随机二进制信号 (2)、二进制信号经过卷积编码后再产生格雷码映射的星座图 (3)、二进制转换成十进制后的信号 (4)、对该信号进行16-QAM 调制 (5)、通过升余弦脉冲成形滤波器滤波,同时产生传输信号 (6)、增加加性高斯白噪声,通过匹配滤波器对接受的信号滤波 (7)、对该信号进行16-QAM 解调 五、实验内容跟实验结果:

编译原理实验报告总结

学年第学期《编译原理》实验报告 学院(系):计算机科学与工程学院 班级:11303070A 学号:11303070*** 姓名:无名氏 指导教师:保密式 时间:2016 年7 月

目录 1.实验目的 (1) 2.实验内容及要求 (1) 3.实验方案设计 (1) 3.1 编译系统原理介绍 (1) 3.1.1 编译程序介绍 (2) 3.1.2 对所写编译程序的源语言的描述 (2) 3.2 词法分析程序的设计 (3) 3.3 语法分析程序设计 (4) 3.4 语义分析和中间代码生成程序的设计 (4) 4. 结果及测试分析 (4) 4.1软件运行环境及限制 (4) 4.2测试数据说明 (5) 4.3运行结果及功能说明 (5) 5.总结及心得体会 (7)

1.实验目的 根据Sample语言或者自定义的某种语言,设计该语言的编译前端。包括词法分析,语法分析、语义分析及中间代码生成部分。 2.实验内容及要求 (1)词法分析器 输入源程序,输出对应的token表,符号表和词法错误信息。按规则拼单词,并转换成二元形式;滤掉空白符,跳过注释、换行符及一些无用的符号;进行行列计数,用于指出出错的行列号,并复制出错部分;列表打印源程序;发现并定位词法错误; (2)语法分析器 输入token串,通过语法分析,寻找其中的语法错误。要求能实现Sample 语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while语句、do while语句等。 (3)语义分析和中间代码生成 输入token串,进行语义分析,修改符号表,寻找其中的语义错误,并生 成中间代码。要求能实现Sample语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while 语句、do while语句等。 实验要求:功能相对完善,有输入、输出描述,有测试数据,并介绍不足。3.实验方案设计 3.1 编译系统原理介绍 编译器逐行扫描高级语言程序源程序,编译的过程如下: (1).词法分析 识别关键字、字面量、标识符(变量名、数据名)、运算符、注释行(给人看的,一般不处理)、特殊符号(续行、语句结束、数组)等六类符号,分别归类等待处理。 (2).语法分析 一个语句看作一串记号(Token)流,由语法分析器进行处理。按照语言的文法检查判定是否是合乎语法的句子。如果是合法句子就以内部格式保存,否则报错。直至检查完整个程序。 (3).语义分析 语义分析器对各句子的语法做检查:运算符两边类型是否相兼容;该做哪些类型转换(例如,实数向整数赋值要"取整");控制转移是否到不该去的地方;是

网页设计实验报告 实验一

昆明理工大学信息工程与自动化学院学生实验报告 (201 —201 学年第一学期) 课程名称:Web设计技术开课实验室:年月日年级、专业、班学号姓名成绩 实验项目名称网页设计简介、HTML基础介绍、文字与 段落、列表指导教师 教师 评语教师签名: 年月日 注:报告内容按实验须知中七点要求进行。 一.打开记事本,编写第一个页面。 (1)打开记事本:单击“开始”→“程序”→“附件”→“记事本”。 (2)输入下面代码: 欢迎你! 我的朋友. 当你进入HTML编程世界的时候,你的
感觉是全新的!
(3)单击“文件”→“选择”→“保存”菜单项,选择文件类型为“所有文件”,文件名输入“index.html”并选择文件保存地址(记住一定要把文件的后缀存为.html或.htm,否则网页无法显示)。 (4)用浏览器打开这个文件,看看效果吧! 二.用HTML语言编写符合以下要求的文档:标题为“班级主页”,在浏览器窗口用户区显示“欢迎来到我们的班级主页”,完成后效果如图: 代码: 班级主页 欢迎来到我们的班级主页

OFDM系统仿真实验报告

无线通信——OFDM系统仿真

一、实验目的 1、了解OFDM 技术的实现原理 2、利用MATLAB 软件对OFDM 的传输性能进行仿真并对结论进行分析。 二、实验原理与方法 1 OFDM 调制基本原理 正交频分复用(OFDM)是多载波调制(MCM)技术的一种。MCM 的基本思想是把数据流串并变换为N 路速率较低的子数据流,用它们分别去调制N 路子载波后再并行传输。因子数据流的速率是原来的1/N ,即符号周期扩大为原来的N 倍,远大于信道的最大延迟扩展,这样MCM 就把一个宽带频率选择性信道划分成N 个窄带平坦衰落信道,从而“先天”具有很强的抗多径衰落和抗脉冲干扰的能力,特别适合于高速无线数据传输。OFDM 是一种子载波相互混叠的MCM ,因此它除了具有上述毗M 的优势外,还具有更高的频谱利用率。OFDM 选择时域相互正交的子载波,创门虽然在频域相互混叠,却仍能在接收端被分离出来。 2 OFDM 系统的实现模型 利用离散反傅里叶变换( IDFT) 或快速反傅里叶变换( IFFT) 实现的OFDM 系统如图1 所示。输入已经过调制(符号匹配) 的复信号经过串P 并变换后,进行IDFT 或IFFT 和并/串变换,然后插入保护间隔,再经过数/模变换后形成OFDM 调制后的信号s (t ) 。该信号经过信道后,接收到的信号r ( t ) 经过模P 数变换,去掉保护间隔以恢复子载波之间的正交性,再经过串/并变换和DFT 或FFT 后,恢复出OFDM 的调制信号,再经过并P 串变换后还原出输入的符号。 图1 OFDM 系统的实现框图 从OFDM 系统的基本结构可看出, 一对离散傅里叶变换是它的核心,它使各子载波相互正交。设OFDM 信号发射周期为[0,T],在这个周期内并行传输的N 个符号为001010(,...,)N C C C -,,其中ni C 为一般复数, 并对应调制星座图中的某一矢量。比如00(0)(0),(0)(0)C a j b a b =+?和分别为所要传输的并行信号, 若将

编 译 原 理 实 验 报 告

编译原理实验报告 课程:编译原理 系别:计算机系 班级:11网络 姓名:王佳明 学号:110912049 教师:刘老师 实验小组:第二组 1

实验一熟悉C程序开发环境、进行简单程序的调试 实验目的: 1、初步了解vc++6.0环境; 2、熟悉掌握调试c程序的步骤: 实验内容: 1、输入下列程序,练习Turbo C 程序的编辑、编译、运行。 #include main() { printf(“Programming is fun.\n”); } 2、分析程序,预测其运行结果,并上机检测你的预测。 #include main() { printf(“*\n”); printf(“* * *\n”); printf(“* * * * *\n”); printf(“* * * * * * *\n”); } 3、下面是一个加法程序,程序运行时等待用户从键盘输入两个整数,然后求出它们的和并输出。观察运行结果(程序输出),上机验证该程序。 #include main() { int a,b,c; printf(“Please input a,b:”); scanf(“%d,%d”,&a,&b); c=a+b; printf(“%d+%d=%d\n”,a,b,c); } 2

实验二词法分析器 一、实验目的: 设计、编制、调试一个词法分析子程序-识别单词,加深对词法分析原理的理解。 二、实验要求: 1.对给定的程序通过词法分析器弄够识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示。而本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示。 2.本程序自行规定: (1)关键字"begin","end","if","then","else","while","write","read", "do", "call","const","char","until","procedure","repeat" (2)运算符:"+","-","*","/","=" (3)界符:"{","}","[","]",";",",",".","(",")",":" (4)其他标记如字符串,表示以字母开头的标识符。 (5)空格、回车、换行符跳过。 在屏幕上显示如下: ( 1 , 无符号整数) ( begin , 关键字) ( if , 关键字) ( +, 运算符) ( ;, 界符) ( a , 普通标识符) 三、使用环境: Windows下的visual c++6.0; 四、调试程序: 1.举例说明文件位置:f:、、11.txt目标程序如下: begin x:=9 if x>0 then x:=x+1; while a:=0 do 3

通信系统仿真实验报告(DOC)

通信系统实验报告——基于SystemView的仿真实验 班级: 学号: 姓名: 时间:

目录 实验一、模拟调制系统设计分析 -------------------------3 一、实验内容-------------------------------------------3 二、实验要求-------------------------------------------3 三、实验原理-------------------------------------------3 四、实验步骤与结果-------------------------------------4 五、实验心得------------------------------------------10 实验二、模拟信号的数字传输系统设计分析------------11 一、实验内容------------------------------------------11 二、实验要求------------------------------------------11 三、实验原理------------------------------------------11 四、实验步骤与结果------------------------------------12 五、实验心得------------------------------------------16 实验三、数字载波通信系统设计分析------------------17 一、实验内容------------------------------------------17 二、实验要求------------------------------------------17 三、实验原理------------------------------------------17 四、实验步骤与结果------------------------------------18 五、实验心得------------------------------------------27

编译原理实验报告一

实验一词法分析程序实现 一、实验目得与要求 通过编写与调试一个词法分析程序,掌握在对程序设计语言得源程序进行扫描得过程中,将字符流形式得源程序转化为一个由各类单词符号组成得流得词法分析方法 二、实验内容 基本实验题目:若某一程序设计语言中得单词包括五个关键字begin、end、if、then、else;标识符;无符号常数;六种关系运算符;一个赋值符与四个算术运算符,试构造能识别这些单词得词法分析程序(各类单词得分类码参见表I)。 表I语言中得各类单词符号及其分类码表 输入:由符合与不符合所规定得单词类别结构得各类单词组成得源程序文件。 输出:把所识别出得每一单词均按形如(CLASS,VALUE)得二元式形式输出,并将结果放到某个文件中。对于标识符与无符号常数,CLASS字段为相应得类别码得助记符;V AL UE字段则就是该标识符、常数得具体值;对于关键字与运算符,采用一词一类得编码形式,仅需在二元式得CLASS字段上放置相应单词得类别码得助记符,V ALUE字段则为“空". 三、实现方法与环境 词法分析就是编译程序得第一个处理阶段,可以通过两种途径来构造词法分析程序.其一就是根据对语言中各类单词得某种描述或定义(如BNF),用手工得方式(例如可用C语言)构造词法分析程序。一般地,可以根据文法或状态转换图构造相应得状态矩阵,该状态矩阵连同控制程序一起便组成了编译器得词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序得另外一种途径就是所谓得词法分析程序得自动生成,即首先用正规式对语言中得各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程

Web网站设计实验报告

Web网站设计实验报告 学生: 学号: 班级: 系别: 学院:

目录 一、设计目的 (3) 二、设计题目 (3) 三、结构设计 (3) 四、技术分析 (5)

五、设计过程 (6) 六、实验总结 (7) [附录]网页源代码节选 (8) 一.设计目的 在Internet飞速发展的今天,互联网成为人们快速获取、发布和传递信息的重要渠道,它在人们政治、经济、生活等各个方面发挥着重要的作用。因此网站建设在Internet应用上的地位显而易见,它已成为政府、企事业单位信息化建设中的重要组成部分,从而倍受人们的重视。我们当代大学生更是离不开网络给我们带来的好处与便利。但是,我们成天浏览的网站网页到底是如何制作的呢我想这一点很多同学都没有去深究过。所以为了了解网页制作的过程,我们在老师的指导下分前台和后台进行了一系列操作,并有所收获。 我们了解和熟悉了网页设计的基础知识和实现技巧,也熟练掌握

了Photoshop cs3、Dreamweaver cs等软件的的操作和应用。 二.设计题目 《篮球球迷交流网》 主要是篮球新闻、视频,还有交流帖子区,交易广告平台等。三.结构设计 选定主题,确定题目之后,网站设计还是一张白纸,我所做的是需要在这张白纸上一点点勾勒出网站的大框架,然后慢慢填充,实现网站的构想。首先我们在网上和图书管里查阅了大量的资料,以确定我们所需要的基本技术。然后,我们对整个网站进行总体规划,接着逐步细化。 我的设计主题是篮球球迷交流网,包括多个方面,框架为:首先是首页,首页下是新闻头条,分栏有球迷自述、篮球美图、给我留言,从分栏都可以回到首页。 首页主要分为新闻头条、热门话题区、靓图展示。 此为网站的大体板块,下面我们就每一页的页面板块进行详细的分析,有了大体框架,我们只需要在每一页的主要内容上做以划分,

计算机仿真实验报告实验

《计算机仿真》上机实验报告 姓名: 学号: 2012104021 专业:测控 班级: 12级

实验一常微分方程的求解及系统数学模型的转换一.实验目的 通过实验熟悉计算机仿真中常用到的Matlab指令的使用方法,掌握常微分方程求解指令和模型表示及转换指令,为进一步从事有关仿真设计和研究工作打下基础。 二. 实验设备 个人计算机,Matlab软件。 三. 实验准备 预习本实验有关内容(如教材第2、3、5章中的相应指令说明和例题),编写本次仿真练习题的相应程序。 四. 实验内容 1. Matlab中常微分方程求解指令的使用 题目一:请用MATLAB的ODE45算法分别求解下列二个方程。要求:1.编写出Matlab 仿真程序;2.画出方程解的图形并对图形进行简要分析;3.分析下列二个方程的关系。 1.2. 1.function fun=funl(t,x) fun=-x^2;

[t,x]=ode45('fun1',[0,20],[1]); figure(1);plot(t,x); grid 2.function fun=fun2(t,x) fun=x^2; [t,x]=ode45('fun2',[0,20],[-1]); figure(2);plot(t,x); grid

题目二:下面方程组用在人口动力学中,可以表达为单一化的捕食者-被捕食者模式(例如,狐狸和兔子)。其中1x 表示被捕食者, 2x 表示捕食者。如果被捕食者有无限的食物,并且不会出现捕食者。于是有1'1x x ,则这个式子是以指数形式增长的。大量的被捕食者将会使捕食者的数量增长;同样,越来越少的捕食者会使被捕食者的数量增长。而且,人口数量也会增长。请分别调用ODE45、ODE23算法求解下面方程组。要求编写出Matlab 仿真程序、画出方程组解的图形并对图形进行分析和比较。 1.ODE45

2PSK通信系统仿真实验报告

2PSK通信系统仿真实验报告 班级: 姓名: 学号:

、实验目的 1.了解通信系统的组成、工作原理、信号传输、变换过程; 2.掌握通信系统的设计方法与参数设置原则; 3.掌握使用SystemView软件仿真通信系统的方法; 4.进行仿真并进行波形分析; 二、实验任务 使用Systemview进行系统仿真任务,要经过以下几个步骤: 1.系统输入正弦波频率:500 Hz;码元传输速率:64kBd; 2.设计一通信系统,并使用SystemView软件进行仿真; 3.获取各点时域波形,波形、坐标、标题等要清楚;滤波器的单位冲击相应和幅频特性曲线; 4.获取主要信号的功率谱密度; 5.获取眼图; 6.提取相干载波; 7.数据分析及心得体会要求手写。 三、原理简介 1.PCM系统原理 .脉冲编码调制 通常把从模拟信号抽样、量化,直到变换成二进制符号的基本过程,称为脉冲编码调制(Pulse Code Modulation PCM,简称脉码调制。原理框图如图1-1所示: PCM信号 输出 A 冲激脉冲 图1-1 PCM编码方框图 .编码过程 由冲激脉冲对模拟信号进行抽样,抽样信号虽然是时间轴上离散的信号,但仍是模拟信号。为了实现以数字码表示样值必须采用“四舍五入” 的方法将抽样值量化为整数,量化后的抽样信号与量化前的抽样信号相比较,有所失真且不再是模拟信号,这种量化失真在接收端还原成模拟信号时表现为噪声,称为量化噪声。量化噪声的大小取决于把样值 分级取整”的方式,分的级数越多,即量化级差或间隔越小,量化噪声也越小。

在量化之前通常用保持电路将其作短暂保存,以便电路有 时间对其进行量化。然后在图 1-1中的编码器中进行二进制编码。这 样,每个二进制码组就代表了一个量化后的信号抽样值,即完成了 PCM 编码的过程。译码过程与编码过程相反。如图 1-2所示。 2. 二进制移相键控(2PSK 的基本原理: 2PSK 二进制移相键控方式,是键控的载波相位按基带脉冲序列的规律而改 变的一 种数字调制方式。就是根据数字基带信号的两个电平 (或符号)使载波相 位 在两个不同的数值之间切换的一种相位调制方法。两个载波相位通常相差 180 度,此时称为反向键控(PSK )也称为绝对相移方式。在2psk 中,通常用初始相位 0和 n 分别表示二进制“ 1”和“ 0”。其表达式如下: Acos wct 发送1时 Fpsk (t)= -Acos Wct 发送0时 2psk 的典型波形如图: 由于表示信号的两种码元的波形相同,极性相反,故 2psk 信号的一般可以 表述为一个双极性非归零的矩形波脉冲序列与一个正弦载波相乘,即 ?aP5K (t)=S(t)COSW Ct 图1-2 PCM 译码原理图 PCM 信号 输入 模拟信号 输出

编译原理实验报告

《编译原理》实验报告软件131 陈万全132852

一、需求分析 通过对一个常用高级程序设计语言的简单语言子集编译系统中词法分析、语法分析、语义处理模块的设计、开发,掌握实际编译系统的核心结构、工作流程及其实现技术,获得分析、设计、实现编译程序等方面的实际操作能力,增强设计、编写和调试程序的能力。 通过开源编译器分析、编译过程可视化等扩展实验,促进学生增强复杂系统分析、设计和实现能力,鼓励学生创新意识和能力。 1、词法分析程序设计与实现 假定一种高级程序设计语言中的单词主要包括五个关键字begin、end、if、then、else;标识符;无符号常数;六种关系运算符;一个赋值符和四个算术运算符,试构造能识别这些单词的词法分析程序。 输入:由符合和不符合所规定的单词类别结构的各类单词组成的源程序文件。 输出:把所识别出的每一单词均按形如(CLASS,VALUE)的二元式形式输出,并将结果放到某个文件中。对于标识符和无符号常数,CLASS字段为相应的类别码的助记符;VALUE字段则是该标识符、常数的具体值;对于关键字和运算符,采用一词一类的编码形式,仅需在二元式的CLASS字段上放置相应单词的类别码的助记符,VALUE字段则为“空”。 2、语法分析程序设计与实现 选择对各种常见高级程序设计语言都较为通用的语法结构——算术表达式的

一个简化子集——作为分析对象,根据如下描述其语法结构的BNF定义G2[<算术表达式>],任选一种学过的语法分析方法,针对运算对象为无符号常数和变量的四则运算,设计并实现一个语法分析程序。 G2[<算术表达式>]: <算术表达式>→<项> | <算术表达式>+<项> | <算术表达式>-<项> <项>→<因式>|<项>*<因式>|<项>/<因式> <因式>→<运算对象> | (<算术表达式>) 若将语法范畴<算术表达式>、<项>、<因式>和<运算对象>分别用E、T、F和i 代表,则G2可写成: G2[E]:E → T | E+T | E-T T → F | T*F | T/F F → i | (E) 输入:由实验一输出的单词串,例如:UCON,PL,UCON,MU,ID······输出:若输入源程序中的符号串是给定文法的句子,则输出“RIGHT”,并且给出每一步分析过程;若不是句子,即输入串有错误,则输出“ERROR”,并且显示分析至此所得的中间结果,如分析栈、符号栈中的信息等,以及必要的出错说明信息。 3、语义分析程序设计与实现 对文法G2[<算术表达式>]中的产生式添加语义处理子程序,完成运算对象是简单变量(标识符)和无符号数的四则运算的计值处理,将输入的四则运算转换为四元式形式的中间代码。 输入:包含测试用例(由标识符、无符号数和+、?、*、/、(、)构成的算术表达式)的源程序文件。 输出:将源程序转换为中间代码形式表示,并将中间代码序列输出到文件中。 若源程序中有错误,应指出错误信息 二、设计思路 1、词法分析程序设计与实现 1)单词分类 为了编程的实现。我们假定要编译的语言中,全部关键字都是保留字,程序员不得将它们作为源程序中的标识符;作了这些限制以后,就可以把关键字和标识符的识别统一进行处理。即每当开始识别一个单词时,若扫视到的第一个字符为字母,则把后续输入的字母或数字字符依次进行拼接,直至扫视到非字母、数字字符为止,以期获得一个尽可能长的字母数字字符串,然后以此字符串查所谓保留字表(此保留字表要事先造好),若查到此字符串,则取出相应的类别码;反之,则表明该字符串应为一标识符。

相关主题
文本预览
相关文档 最新文档