文档库 最新最全的文档下载
当前位置:文档库 › 《移动通信原理与应用》实验报告

《移动通信原理与应用》实验报告

《移动通信原理与应用》实验报告
《移动通信原理与应用》实验报告

重庆交通大学信息科学与工程学院综合性设计性实验报告

专业:通信工程专业12级

学号:631206040218

姓名:柴闯闯

实验所属课程:移动通信原理与应用

实验室(中心):信息技术软件实验室

指导教师:谭晋

2014年11月

一、题目

扩频通信系统仿真实验

二、仿真要求

①传输的数据随机产生,要求采用频带传输(DPSK调制);

②扩频码要求采用周期为63(或127)的m序列;

③仿真从基站发送数据到三个不同的用户,各不同用户分别进行数据接收;

④设计三种不同的功率延迟分布,从基站到达三个不同的用户分别经过多径衰落(路径数分别为2,3,4);

⑤三个用户接收端分别解出各自的数据并与发送前的数据进行差错比较。

三、仿真方案详细设计

(1)通信系统的总体框图如下:

由上图可以看出,整个设计由发送端、信道和接收机三个部分组成。

①发射机原理

发送端首先产生三组用户数据和三组不同的m序列,并用三组m序列分别对用户信息进行扩频。再将扩频信号与载波进行DPSK调制,得到高频的已调调信号并将其送入无线的多径信道。

②无线信道

信道模拟成无线的多径多用户信道,在这个信道中有三个用户进行数据传输,每个用户的数据分别通过三径传输到达接收端。三径会有不同的延时,衰减。最终,还要将三径用户数据增加高斯白噪声。

③接收机原理

接收端会接收到有燥的三径信息的叠加。首先,要对接收到的三径信息进行解扩,分离出三组用户信息;其次,在将解扩后的信息进行带通滤波去除带外噪声;最后,分别对三组用户信息进行解调得到原始数据,在对接收到的数据进行误码率统计,得出系统的性能指标。

(2)功能模块的详细设计

①扩频码(m序列)的产生

扩频码为伪随机码,可以m序列、Golden序列。本设计采用自相关特性好,互相关特性较差的m序列,为了节省运算量,我选取了周期为63扩频序列,经过计算易知要产生周期为63的m序列需要长度为6的反馈系数,经过查找资料得出三组反馈系数(八进制)45、67、75,其对应的二进制为1000011、1100111、1101101。并将二进制与移位寄存器级数对应,以1000011为例,设初始化各寄存器单元内容为1,其具体的寄存器结构图如下所示:

产生m序列的matlab程序如下:

%m序列的产生,s为初始状态,抽头系数为(1000011)2

function PN=mseq(s)

N=length(s);

c=[];

D=s;

for i=1:2^N-1

c1=rem(D(N)+D(N-1),2);

c=[c,D(N)];

D=[c1,D(1:N-1)];

end

c=c*2-1;%变为1,-1的序列

PN=c;

end

②扩频

扩频的主要思想是每一位数据位都扩展成长度为m序列长的信息,其具体做法是将数据信息中的‘1’用m序列代替,而对于‘-1’用-m序列代替,这样对每一个数据位都进行扩展就实现了对原始数据的扩频。其结构框图如下:

扩频仿真代码如下:

%扩频

function expandsignal=expand(signal,PN)

expand=[];

for i=1:length(signal)

if signal(i)==1

expand=[expand,PN];

else

expand=[expand,-1*PN];

end

end

expandsignal=expand;%扩频后的序列

end

③多径信道的仿真

对多径信道的仿真主要通过对不同用户产生的数据经三径进行传输,每一径信号又有三个用户数据叠加而成,并且每一径信号具有不同的延迟和衰减。最后在信道的另一端三径信号进行叠加并对其加燥。

多径信道仿真代码如下:

function multiS=channels(modusignal,k)

a=length(modusignal);

signal1=[0,modusignal];

signal2=[0,0,modusignal];

signal3=[0,0,0,modusignal];

r1=0.01*abs(randn(1,a)+j*randn(1,a));

r2=0.1*abs(randn(1,a+1)+j*randn(1,a+1));

r3=0.2*abs(randn(1,a+2)+j*randn(1,a+2));

r4=0.5*abs(randn(1,a+3)+j*randn(1,a+3));

if k==2

r=[modusignal.*r1,0,0,0]+[signal1.*r2,0,0];

end

if k==3

r=[modusignal.*r1,0,0,0]+[signal1.*r2,0,0]+[signal2.*r3,0];

end

if k==4

r=[modusignal.*r1,0,0,0]+[signal1.*r2,0,0]+[signal2.*r3,0]+[signal3.*r4];

end

multiS=r;

end

④解扩

在扩频码与接收信号同步的情况下, 可对接收信号进行解扩, 其解扩的过程与扩频的过程一样, 也是利用扩频码与接收信号进行相乘即可。其原理图如下:

解扩代码如下:

function deexpandsignal=deexpand(signal,k)

expandsignal1=expand(round(rand(1,10)),mseq([1,0,0,1,1,0]));

expandsignal2=expand(round(rand(1,10)),mseq([1,1,0,1,1,0]));

expandsignal3=expand(round(rand(1,10)),mseq([1,0,0,1,1,1]));

if k==2

for i=1:length(expandsignal1)

deexpPN1((i-1)*100+1:i*100)=expandsignal1(i);

end

for i=1:length(signal)-3

deexpsignal1(i)=signal(i).*deexpPN1(i);

end

deexpandsignal=deexpsignal1;

end

if k==3

for i=1:length(expandsignal1)

deexpPN2((i-1)*100+1:i*100)=expandsignal2(i);

end

for i=1:length(signal)-3

deexpsignal2(i)=signal(i).*deexpPN2(i);

end

deexpandsignal=deexpsignal2;

end

if k==4

for i=1:length(expandsignal1)

deexpPN3((i-1)*100+1:i*100)=expandsignal3(i);

end

for i=1:length(signal)-3

deexpsignal3(i)=signal(i).*deexpPN3(i);

end

deexpandsignal=deexpsignal3;

end

End

⑤调制与解调

为了使低频信号能够在高频中传输,并且增强系统的抗噪声性能,我们必须采用一定的调制解调技术,这里我采用DPSK对扩频信号进行调试,并在接收端对解扩信号进行DPSK解调以恢复出原有信号。DPSK是利用前后相邻码元的载波相对相位变化传递数字信息。DPSK的主要思路利用前后相邻码元的载波相对相位变化进行调制,以将低频的信号调制到较高频率,在接收端再将调制信号乘以载波做相干解调,便得到倍频信号和原信号的叠加,再低通滤波器将倍频信号滤掉就能得到原始信号。

