卫星通信实验报告1.docx
《卫星通信实验报告1.docx》由会员分享,可在线阅读,更多相关《卫星通信实验报告1.docx(21页珍藏版)》请在冰点文库上搜索。
![卫星通信实验报告1.docx](https://file1.bingdoc.com/fileroot1/2023-5/10/4417df51-4d19-4a86-ab25-36d814c22575/4417df51-4d19-4a86-ab25-36d814c225751.gif)
卫星通信实验报告1
南京信息工程大学
卫星通信实验报告
学院电子与信息工程学院
专业通信工程
年级2011级
班级1班
学号
姓名
实验一卫星与轨道2
一、实验原理2
二、实验器材2
三、实验内容2
四、实验过程2
实验二QPSK调制解调13
一、实验原理13
二、实验器材13
三、实验内容13
四、实验过程13
五、总结14
实验三GMSK调制15
一、实验原理15
二、实验器材15
三、实验内容15
四、实验过程15
五、总结17
实验一卫星与轨道
一、实验原理
1、卫星只要获得这一水平方向的速度后,不需要再加动力就可以环绕地球[1]飞行。
这时卫星的飞行轨迹叫卫星轨道。
卫星轨道参数是用来描述在太空中卫星运行的位置、形状和取向的各种参数。
同义词:
卫星轨道根数。
(1)轨道平面的倾角i:
赤道平面与卫星轨道平面间的夹角,具体计算是在卫星轨道升段时由赤道平面反时针旋转到轨道平面的夹角。
(2)轨道的半长轴a
(3)轨道的偏心率e:
焦距与轨道半长轴之比。
(4)升节点位置
指从春分点到地心的连线与从升节点到地心的连线之间的夹角。
(5)近地点幅角
:
指从升节点到地心的连线与从卫星近地点到地心的连线之间的夹角。
从升节点顺轨道运行方向度量,
(6)卫星初始时刻的位置
:
是卫星在初始时刻到到地心的连线与升节点到地心的连线之间的张角。
其中
是初始时刻卫星在轨道内的幅角,从升节点位置开始计算。
2、利用MATLAB可以把卫星的轨道参数直观的表现出来
二、实验器材
电脑、MATLAB软件等。
三、实验内容
用MATLAB仿真卫星轨道
四、实验过程
1、代码:
function[]=orbits(action);
%ThisfunctionplotsanEarthorbitbasedon
%thefollowingorbtialelements:
%perigee=altitudeatperigee(miles)
%apogee=altitudeatapogee(miles)
%i=inclinationoforbitalplanetoequatorialplane(degrees)
%Omega=argumentofascendingnode(degrees)
%omega=argumentofperiapsis(degrees)
%
%WrittenwithMatlab5.3by:
%MichaelHanchak(mhanchakATyahooDOTcom)
%Dayton,Ohio
%August9,2001
%
%ReferenceText:
%FundamentalsofAstrodynamics
%PublishedbyDoverPress,1971
%
%Usersofthisfunctionassumeallriskinusingthecalculations
%containedwithin.Thisfunctionisnottobedistributedwithout
%theauthor'sfullconsent.
%
%Forbestresults,requires"coast.mat"and"topo.mat"
%standardswitchyardprogramminglogic
ifnargin==0;
action='build';
end
%Earthradius(miles)
rad=6378136/1000/1.6;
colors=[.6.7.8];
colors2='k';
switchaction
%buildGUI
case'build'
strings={'w','W','i','Apogee','Perigee'};
tags={'o','O','i','alt_a','alt_p'};
values={'45','45','30','345','115'};
strings2={'PlotOrbit','ClearOrbits','CenterEarth',...
'ZoomAll','Flyby','Help','ToggleEarth','Quit'};
callbacks={'orbits(''plot'')','orbits(''clear'')',...
'camva(15);view(120,30);camlookat(findobj(''tag'',''earth''));',...
'camva(15);camlookat','orbits(''flyby'')','helporbits',...
'orbits(''earth'')','close(gcf)'};
ifisempty(findobj('tag','orbits'))
www=figure('tag','orbits');
else
www=findobj('tag','orbits');
figure(www);
clf
end
set(www,'position',[2575600500],'color',colors2);
forkk=1:
length(strings),
ppp=uicontrol('Units','pixels','Position',[2(20*(kk-1)+16)5020],...
'String',strings{kk},'style','text','backgroundcolor',colors2,...
'foregroundcolor','w','fontsize',9);
uicontrol('Units','pixels','Position',[55(20*(kk-1)+16)5020],...
'tag',tags{kk},'style','edit','string',values{kk},'backgroundcolor',[111]);
ifkk<=2
set(ppp,'fontname','symbol','fontsize',12);
end
end
forkk=1:
length(strings2),
uicontrol('Units','pixels','Position',[10(25*(kk-1)+150)7022],...
'string',strings2{kk},'callback',callbacks{kk},'backgroundcolor',colors);
end
uicontrol('Units','pixels','Position',[1037010080],...
'string',['LeftclickanddragEarthfordynamicviewing.',...
'Rightclickforzooming.Double-Clicktocenter.'],...
'style','text','backgroundcolor',colors2,'fontsize',8,...
'HorizontalAlignment','left','foregroundcolor','w');
axes('position',[.2.05.75.9],'units','normalized')
axisequal
axisoff
axisvis3d
holdon
%Plotreferenceframeaxes
h1=plot([0rad+500],[00],'r-');
h2=plot([00],[0rad+500],'g-');
h3=plot3([00],[00],[0rad+500],'color',[00.8]);
set([h1h2h3],'linewidth',4);
view(120,30);
camva(15);
rot3d;
data.simple=1;
data.handles=[];
data.earthhandle=[];
set(gcf,'userdata',data);
orbits('earth')%callroutinetodrawearth
camlookat(findobj('tag','earth'));
case'earth'
%determinelevelofgraphics
data=get(gcf,'userdata');
simple=data.simple;
delete(data.earthhandle);
data.earthhandle=[];
%Plottheearth(texturemaporsimple)
ifsimple==0&~isempty(which('topo.mat'))
[X,Y,Z]=sphere(50);
loadtopo
topo=[topo(:
181:
360)topo(:
1:
180)];
mat.dull.AmbientStrength=0.4;
mat.dull.DiffuseStrength=.6;
mat.dull.SpecularColorReflectance=.5;
mat.dull.backfacelighting='reverselit';
mat.dull.SpecularExponent=20;
mat.dull.SpecularStrength=.8;
data.earthhandle
(1)=surface(rad*X,rad*Y,rad*Z,...
mat.dull,...
'FaceColor','texturemap',...
'EdgeColor','none',...
'FaceLighting','phong',...
'Cdata',topo,'tag','earth');
colormap(topomap1)
data.earthhandle
(2)=light('position',rad*[101010]);
%light('position',rad*[-10-10-10],'color',[.6.2.2]);
%set(gcf,'renderer','opengl');
data.simple=1;
else
[X,Y,Z]=sphere(24);
data.earthhandle
(1)=mesh(rad*X,rad*Y,rad*Z);
%set(data.earthhandle,'tag','earth','facecolor',[.6.7.9],'edgecolor',[111]);
set(data.earthhandle
(1),'tag','earth','facecolor',[001],'edgecolor',[.3.31]);
if~isempty(which('coast.mat'))
loadcoast
ncst=ncst*pi/180;
all=zeros(length(ncst),3);
forj=1:
length(ncst)
theta=ncst(j,1);
phi=ncst(j,2);
all(j,:
)=[cos(theta)*cos(phi),...
sin(theta)*cos(phi),...
-sin(phi)];
end
data.earthhandle
(2)=plot3(rad*all(:
1),rad*all(:
2),-rad*all(:
3));
set(data.earthhandle
(2),'color',[0.90]);
end
data.simple=0;
end
set(gcf,'userdata',data);
%plotorbits
case'plot'
deg2rad=pi/180;
data=get(gcf,'userdata');
handles=data.handles;
%getorbitalelementsfromGUI
alt_p=str2num(get(findobj('tag','alt_p'),'string'));
alt_a=str2num(get(findobj('tag','alt_a'),'string'));
inc=str2num(get(findobj('tag','i'),'string'));
Omega=str2num(get(findobj('tag','O'),'string'));
omega=str2num(get(findobj('tag','o'),'string'));
%checkforcorrectnessofinputdata
ifalt_p>alt_a
error1=errordlg('Perigeemustbesmallerthanapogee');
waitfor(error1);
else
%Orbitalelements
a=(alt_p+alt_a+2*rad)/2;
c=a-alt_p-rad;
e=c/a;
p=a*(1-e^2);
th=linspace(0,2*pi,200);
r=p./(1+e*cos(th));
xx=r.*cos(th);
yy=r.*sin(th);
Omega=Omega*deg2rad;
inc=inc*deg2rad;
omega=omega*deg2rad;
%CoordinateTransformations
ZZ=[cos(Omega)-sin(Omega)0;
sin(Omega)cos(Omega)0;
001];
XX=[100;
0cos(inc)-sin(inc);
0sin(inc)cos(inc)];
ZZ2=[cos(omega)-sin(omega)0;
sin(omega)cos(omega)0;
001];
%actualplot
vec=ZZ*XX*ZZ2*[xx;yy;zeros(1,length(xx))];
h1=plot3(vec(1,:
),vec(2,:
),vec(3,:
));
set([h1],'linewidth',1,'color',[111]);
%lineofascendingnode
vec1=ZZ*[rad+600;0;0];
h2=plot([0vec1
(1)],[0vec1
(2)],'r-');
%lineofperiapsis
vec2=ZZ*XX*ZZ2*[rad+600;0;0];
h3=plot3([0vec2
(1)],[0vec2
(2)],[0vec2(3)],'color',...
[110]);
%lineofinclination
vec3=ZZ*XX*[0;0;rad+600];
h4=plot3([0vec3
(1)],[0vec3
(2)],[0vec3(3)],...
'color',[00.8]);
set([h2h3h4],'linewidth',2);
data.handles=[data.handlesh1h2h3h4];
set(gcf,'userdata',data);
%camlookat;
end
case'clear'
data=get(gcf,'userdata');
handles=data.handles;
forrr=1:
length(handles)
ifishandle(handles(rr))
delete(handles(rr));
end
end
data.handles=[];
set(gcf,'userdata',data);
case'flyby'
camlookat(findobj('tag','earth'));
camva(15);
camup([001]);
forx=-300000:
1000:
60000
campos([x,30000,30000])
drawnow
end
%herearetherecursivecallbacksfortherotationoftheaxes
case'rot'
rot3d('rot');
case'down'
rot3d('down');
case'up'
rot3d('up');
case'zoom'
rot3d('zoom');
end
%thisfunctionbelowallowsfordynamics"clickanddrag"
%rotationoftheplot.
functionrot3d(huh)
ifnargin<1
set(gcf,'WindowButtonDownFcn','orbits(''down'')');
set(gcf,'WindowButtonUpFcn','orbits(''up'')');
set(gcf,'WindowButtonMotionFcn','');
else
switchhuh
case'down'
ifstrcmp(get(gcf,'SelectionType'),'normal')
set(gcf,'WindowButtonMotionFcn','orbits(''rot'')');
elseifstrcmp(get(gcf,'SelectionType'),'alt')
set(gcf,'WindowButtonMotionFcn','orbits(''zoom'')');
elseifstrcmp(get(gcf,'SelectionType'),'open')%centerpoint
temp1=get(gca,'currentpoint');
temp1=(temp1(1,:
)+temp1(2,:
))/2;%averagepoints
%newvec=temp1-campos
%oldvec=camtarget-campos
%dir=cross(oldvec,newvec)
%ang=atan2(norm(dir),dot(oldvec,newvec))+2
%campan(-ang,0,'data',dir);
camtarget([temp1]);
end
rdata.oldpt=get(0,'PointerLocation');
set(gca,'userdata',rdata);
case'up'
set(gcf,'WindowButtonMotionFcn','');
case'rot'
rdata=get(gca,'userdata');
oldpt=rdata.oldpt;
newpt=get(0,'PointerLocation');
dx=(newpt
(1)-oldpt
(1))*.5;
dy=(newpt
(2)-oldpt
(2))*.5;
%direction=[001];
%coordsys='camera';
%pos=get(gca,'cameraposition');
%targ=get(gca,'cameratarget');
%dar=get(gca,'dataaspectratio');
%up=get(gca,'cameraupvector');
%[newPosnewUp]=camrotate(pos,targ,dar,up,-dx,-dy,coordsys,direction);
%set(gca,'cameraposition',newPos,'cameraupvector',newUp);
camorbit(gca,-dx,-dy,'camera');
rdata.oldpt=newpt;
set(gca,'userdata',rdata);
case'zoom'
rdata=get(gca,'userdata');
oldpt=rdata.oldpt;
newpt=get(0,'PointerLocation');
dy=(newpt
(2)-oldpt
(2))/abs(oldpt
(2));
camzoom(gca,1+dy)
rdata.oldpt=newpt;
set(gca,'userdata',rdata)
end
end
2、结果图:
Perigee近地点Apogee远地点i轨道平面的倾角
升节点位置
近地点幅角
改变i、
的值可以得到不同的卫星轨道
五、总结
卫星轨道参数是用来描述在太空中卫星运行的位置、形状和取向的各种参数,可以在MATLAB图中形象的表示出来。
实验二QPSK调制解调
一、实验原理
四相相移键控信号简称“QPSK”。
它分为绝对相移和相对相移两种。
由于绝对相移方式存在相位模糊问题,所以在实际中主要采用相对移相方式DQPSK。
它具有一系列独特的优点,目前已经广泛应用于无线通信中,成为现代通信中一种十分重要的调制解调方式。
在数字信号的调制方式中QPSK四相移键控是目前最常用的一种卫星数字信号调制方式。
二、实验器材
电脑、MATLAB软件等。
三、实验内容
用MATLAB