科学语言与matlab计算 实验2、3
一、实验要求
实验二
- 目前各种遥感卫星数据都提供了相应的传感器的参数,熟悉数据的存储格式并提取出传感器参数及实际的遥感数据是后期数据处理的基础。给出两幅ALOS PALSAR卫星数据的原始头文件“LED-ALPSRP063392880-P1.1__D.orbit.txt”和“LED-ALPSRP070102880-P1.1__D.orbit.txt”(均为文本文件),文件记录了卫星的包含28个空间位置的信息轨道矢量信息,包括时间、时间间隔、瞬时位置及速度。请写MATLAB程序分别读出两幅影像的轨道参数。
- 给出ALOS PALSAR卫星数据的原始头文件“LED-ALPSRP063392880-P1.1__D”,请编写程序按照文件“LED-ALPSRP063392880-P1.1__D.orbit.txt”里的格式读出参数。注:ALOS PALSAR数据的存储格式请参考手册“PALSAR_E_Cover_Format.pdf”
实验三 - 已知ALOS卫星为用户提供的轨道数据,总共有28个轨道位置点,包括轨道点的时间、空间位置(x,y,z)及其在该点的速度(dx,dy,dz),任意两个轨道点的获取时间相隔为60秒。根据实验三中读出的卫星轨道参数,利用各种数据插值方法计算数据获取时间内任意时刻的卫星所在的位置。请编写MATLAB程序实现轨道数据插值及轨道加密后的数据文件的存储。并用三维绘图命令画出地球及相应轨道。
2.利用重复轨道卫星数据计算轨道之间的基线(即空间距离)。文件 “LED-ALPSRP063392880-P1.1__D.orbit.txt”和“LED-ALPSRP070102880-P1.1__D.orbit.txt”是两景重复轨道获取的ALOS PALSAR数据,请在题1的基础上编程实现数据获取时间内任意位置的基线长度,并存入文件中。
二、 实验内容与步骤
实验2-1 读取txt影像轨道参数
下面3张图分别是:①实现函数;②读取的位置速度矩阵;③时间和时间间隔及点数。
实验2-2读取原始文件轨道参数
从原始文件中读取主要结合数据规格说明书和UltraEditPortable软件来分析轨道车参数的位置,用到fseek()函数进行定位,textscan()来读取内容。
实验3-1插值 存储 画图
1插值
关于航天器的轨道插值的算法,查阅相关文件,有拉格朗日算法、B样 条曲线、切比雪夫多项式(Chebyshev)多项式拟合法算法等。因此我采用切比雪夫多项式。
源起于多倍角的余弦函数和正弦函数的展开式,是以递归方式定义的多项式序列,是计算数学中的一类特殊函数,对于注入连续函数逼近问题,阻抗变换问题等等的数学、物理学、技术科学中的近似计算有着非常重要的作用。
切比雪夫多项式在逼近理论中有重要的应用。这是因为第一类切比雪夫多项式的根(被称为切比雪夫节点)可以用于多项式插值。相应的插值多项式能最大限度地降低龙格现象,并且提供多项式在连续函数的最佳一致逼近。
关于切比雪夫多项式核心函数是Cornell University MatthewPeterKelly的开源例子,github项目地址:https://github.com/MatthewPeterKelly/Chebyshev_Polynomials。
本实验的插值处理主要是对x、y、z三个独立变量分别独立进行插值。
X轴为时间,Y轴为卫星在X方向的位置,可看出拟合效果较好。
2 存储
3 画图
画图采用动态生成运动轨迹,并存储至gif文件。卫星为红色小球,与地心连线为黄线;绿色线为轨迹;地球可、坐标轴可自动旋转,并有模拟光照。
实验3-2 基线长度并存储 画图
1 画图
画两卫星运行轨迹图,红绿分别为两种卫星轨迹,如图可以发现轨迹已紧密重合,说明卫星位置距离较近。
2基线长度并存储
主要通过两者换算到同一时间,然后进行时间的加减。
三、 代码
代码结构图
1 term6_matlab_sy2_01.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Time:2020/5/25 %Author: 张一青
%Function:大三下matlab 实验2(1),读取卫星的卫星的包含28个空间位置的信息轨道矢量信息,
% 包括时间、时间间隔、瞬时位置及速度。请写MATLAB程序分别读出两幅影像的轨道参数。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc,clear,
filename="E:\ziliao\2_Term6_matlab\sy2-sy3\LED-ALPSRP063392880-P1.1__D.orbit.txt"
fileID= fopen(filename,'r');
line1_2=textscan(fileID,'%s%d%s',3)%读取前3行
cell_state_vector_pv=textscan(fileID,'%s%.4f%.4f%.4f%s%s%s')
cell_state_vector_pv(1)=[];
cell_state_vector_pv(4:6)=[];
d_pv1=cell2mat(cell_state_vector_pv);
d_state_vector_pv=[];
for i=1:28
d_state_vector_pv(i,1:3)=d_pv1(2*i-1,:);
d_state_vector_pv(i,4:6)=d_pv1(2*i,:);
end
fclose(fileID);
2 term6_matlab_sy2_02.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Time:2020/5/25 %Author: 张一青
%Function:给出ALOS PALSAR卫星数据的原始头文件“LED-ALPSRP063392880-P1.1__D”,
% 请编写程序按照文件“LED-ALPSRP063392880-P1.1__D.orbit.txt”里的格式读出
% 参数。注:ALOS PALSAR数据的存储格式请参考手册“PALSAR_E_Cover_Format.pdf”
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 参数设置 参照数据手册
clc,clear
canshu2=[720,4096,161];%state_vector_interval 间隔时间
canshu3=[720,4096,387];%m m m m/s m/s m/s
filename='E:\ziliao\2_Term6_matlab\sy2-sy3\LED-ALPSRP063392880-P1.1__D';
% filename='E:\ziliao\2_Term6_matlab\sy2-sy3\LED-ALPSRP070102880-P1.1__D';
%% 操作数据
fid= fopen(filename,'r');
%读取时间和间隔时间
status=fseek(fid,sum(canshu2)-1,'bof');
time=cell2mat(textscan(fid,'%d%d'));
%读取state_vector_position\state_vector_velocity\pointnumber
status=fseek(fid,sum(canshu3)-1,'bof');
cell_state_vector_pv=textscan(fid,'%f');
cell_state_vector_pv{
1}(end)=[];%删除最后一行零
point_number=(size(cell_state_vector_pv{
1},1))/6;
% data=textscan(fid,'%f',k*6)
fclose(fid);
%% 对位置速度进行整理 存储至d_state_vector_pv,打印信息
temp_pv1=cell2mat(cell_state_vector_pv);
d_state_vector_pv=reshape(temp_pv1,6,point_number)'%m m m m/s m/s m/s
fprintf('%s\t%d\n%s\t%d\n','time_of_first_state_vector(s):',time(1),'state_vector_interval(s):',time(2))
3 term6_matlab_sy3_01.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Time:2020/5/25 %Author: 张一青
%Function:大三下matlab 实验3(1),根据实验三中读出的卫星轨道参数,
% 利用各种数据插值方法计算数据获取时间内任意时刻的卫星所在的位置。
% 请编写MATLAB程序实现轨道数据插值及轨道加密后的数据文件的存储。
%并用三维绘图命令画出地球及相应轨道。
%输入该实验指定文件
%输出: 内插点位信息.txt
% 三维动图.gif在matlab默认路径
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc,clear,close all
%% 读入文件设置参数
src="E:\ziliao\2_Term6_matlab\sy2-sy3\"
name="LED-ALPSRP063392880-P1.1__D.orbit.txt"
filename=[src+name]
fileID= fopen(filename,'r');
line1_2=textscan(fileID,'%s%d%s',3)%读取前3行
cell_state_vector_pv=textscan(fileID,'%s%.4f%.4f%.4f%s%s%s')
cell_state_vector_pv(1)=[]
cell_state_vector_pv(4:6)=[]
d_pv1=cell2mat(cell_state_vector_pv)
d_state_vector_pv=[]
for i=1:28
d_state_vector_pv(i,1:3)=d_pv1(2*i-1,:);
d_state_vector_pv(i,4:6)=d_pv1(2*i,:);
end
fclose(fileID);
%% 设置chebyshevFit参数 并运算
order=10;
inter=10000;%重要重要重要重要重要重要重要重要重要重要重要重要重要重要重要重要重要重要重要关于时间间隔设置有关的值
d=double([0,(line1_2{
2}(1)-1)]*line1_2{
2}(3)+line1_2{
2}(2));
data1_ori.input=linspace(d(1),d(2),line1_2{
2}(1));
data1_inter.input=linspace(d(1),d(2),inter);
for i=1:3
data1_ori.output=d_state_vector_pv(:,i)';
f2 = chebyshevFit(data1_ori, order); %Chebyshev Values
data1_inter.output(i,:) = chebyshevInterpolate(f2,data1_inter.input,d); %Approximation
end
%% 查看拟合效果
% plot(data1_ori.input, d_