I、调制框图如下:

调制仿真代码如下:

%差分编码

function Y = difference(X)

a=length(X);

for i=1:a

if X(i)==-1

X(i)=0;

end

end

Y=zeros(1,a);

b=0.01:0.01:a;

for(i=1:a)

is((i-1)*100+1:i*100)=X(i); end

if (X(1)==1)

Y(1)=1;

else Y(1)=0;

end

for i=2:a

Y(i)=rem( Y(i-1)+X(i),2); end

Y;

t=0.01:0.01:a;

for(i=1:a)

st((i-1)*100+1:i*100)=Y(i); End

%DPSK调制

function z=dpsk(X)

fs=2000;

w=2;%调制频率

n=length(X);

t=1:100;

nn=1:100;

n1=0.01:0.01:n;

for(i=1:n)

is((i-1)*100+1:i*100)=X(i); st((i-1)*100+1:i*100)=0;

end

for(nn=1:100)

oss(nn)=sin(2*pi*w*(t(nn)/100));

osc(nn)=sin(2*pi*w*(t(nn)/100)+pi);

end

for(i=1:n)

if(X(i)==1)

for(nn=1:100)

st(100*(i-1)+nn)=oss(nn);

end

else

for(nn=1:100)

st(100*(i-1)+nn)=osc(nn);

end

end

end

z=st;

II、解调框图如下:

解调仿真代码如下:

function y=dpskdemod(X)

fs=200;

w=2;

n=length(X)/100;

tt=0.01:0.01:n;

dt=X.*sin(2*pi*w*tt);

%低通滤波器

[N,Wn]=buttord(2*pi*25,2*pi*50,3,25,'s');%临界频率采用角频率表示 [b,a]=butter(N,Wn,'s');

[bz,az]=impinvar(b,a,fs);%映射为数字的

dt=filter(bz,az,dt);

%抽样判决逆码变换部分

dt1=0;

dt2=0;

for(i=1:n)

for(j=1:100)

dt1=dt1+dt(100*(i-1)+j);

end

dt2=dt1/100; if(dt2>0.05)

dtt(100*(i-1)+1:100*i)=1; dt2=0; dt1=0;

else dtt(100*(i-1)+1:100*i)=0; dt2=0; dt1=0; end end

for i=1:n

y(i)=dtt((i-1)*100+50); end

四、仿真结果及结论

第一组用户数据:

0.5用户1的发送数据

接收到用户1数据

用户1扩频后的时域信号

用户1解扩后的时域信号

用户1DPSK 调制后的时域信号

用户1DPSK 解调后的时域信

号用户1扩频后的频谱

图用户1解扩后的频谱

用户1调制后的频谱图

用户1解调后的频谱图

第二组用户数据:

第三组用户数据:

0.51用户2的发送数据

接收到用户2数据

-1

01用户2扩频后的时域信号

用户2解扩后的时域信号

-101用户2DPSK 调制后的时域信号

用户2DPSK 解调后的时域

信号用户2扩频后的频谱

用户2解扩后的频谱

用户2调制后的频谱

用户2解调后的频谱

用户3的发送数

接收到用户3数

用户3扩频后的时域信

用户3解扩后的时域信号

用户3DPSK 调制后的时域信

号用户3DPSK 解调后的时域信号

信道中三径数据的叠加:

仿真说明及结论:为了观察到较好的图示效果,仿真时只产生了10个数据,并对一些波形图进行了部分区间的显示。由上图可知接收端数据与发送端数据基本一致,但仍存在一些误码如:用户1接收端的数据在第一个比特和第二个比特之间有一个负脉冲,这是误码的存在引起的。由于时间原因,在系统中没有对误码进行统计,总体而言基本上实现了要求。

用户3扩频后的频谱图

用户3解扩后的频谱图

用户3调制后的频谱

用户3解调后的频谱

用户1经过二径衰落后时域波形

图用户1经过二径衰落后的

频谱图用户2经过三径衰落后时域波形

图用户2经过三径衰落后的

频谱图用户3经过四径衰落后时域波形

图用户2经过四径衰落后的频谱图

信道中三径叠加后的时域波形

1000

200030004000信道中三径叠加后的频谱图

五、总结与体会

本次实验是集扩频通信、DPSK 调制与解调、多径衰落于一体的综合性实验。在实验过程中遇到很多困难,如滤波延时引起经过滤波器之后的信号在滤波系数长度的2倍加1段的幅值接近为0,多径衰落引起信号的延时,DPSK 在解调之后还需要与m 序列相乘才能恢复出原始数据等等,后来经过认真思考和上网查阅相关资料等途径终于解决了这些问题。

通过本次实验设计,让我对以前学习过的MATLAB 软件编程系统地复习了一遍,重新温习了对于用rand 来产生随机序列的编写方法及过程,还有其中的如DPSK 调制函数、高斯白噪声函数、滤波器的设计等等的用法。在系统的巩固了MATLAB 知识的基础上,也让我学习了扩频码的产生原理及扩频码的要求(自相关性高、互相关性低)、多径延迟信道的特性。

这次实验有以下几点收获:

(1)实验的核心部分是接收机部分,接收部分主要是对已调的信号进行解扩和解调,解扩要注意的就是需要一个与接收端完全一样的同步PN 序列,把已调信号解扩出来,解扩信号再经过DPSK 解调,得到的信号波形应与发端信号相同,说明完全恢复了所发送数据波形。

(2)扩频是用来传输信号的带宽远远大于信息本身带宽的一种传输方式,频带的扩展由独立于信息的扩频码(PN 码)实现,与所传数据无关,在接收端用同步接收实现解扩和数据

恢复。扩频通信的理论基础为香农定理:)1(log 2N

S

B C +=。由香农定理可得出重要结论:对

于给定的信息传输速率,可以用不同的带宽和信噪比的组合来传输。扩频通信系统就是利用香农定理将信道带宽扩展许多倍以换取低信噪比,增强了系统的抗干扰能力。直接序列扩频(DS),是直接利用具有高码率的扩频码序列在发送端扩展信号的频谱,而在接收端,用相同的扩频码序列进行解扩,把展宽的扩频信号还原成原始的信息,是一种数字调制方法。

(3)本次实验基本完成了实验的预期效果,达到了实验的要求,使我对M 序列的生成、直接序列扩频、信道的多径多用户数据叠加、解扩过程有了更加升入的理解和更熟练的应用,对以后的学习和使用有很大的帮助。

(4)本次实验让我明白对于一个综合性实验而言,首先要学会查找资料,把实验涉及到的基本原理搞懂,然后要把要写程序的基本思路弄清,把整个程序分成几个小模块,再逐个模块去解决,最后才是写程序和调试程序。

(5)本次实验,让我对无线通信原理理论和MATLAB 软件有了更深的了解,对其中很多函数的使用有了更深一步的掌握,加强了自己动手能力和学习技能的提升。

六、主要仿真代码

主要程序代码如下:

function PN=mseq(s)%m 序列子函数

function expandsignal=expand(signal,PN)%扩频子函数 function Y = difference(X)%差分编码子函数 function z=dpsk(X)%DPSK 调制子函数

function multiS=channels(modusignal,k)%无线信道子函数 function deexpandsignal=deexpand(signal,k)%解扩子函数 function y=dpskdemod(X)%解调子函数 function y=dpskdemod(X)%解差分子函数

function y=f(signal,PN)%原始信号恢复子函数 %主函数

user1=round(rand(1,10));%生成用户1的0,1随机数据 user2=round(rand(1,10));%生成用户2的0,1随机数据 user3=round(rand(1,10));%生成用户3的0,1随机数据

x=1/100:1/100:10;

for i=1:length(x)

yuser1(i)=user1(ceil(x(i)));

yuser2(i)=user2(ceil(x(i)));

yuser3(i)=user3(ceil(x(i)));

end

t1=[1,0,0,1,1,0];%用户1的m序列的初始状态

t2=[1,1,0,1,1,0];%用户2的m序列的初始状态

t3=[1,0,0,1,1,1];%用户3的m序列的初始状态

PN1=mseq(t1);%生成用户1的m序列

PN2=mseq(t2);%生成用户2的m序列

PN3=mseq(t3);%生成用户3的m序列

expandsignal1=expand(user1,PN1);%生成用户1的扩频序列expandsignal2=expand(user2,PN2);%生成用户2的扩频序列expandsignal3=expand(user3,PN3);%生成用户3的扩频序列

yy=difference(expandsignal1);

y1=dpsk(difference(expandsignal1));%用户1扩频调制后的信号y2=dpsk(difference(expandsignal2));%用户2扩频调制后的信号y3=dpsk(difference(expandsignal3));%用户3扩频调制后的信号ys1=channels(y1,2);%用户1经过多径衰落后的信号

ys2=channels(y2,3);%用户2经过多径衰落后的信

ys3=channels(y3,4);%用户3经过多径衰落后的信号

yn=ys1+ys2+ys3;

yt1=deexpand(ys1,2);%用户1解扩后的信号

yt2=deexpand(ys2,3);%用户2解扩后的信号

yt3=deexpand(ys3,4);%用户3解扩后的信号

yd1=dpskdemod(yt1);%用户1解调后的信号

yd2=dpskdemod(yt2);%用户2解调后的信号

yd3=dpskdemod(yt3);%用户3解调后的信号

yi1=indifference(yd1);%用户1解差分

yi2=indifference(yd2);%用户2解差分

yi3=indifference(yd3);%用户3解差分

yr1=f(yi1,PN1);%用户1数据恢复

yr2=f(yi2,PN2);%用户2数据恢复

yr3=f(yi3,PN3);%用户3数据恢复%%%%%%%%%%%%%%%用户1部分%%%%%%%%%%%%%%%

figure

subplot(3,2,1)

plot(x,yuser1);

title('用户1的发送数据');

axis([0 10 -0.2 1.2]);

grid

subplot(3,2,2)

plot(1/63:1/63:10,yr1);

axis([0,10,-0.1,1.1]);

title('接收到用户1数据');

grid

subplot(3,2,3)

plot(expandsignal1);

title('用户1扩频后的时域信号');

axis([0 630 -1.2 1.2]);

subplot(3,2,4)

plot(0.01:0.01:length(yy),yt1);

title('用户1解扩后的时域信号');

axis([0 20 -0.3 0.3]);

subplot(3,2,5)

plot(0.01:0.01:length(yy),y1);

title('用户1DPSK调制后的时域信号');

axis([0 20 -1.2 1.2]);

subplot(3,2,6)

plot(yi1);

title('用户1DPSK解调后的时域信号');

axis([0 630 0.2 1.2]);

figure

subplot(2,2,1)

plot((0:length(expandsignal1)-1)*100/length(expandsignal1)-100/2,abs(fftshift(fft(expa ndsignal1))));

title('用户1扩频后的频谱图');

subplot(2,2,2)

plot((0:length(yt1)-1)*100/length(yt1)-100/2,abs(fftshift(fft(yt1))));

title('用户1解扩后的频谱图');

axis([-15 15 0 400]);

subplot(2,2,3)

plot((0:length(y1)-1)*100/length(y1)-100/2,abs(fftshift(fft(y1))));

title('用户1调制后的频谱图');

axis([-20 20 0 3000]);

subplot(2,2,4)

plot((0:length(yi1)-1)*100/length(yi1)-100/2,abs(fftshift(fft(yi1))));

title('用户1解调后的频谱图');

axis([-20 20 0 400]);

%%%%%%%%%%%%%%%用户2部分%%%%%%%%%%%%%%%

figure

subplot(3,2,1)

plot(x,yuser2);

title('用户2的发送数据');

axis([0 10 -0.2 1.2]);

grid

subplot(3,2,2)

plot(1/63:1/63:10,yr2);

axis([0,10,-0.1,1.1]);

title('接收到用户2数据');

grid

subplot(3,2,3)

plot(expandsignal2);

title('用户2扩频后的时域信号');

axis([0 630 -1.2 1.2]);

subplot(3,2,4)

plot(0.01:0.01:length(yy),yt2);

title('用户2解扩后的时域信号');

axis([0 20 -0.8 0.8]);

subplot(3,2,5)

plot(0.01:0.01:length(yy),y2);

title('用户2DPSK调制后的时域信号');

axis([0 20 -1.2 1.2]);

subplot(3,2,6)

plot(yi2);

title('用户2DPSK解调后的时域信号');

axis([0 630 0.2 1.2]);

figure

subplot(2,2,1)

plot((0:length(expandsignal2)-1)*100/length(expandsignal2)-100/2,abs(fftshift(fft(expa ndsignal2))));

title('用户2扩频后的频谱图');

subplot(2,2,2)

plot((0:length(yt2)-1)*100/length(yt2)-100/2,abs(fftshift(fft(yt2))));

title('用户2解扩后的频谱图');

axis([-15 15 0 1500]);

subplot(2,2,3)

plot((0:length(y2)-1)*100/length(y2)-100/2,abs(fftshift(fft(y2))));

title('用户2调制后的频谱图');

axis([-20 20 0 3000]);

subplot(2,2,4)

plot((0:length(yi2)-1)*100/length(yi2)-100/2,abs(fftshift(fft(yi2))));

title('用户2解调后的频谱图');

axis([-20 20 0 400]);

%%%%%%%%%%%%%%%用户3部分%%%%%%%%%%%%%%%

figure

subplot(3,2,1)

plot(x,yuser3);

title('用户3的发送数据');

axis([0 10 -0.2 1.2]);

grid

subplot(3,2,2)

plot(1/63:1/63:10,yr3);

axis([0,10,-0.1,1.1]);

title('接收到用户3数据');

grid

subplot(3,2,3)

plot(expandsignal3);

title('用户3扩频后的时域信号');

axis([0 630 -1.2 1.2]);

subplot(3,2,4)

plot(0.01:0.01:length(yy),yt3);

title('用户3解扩后的时域信号');

axis([0 20 -1.6 1.6]);

subplot(3,2,5)

plot(0.01:0.01:length(yy),y3);

title('用户3DPSK调制后的时域信号');

axis([0 20 -1.2 1.2]);

subplot(3,2,6)

plot(yi3);

title('用户3DPSK解调后的时域信号');

axis([0 630 0.2 1.2]);

figure

subplot(2,2,1)

plot((0:length(expandsignal3)-1)*100/length(expandsignal3)-100/2,abs(fftshift(fft(expa ndsignal3))));

title('用户3扩频后的频谱图');

subplot(2,2,2)

plot((0:length(yt3)-1)*100/length(yt3)-100/2,abs(fftshift(fft(yt3))));

title('用户3解扩后的频谱图');

axis([-15 15 0 5000]);

subplot(2,2,3)

plot((0:length(y3)-1)*100/length(y3)-100/2,abs(fftshift(fft(y3))));

title('用户3调制后的频谱图');

axis([-20 20 0 5000]);

subplot(2,2,4)

plot((0:length(yi3)-1)*100/length(yi3)-100/2,abs(fftshift(fft(yi3))));

title('用户3解调后的频谱图');

axis([-20 20 0 400]);

%%%%%%%%%%%%%%%信道部分%%%%%%%%%%%%%%%

figure

subplot(3,2,1)

plot(ys1);

title('用户1经过二径衰落后时域波形图');

axis([0 1000 -0.5 0.5]);

grid

subplot(3,2,2)

plot((0:length(ys1)-1)*100/length(ys1)-100/2,abs(fftshift(fft(ys1))));

title('用户1经过二径衰落后的频谱图');

axis([-20 20 0 500]);

subplot(3,2,3)

plot(ys2);

title('用户2经过三径衰落后时域波形图');

axis([0 1000 -1 1]);

subplot(3,2,4)

plot((0:length(ys2)-1)*100/length(ys2)-100/2,abs(fftshift(fft(ys2)))); title('用户2经过三径衰落后的频谱图');

axis([-20 20 0 1500]);

subplot(3,2,5)

plot(ys3);

title('用户3经过四径衰落后时域波形图');

axis([0 1000 -2 2]);

subplot(3,2,6)

plot((0:length(ys3)-1)*100/length(ys3)-100/2,abs(fftshift(fft(ys3)))); title('用户2经过四径衰落后的频谱图');

axis([-20 20 0 5000]);

figure

subplot(2,1,1)

plot(yn);

axis([0 2000 -2.5 2.5]);

title('信道中三径叠加后的时域波形图');

subplot(2,1,2)

plot((0:length(yn)-1)*100/length(yn)-100/2,abs(fftshift(fft(yn)))); axis([-20 20 0 4500]);

title('信道中三径叠加后的频谱图');

人机交互技术实验五熟悉设计管理和游戏界面设计

重庆邮电大学移通学院学生实验报告 实验名称:熟悉设计管理和游戏界面设计 专业班级:数字媒体技术 02141401 姓名:罗钧 学号: 2014210xxx 实验日期:

实验五:熟悉设计管理和游戏界面设计 一、实验目的 (1)了解和熟悉人机界面设计过程管理的相关知识; (2)了解和评价游戏软件的人机交互设计,提高自己的评价能力,提高自己对设计水平的。 二、工具/准备工作 需要准备一台带有浏览器,能够访问因特网的计算机。 三、实验内容与步骤 1.概念理解 (1)成功的用户界面开发有4个支柱,它们能够帮助用户界面架构师将好的思想转化为成功的系统。经验表明,每个支柱都能在此过程中产生数量级的加速作用,并能促进建立优秀的系统。 请简单描述这4个支柱。 用户界面需求:软件项目的成败经常取决于所有用户和实现者之间理解的精确性和完整性。如果没有适当的需求定义,那就既不能确定正在解决什么问题,也不会知道何时能够完成。拟定用户界面需求是整个需求开发和管理过程的一部分,系统需求(硬件、软件、系统性能及可靠性等)必须清楚的加以陈述,任何处理用户界面的需求(输入/输出设备、功能、界面及用户范围等)都必须指明并达成共识。一个确定用户需求的成功方法是通过用户观察,监视正在行动的真实用户的背景和环境。 指南文档和过程:指南文档应考虑以下几方面。 1.词、图标和图形 2.屏幕布局问题 3.输入与输出设备 4.动作序列 5.培训 用户界面软件工具:设计交互系统的困难之一,是客户和用户可能对新系统并没有一个清晰的想法。由于在很多情况下交互系统都是新奇的,用户可能认识不到设计决策的用意。虽然打印出来的文稿对初步体验是有帮助的,但具有活动键盘和鼠标的屏幕展示却更为真实。菜单系统的原型可能用一两条活动路径来代替为最终系统预想的数千条路径。 专家评审和可用性测试:现在,网站的设计人员认识到,在将系统交付给客户使用之前,必须对组件进行很多小的和一些大的初步试验。除了各种专家评审方法外,与目标用户一起进行的测试、调查和自动化分析工具被证明是有价值的。其过程依可用性研究的目标、预期用户数量、错误和危害程度和投资规模而变化很大。 (2)请简单描述用户界面设计所涉及的法律问题 ①隐私问题 ②安全性和可靠性

人工智能实验报告大全

人工智能实验报告大 全

人工智能课内实验报告 (8次) 学院:自动化学院 班级:智能1501 姓名:刘少鹏(34) 学号: 06153034 目录 课内实验1:猴子摘香蕉问题的VC编程实现 (1) 课内实验2:编程实现简单动物识别系统的知识表示 (5)

课内实验3:盲目搜索求解8数码问题 (18) 课内实验4:回溯算法求解四皇后问题 (33) 课内实验5:编程实现一字棋游戏 (37) 课内实验6:字句集消解实验 (46) 课内实验7:简单动物识别系统的产生式推理 (66) 课内实验8:编程实现D-S证据推理算法 (78)

人工智能课内实验报告实验1:猴子摘香蕉问题的VC编程实现 学院:自动化学院 班级:智能1501 姓名:刘少鹏(33) 学号: 06153034 日期: 2017-3-8 10:15-12:00

实验1:猴子摘香蕉问题的VC编程实现 一、实验目的 (1)熟悉谓词逻辑表示法; (2)掌握人工智能谓词逻辑中的经典例子——猴子摘香蕉问题的编程实现。 二、编程环境 VC语言 三、问题描述 房子里有一只猴子(即机器人),位于a处。在c处上方的天花板上有一串香蕉,猴子想吃,但摘不到。房间的b处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。如图1所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。要求通过VC语言编程实现猴子摘香蕉问题的求解过程。 图1 猴子摘香蕉问题

四、源代码 #include unsigned int i; void Monkey_Go_Box(unsigned char x, unsigned char y) { printf("Step %d:monkey从%c走到%c\n", ++i, x, y);//x表示猴子的位置,y为箱子的位置 } void Monkey_Move_Box(char x, char y) { printf("Step %d:monkey把箱子从%c运到%c\n", ++i, x, y);//x表示箱子的位置,y为香蕉的位置 } void Monkey_On_Box() { printf("Step %d:monkey爬上箱子\n", ++i); } void Monkey_Get_Banana() { printf("Step %d:monkey摘到香蕉\n", ++i); } void main() { unsigned char Monkey, Box, Banana; printf("********智能1501班**********\n"); printf("********06153034************\n"); printf("********刘少鹏**************\n"); printf("请用a b c来表示猴子箱子香蕉的位置\n"); printf("Monkey\tbox\tbanana\n"); scanf("%c", &Monkey); getchar(); printf("\t"); scanf("%c", &Box); getchar(); printf("\t\t"); scanf("%c", &Banana); getchar(); printf("\n操作步骤如下\n"); if (Monkey != Box) { Monkey_Go_Box(Monkey, Box); } if (Box != Banana)

游戏人工智能实验报告四

实验四有限状态机实验 实验报告 一、实验目的 通过蚂蚁世界实验掌握游戏中追有限状态机算法 二、实验仪器 Windows7系统 Microsoft Visual Studio2015 三、实验原理及过程 1)制作菜单 设置参数:点击会弹出对话框,设置一些参数,红、黑蚂蚁的家会在地图上标记出来 运行:设置好参数后点击运行,毒药、食物、水会在地图上随机显示 下一步:2只红蚂蚁和2只黑蚂蚁会随机出现在地图上,窗口右方还会出现红、黑蚂蚁当前数量的统计 不断按下一步,有限状态机就会不断运行,使蚁群产生变化 2)添加加速键 资源视图中 下方

选择ID和键值 3)新建头文件def.h 在AntView.cpp中加入#include"def.h" 与本实验有关的数据大都是在这里定义的 int flag=0; #define kForage 1 #define kGoHome 2 #define kThirsty 3 #define kDead 4 #define kMaxEntities 200 class ai_Entity{ public: int type; int state; int row; int col; ai_Entity(); ~ai_Entity() {} void New (int theType,int theState,int theRow,int theCol); void Forage(); void GoHome(); void Thirsty(); void Dead(); }; ai_Entity entityList[kMaxEntities]; #define kRedAnt 1 #define kBlackAnt 2

人机交互实验报告及实验结果

中北大学软件学院 实验报告 专业软件工程 课程名称人机交互 学号 姓名 辅导教师何志英成绩 实验日期2012/3/13实验时间19:00-22:00

1实验名称 试验一:最新人机交互技术 2、实验目的 了解最新人机交互的研究内容 3、实验内容 通过网络查询最新人机交互相关知识。 (1)在百度中找到“最新人机交互视频”的相关网页,查看视频。 (2)什么是Kinect技术。 (3)人机交互技术在各个领域的应用。 4、测试及结果 (1)已在百度中查看“最新人机交互视频”的相关网页。 (2)Kinect是微软在2010年6月14日对XBOX360体感周边外设正式发布的名字。 (3)人机交互技术已成为解决医疗、教育、科研、环保等各类重大社会问题不可或缺的重要工具 5、心得 通过此实验,我了解人机交互技术在社会各个行业的重大作用。辅导教师何志英成绩 实验日期2012/3/13实验时间19:00-22:00 1、实验名称 实验二:立体视觉 2、实验目的 掌握立体视觉的原理

3、实验要求 通过网络查询立体视觉相关知识。 (1)在虚拟环境是如何实现立体视觉? (2)3D和4D电影的工作原理。 4、测试及结果 (1)实物虚化的视觉跟踪技术使用从视频摄像机到x-y平面阵列,周围光或者跟踪光在图像投影平面不同时刻和不同位置上的投影,计算被跟踪对象的位置和方向。 视点感应必须与显示技术相结合,采用多种定位方法(眼罩定位、头盔显示、遥视技术和基于眼肌的感应技术)可确定用户在某一时刻的视线。例如将视点检测和感应技术集成到头盔显示系统中,飞行员仅靠“注视”就可在某些非常时期操纵虚拟开关或进行飞行控制 (2) 4D电影是在3D立体电影的基础上加环境特效模拟仿真而组成的新型影视产品。所谓4D电影,也叫四维电影;即三维的立体电影和周围环境模拟组成四维环境。观众在看立体电影时,顺着影视内容的变化,可实时感受到风暴、雷电、下雨、撞击、喷洒水雾、拍腿等身边所发生与立体影象对应的事件,4D的座椅是具有喷水、喷气、振动、扫腿等功能的,以气动为动力的。环境模拟仿真是指影院内安装有下雪、下雨、闪电、烟雾等特效设备,营造一种与影片内容相一致的环境。 5、心得 通过本次试验,我明白了立体视觉以及3D、4D电影的工作原理。

编译原理实验报告

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

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

人工智能实验报告大全

人工智能课内实验报告 (8次) 学院:自动化学院 班级:智能1501 姓名:刘少鹏(34) 学号: 06153034

目录 课内实验1:猴子摘香蕉问题的VC编程实现 (1) 课内实验2:编程实现简单动物识别系统的知识表示 (5) 课内实验3:盲目搜索求解8数码问题 (18) 课内实验4:回溯算法求解四皇后问题 (33) 课内实验5:编程实现一字棋游戏 (37) 课内实验6:字句集消解实验 (46) 课内实验7:简单动物识别系统的产生式推理 (66) 课内实验8:编程实现D-S证据推理算法 (78)

人工智能课内实验报告实验1:猴子摘香蕉问题的VC编程实现 学院:自动化学院 班级:智能1501 姓名:刘少鹏(33) 学号: 06153034 日期: 2017-3-8 10:15-12:00

实验1:猴子摘香蕉问题的VC编程实现 一、实验目的 (1)熟悉谓词逻辑表示法; (2)掌握人工智能谓词逻辑中的经典例子——猴子摘香蕉问题的编程实现。 二、编程环境 VC语言 三、问题描述 房子里有一只猴子(即机器人),位于a处。在c处上方的天花板上有一串香蕉,猴子想吃,但摘不到。房间的b处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。如图1所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。要求通过VC语言编程实现猴子摘香蕉问题的求解过程。 图1 猴子摘香蕉问题 四、源代码 #include unsigned int i; void Monkey_Go_Box(unsigned char x, unsigned char y) {

编译原理实验报告总结

学年第学期《编译原理》实验报告 学院(系):计算机科学与工程学院 班级: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).语义分析 语义分析器对各句子的语法做检查:运算符两边类型是否相兼容;该做哪些类型转换(例如,实数向整数赋值要"取整");控制转移是否到不该去的地方;是

人机交互实验报告

实验一: 实验名称最新人机交互技术 实验目的了解最新人机交互的研究内容。 实验内容通过网络查询最新人机交互相关知识。 1、在百度中找到“最新人机交互视频”的相关网页,查看视频。 2、什么是eTable 。 3、人机交互技术在各个领域的应用。 实验二: 实验名称立体视觉 实验目的掌握立体视觉的原理。 实验内容通过网络查询立体视觉相关知识。 1、在虚拟环境是如何实现立体视觉? 2、3D和4D电影的工作原理。 实验三: 实验名称交互设备 实验目的掌握常用的交互设备的工作原理如键盘、鼠标、显示器、扫描仪。 实验内容通过网络查询人机交互设备相关知识。 1、重点查找液晶显示器和扫描仪的工作原理和方法 2、什么是数字纸?工作原理是什么? 实验四: 实验名称虚拟现实系统中的交互设备 实验目的掌握虚拟现实系统中人机交互设备的工作原理和方法。 实验内容通过网络查询人机交互设备相关知识。重点查找虚拟现实中使用的交互设备和较新的交互设备的工作原理和方法,如:数据手套、三维鼠标、空间跟踪定位器、触觉和力反馈器、头盔式显示器等。(实验报告中写出3种以上) 实验五: 实验名称人机交互界面表示模型 实验目的掌握人机交互界面表示模型中的GOMS、LOTOS和UAN的方法。 实验内容1、简述GOMS和LOTOS表示模型的方法。 2、结合GOMS和LOTOS对任务“中国象棋对弈”进行描述。 3、UAN描述“文件拖入垃圾箱”。 实验六: 实验名称WEB界面设计 实验目的掌握WEB界面设计的原则,了解页面内容、风格、布局、色彩设计的方法。

实验内容1、找到三种类型的网站:旅游景区、购物网站、政府部门网站,每种类型找三个以上网站,总结功能、布局、风格、色彩设计有什么相同和不同。 实验七: 实验名称移动界面设计 实验目的掌握移动界面设计的原则。 实验内容比较移动界面设计与WEB界面设计有什么相同和不同。 实验八: 实验名称可用性分析与评估 实验目的掌握可用性分析与评估的方法。 实验内容对某个网上银行进行可用性分析与评估(银行自定)。 辅导教师成绩

人工智能实验报告

实验报告 1.对CLIPS和其运行及推理机制进行介绍 CLIPS是一个基于前向推理语言,用标准C语言编写。它具有高移植性、高扩展性、 强大的知识表达能力和编程方式以及低成本等特点。 CLIPS由两部分组成:知识库、推理机。它的基本语法是: (defmodule< module-n ame >[< comme nt >]) CLIPS的基本结构: (1).知识库由事实库(初始事实+初始对象实例)和规则库组成。 事实库: 表示已知的数据或信息,用deftemplat,deffact定义初始事实表FACTLIS,由关系名、后跟 零个或多个槽以及它们的相关值组成,其格式如下: 模板: (deftemplate [] *) :: = | 事实: (deffacts [] *) 当CLIPS系统启动推理时,会把所有用deffact定义的事实自动添加到工作存储器中。常用命令如下:asser:把事实添加到事实库(工作存储器)中retract:删除指定事实 modify :修改自定义模板事实的槽值duplicate :复制事实 clear:删除所有事实 规则库 表示系统推理的有关知识,用defrule命令来定义,由规则头、后跟零个或多个条件元素以 及行为列表组成,其格式如下: (defrule [] * ; =>

编 译 原 理 实 验 报 告

编译原理实验报告 课程:编译原理 系别:计算机系 班级: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

人机交互实验报告

中北大学软件学院实验报告 专业:软件工程 方向:电子商务 课程名称:人机交互基础教程 班级:1021010C01 学号: 姓名: 辅导教师:李玉蓉 2012年2月制

成绩: 实验时间年月日时至时学时数 1.实验名称 最新人机交互技术 2.实验目的 了解最新人机交互的研究内容 3.实验内容 通过网络查询最新人机交互相关知识。 1、在百度中找到“最新人机交互视频”的相关网页,查看视频。 2、什么是eTable 。 3、人机交互技术在各个领域的应用 4. 实验原理及流程图

成绩: 5.实验过程或源代码 Etable是一种多功能电脑桌,集时尚、实用、经济于一“桌”,无论是居家卧室,还是出差旅途,都可以提供一个舒适、惬意的网上时光,部件有:多角度调节桌面、2个风扇、1个USB插口、1个活动USB插头、鼠标垫、桌腿可调节长度。 人机交互技术的发展极大地促进了计算机的快速发展和普及,已经在制造业、教育、娱乐、军事和日常生活等领域得到 广泛应用。在制造业用于产品设计、装配仿真等各个环节;在 教育中用于研发沉浸式的虚拟世界系统,供学者学习;在军事 方面头显示器等的出现给军事训练提供了极大地方便;在娱乐 中3d和4d电影的拍摄都应用到此技术;体育方面用于体育训 练和报道等;生活中,触屏手机,人脸识别技术等都用到人机 交互技术。 6.实验结论及心得 通过在网上查阅有关近期最新人机交互的视频和网页,我对人机交互的发展及在各方面的应用有了初步了解和认识

实验时间年月日时至时学时数1.实验名称 立体视觉 2.实验目的 掌握立体视觉的原理 3.实验内容 通过网络查询立体视觉相关知识。 1. 在虚拟环境是如何实现立体视觉? 2. 3D和4D电影的工作原理。 4.实验原理及流程图

编译原理实验报告一

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

人工智能实验报告

人工智能课程项目报告 姓名: 班级:二班

一、实验背景 在新的时代背景下,人工智能这一重要的计算机学科分支,焕发出了他强大的生命力。不仅仅为了完成课程设计,作为计算机专业的学生, 了解他,学习他我认为都是很有必要的。 二、实验目的 识别手写字体0~9 三、实验原理 用K-最近邻算法对数据进行分类。逻辑回归算法(仅分类0和1)四、实验内容 使用knn算法: 1.创建一个1024列矩阵载入训练集每一行存一个训练集 2. 把测试集中的一个文件转化为一个1024列的矩阵。 3.使用knnClassify()进行测试 4.依据k的值,得出结果 使用逻辑回归: 1.创建一个1024列矩阵载入训练集每一行存一个训练集 2. 把测试集中的一个文件转化为一个1024列的矩阵。 3. 使用上式求参数。步长0.07,迭代10次 4.使用参数以及逻辑回归函数对测试数据处理,根据结果判断测试数 据类型。 五、实验结果与分析 5.1 实验环境与工具 Window7旗舰版+ python2.7.10 + numpy(库)+ notepad++(编辑)

Python这一语言的发展是非常迅速的,既然他支持在window下运行就不必去搞虚拟机。 5.2 实验数据集与参数设置 Knn算法: 训练数据1934个,测试数据有946个。

数据包括数字0-9的手写体。每个数字大约有200个样本。 每个样本保持在一个txt文件中。手写体图像本身的大小是32x32的二值图,转换到txt文件保存后,内容也是32x32个数字,0或者1,如下图所 示 建立一个kNN.py脚本文件,文件里面包含三个函数,一个用来生成将每个样本的txt文件转换为对应的一个向量:img2vector(filename):,一个用 来加载整个数据库loadDataSet():,最后就是实现测试。

编译原理实验报告

《编译原理》实验报告软件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)单词分类 为了编程的实现。我们假定要编译的语言中,全部关键字都是保留字,程序员不得将它们作为源程序中的标识符;作了这些限制以后,就可以把关键字和标识符的识别统一进行处理。即每当开始识别一个单词时,若扫视到的第一个字符为字母,则把后续输入的字母或数字字符依次进行拼接,直至扫视到非字母、数字字符为止,以期获得一个尽可能长的字母数字字符串,然后以此字符串查所谓保留字表(此保留字表要事先造好),若查到此字符串,则取出相应的类别码;反之,则表明该字符串应为一标识符。

人工智能实验报告

《一人工智能方向实习一》 实习报告 专业:计算机科学与技术 班级:12419013 学号: 姓名: 江苏科技大学计算机学院 2016年3月

实验一数据聚类分析 一、实验目的 编程实现数据聚类的算法。 二、实验内容 k-means聚类算法。 三、实验原理方法和手段 k-means算法接受参数k ;然后将事先输入的 n个数据对象划分为 k个聚类以便使得 所获得的聚类满足:同一聚类中的对象相似度较高 四、实验条件 Matlab2014b 五、实验步骤 (1)初始化k个聚类中心。 (2)计算数据集各数据到中心的距离,选取到中心距离最短的为该数据所属类别。 (3)计算(2)分类后,k个类别的中心(即求聚类平均距离) (4)继续执行(2)(3)直到k个聚类中心不再变化(或者数据集所属类别不再变化) 六、实验代码 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % mai n.m % k-mea ns algorithm % @author matcloud %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear; close all ; load fisheriris ; X = [meas(:,3) meas(:,4)]; figure; plot(X(:,1),X(:,2), 'ko' ,'MarkerSize' ,4); title( 'fisheriris dataset' , 'FontSize' ,18, 'Color' , 'red'); [idx,ctrs] = kmea ns(X,3); figure; subplot(1,2,1); plot(X(idx==1,1),X(idx==1,2), 'ro' , 'MarkerSize' ,4); hold on;

编译原理实验报告(手打)

《编译原理》实验报告 班级:计C104 姓名:李云霄 学号:108490

实验一词法分析程序实现 一、实验目的与要求 通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法。 二、实验内容 选取无符号数的算术四则运算中的各类单词为识别对象,要求将其中的各个单词识别出来。 输入:由无符号数和+,-,*,/, ( , ) 构成的算术表达式,如1.5E+2-100。 输出:对识别出的每一单词均单行输出其类别码(无符号数的值暂不要求计算)。 三、实现方法与环境 1、首先设计识别各类单词的状态转换图。 描述无符号常数的确定、最小化状态转换图如图1所示。其中编号0,1,2,…,6代表非终结符号<无符号数>、<余留无符号数>、<十进小数>、<小数部分>、<指数部分>、<整指数>及<余留整指数>, 1,2和6为终态,分别代表整数、小数和科学计数的识别结束状态。 图1 文法G[<无符号数>]的状态转换图 其中编号0,1,2,…,6代表非终结符号<无符号数>、<余留无符号数>、<十进小数>、<小数部分>、<指数部分>、<整指数>及<余留整指数>, 1,2和6为终态,分别代表整数、小数和科学计数的识别结束状态。 在一个程序设计语言中,一般都含有若干类单词符号,为此可首先为每类单词建立一张状态转换图,然后将这些状态转换图合并成一张统一的状态图,即得到了一个有限自动机,再进行必要的确定化和状态数最小化处理,最后据此构造词法分析程序。 四则运算算术符号的识别很简单,直接在状态图的0状态分别引出相应标记的矢

人机交互--拼图游戏实验报告

人机交互 实验报告 题目趣味拼图游戏界面的设计与 实现 学院 专业 姓名 学号 班级 二O一三年一月四日

1.设计内容 1.1趣味拼图: 趣味拼图 1.2面向对象: 儿童 1.3主要功能描述 该系统用Java语言实现,小朋友通过控制鼠标,实现方格的移动。 1.4人机交互设计: 考虑该系统面向小朋友,拼图的难度做的很低,而且操作简单,图片是采用卡通动画上的人物,简单并且能吸引小朋友。考虑到一直点击鼠标会有点枯燥,该系统增加了各种好玩的音效,当点击鼠标,系统会根据不同的情况配有不同的声音,增加了拼图游戏的趣味性。并且小朋友可以选择自己喜欢的模式进行拼图,考虑到面向对象为小朋友,界面很友好,图片的颜色采用了比较鲜艳的颜色,主角卡通,线条清晰,各部分特点明显,也降低了拼图的难度,又不失趣味性,界面的按钮也进行了卡通形象装点。 2. 系统结构 2.1系统主界面: 系统刚开始进去是没有打乱顺序的拼图状态。 2.2系统开始界面: 该界面为打乱谁许后的状态。 2.3系统预览界面: 该界面是为方便小朋友拼图过程中没有记清楚样子设计的,能随时查看。 2.4系统设置: 该功能可以实现选取图片,小朋友可以选择自己喜爱的图片进行拼图。 2.5编码: 后台编码用了Java语言,总共设计了4个类,没有用数据库。 3界面设计 3.1拼图界面

3.1.1界面功能: 拼图主界面,总览全图。 3.1.2截图: 3.1.3操作: 小朋友可以通过点击鼠标实现方块的移动。 3.1.4界面设计的交互思想及交互原则: 为方便拼图,刚开始进入界面是一个没有乱序的图片,小图片大小为 100*100的正方形,看上去比较舒服。考虑到面向对象为小朋友,图片的颜色采用了比较鲜艳的颜色,主角卡通,线条清晰,各部分特点明显。体现了交互性原则。 3.1.5主要代码: private void init(){ container = this.getContentPane(); //按钮 start = new JButton("开始"); start.setBackground(Color.getHSBColor(0,111,1213)); start.setIcon(new ImageIcon("pictrue/start.png")); start.addActionListener(this); preview = new JButton("预览"); preview.setBackground(Color.getHSBColor(321, 102, 002));

编译原理实验报告

实验一词法分析器的设计与实现 (1) 1)实验目的 (1) 2)实验内容 (1) 3)实验要求 (1) 4)实验原理 (1) 5)实验步骤 (1) 6)状态转化图及词法分析程序 (2) 7)测试 (7) 实验二语法分析器的设计与实现 (9) 1)实验目的 (9) 2)实验内容 (9) 3)实验要求 (9) 4)实验原理 (9) 5)实验步骤 (9) 6)语法分析程序 (10) 7)测试 (16)

编译原理实验报告 专业:计算机科学与技术 学生姓名: 学号: 48 完成时间:2020年11月25日

实验一词法分析器的设计与实现 1)实验目的 ①掌握正规式、状态转换图、C语言单词符号的划分及词法分析器的实现 ②掌握词法分析程序的作用和接口。 2)实验内容 设计及实现C语言程序的词法分析器。 3)实验要求 ①对任给的一个C语言源程序,能够虑掉空格、回车换行符、tab键及注释。 ②识别各类单词符号,如关键字、标识符、运算符、常数、界符,结果以二元式形式 输出。并构造符号表。 ③输出有词法错误的单词及所在行号。 4)实验原理 根据扫描到的单词符号的第一个字符的种类,分别转到相应的程序进行处理。这些程序的功能就是识别以相应字符开头的各类单词符号。

5)实验步骤 ①根据C语言各类单词的正规式,构造能识别各类单词的状态转换图。 ②根据状态转换图,构造识别各类单词的词法分析器。 6)状态转化图及词法分析程序

#include "" #include "" #include "" FILE *fp; int id; void main() { char cbuffer; char alphaprocess(char buffer); char digitprocess(char buffer); char otherprocess(char buffer); if ((fp=fopen("","r"))==NULL) /*以只读方式打开文件"",NULL在文件中已被定义为0*/ printf("error"); else { cbuffer=fgetc(fp); /*文件不为空则从文件中取字符*/ while (cbuffer!=EOF) /*EOF文件结束标志*/ { if(cbuffer==' '||cbuffer=='\n') /*掠过空格和回车符*/ { cbuffer=fgetc(fp); id=4; }

编译原理实验报告(词法分析器语法分析器)

编译原理实验报告

实验一 一、实验名称:词法分析器的设计 二、实验目的:1,词法分析器能够识别简单语言的单词符号 2,识别出并输出简单语言的基本字.标示符.无符号整数.运算符.和界符。 三、实验要求:给出一个简单语言单词符号的种别编码词法分析器 四、实验原理: 1、词法分析程序的算法思想 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。 2、程序流程图 (1 (2)扫描子程序

3

五、实验内容: 1、实验分析 编写程序时,先定义几个全局变量a[]、token[](均为字符串数组),c,s( char型),i,j,k(int型),a[]用来存放输入的字符串,token[]另一个则用来帮助识别单词符号,s用来表示正在分析的字符。字符串输入之后,逐个分析输入字符,判断其是否‘#’,若是表示字符串输入分析完毕,结束分析程序,若否则通过int digit(char c)、int letter(char c)判断其是数字,字符还是算术符,分别为用以判断数字或字符的情况,算术符的判断可以在switch语句中进行,还要通过函数int lookup(char token[])来判断标识符和保留字。 2 实验词法分析器源程序: #include #include #include int i,j,k; char c,s,a[20],token[20]={'0'}; int letter(char s){ if((s>=97)&&(s<=122)) return(1); else return(0); } int digit(char s){ if((s>=48)&&(s<=57)) return(1); else return(0); } void get(){ s=a[i]; i=i+1; } void retract(){ i=i-1; } int lookup(char token[20]){ if(strcmp(token,"while")==0) return(1); else if(strcmp(token,"if")==0) return(2); else if(strcmp(token,"else")==0) return(3); else if(strcmp(token,"switch")==0) return(4); else if(strcmp(token,"case")==0) return(5); else return(0); } void main() { printf("please input string :\n"); i=0; do{i=i+1; scanf("%c",&a[i]);

相关文档
相关文档 最新文档