GPS时间序列分析(二)matlab语言分析

て烟熏妆下的殇ゞ 提交于 2020-02-12 12:25:03

GPS时间序列分析(二) matlab语言分析

1.简单的GPS时间序列

在这里插入图片描述

load E:\RMTE.txt
yuanshi_dataWeidu=RMTE(:,4)';%将原始坐标赋值
yuanshi_dataJingdu=RMTE(:,3)';
yuanshi_dataGaochen=RMTE(:,5)';
yuanshi_data=[yuanshi_dataWeidu;yuanshi_dataJingdu;yuanshi_dataGaochen];
[col,raw]=size(yuanshi_data);
llh_Z_xyz=llh2xyz(yuanshi_data);%经纬度高程转换成xyz平面坐标,输出格式为:3行n列

%第一次转换后的xyz坐标减去第一次观测的xyz坐标,组成xyz变化量矩阵
llh_Z_xyz_X=llh_Z_xyz(1,:)-mean(llh_Z_xyz(1,:)); 
llh_Z_xyz_Y=llh_Z_xyz(2,:)-mean(llh_Z_xyz(2,:));
llh_Z_xyz_Z=llh_Z_xyz(3,:)-mean(llh_Z_xyz(3,:));
llh_Z_xyz_XYZ=[llh_Z_xyz_X;llh_Z_xyz_Y;llh_Z_xyz_Z];

%这是第二步,将第一次转换好的xyz转换为NEU_xyz,将变化量矩阵排列成3*n列的形式,按点号顺序排列
llh_Z_xyz3=reshape(llh_Z_xyz_XYZ,col*raw,1);

%取第一次观测的经纬度作为llh参数,将xyz坐标转换为NEU_xyz变化量矩阵
latitude=yuanshi_data(1,1);
longitude=yuanshi_data(2,1);
altitude=yuanshi_data(3,1);
neu=xyz2enu([latitude longitude altitude],llh_Z_xyz3);%将xyz坐标转换成NEU_xyz坐标
NEU_xyz=reshape(neu,col,raw);%NEU_xyz转换好后,排列成3行n列

RMTE_NEU_xyz_VariableQuantity;
load E:\RMTE.txt
E=RMTE(:,1);%向量a的取值都为1
Time=RMTE(:,2);%站GPS时间序列观测时间
NEU_xyz_WE=NEU_xyz(1,:)*1000;%东西方向
NEU_xyz_NS=NEU_xyz(2,:)*1000;%南北方向
NEU_xyz_GC=NEU_xyz(3,:)*1000;%高程方向


%求东西方向原始坐标残差
subplot(3,1,1);
p=polyfit(Time,NEU_xyz_WE',1);
z=polyval(p,Time);
plot(Time,NEU_xyz_WE,'.black',Time,z,'r')
ylabel('Latitude(mm)');
xlabel('Time');
hTit(1)=title('RMTE站东西方向原始序列图');

2 噪声项残差分布项图

在这里插入图片描述

RMTE_NEU_xyz_VariableQuantity;
load E:\RMTE.txt
E=RMTE(:,1);%向量a的取值都为1
Time=RMTE(:,2);%武汉站GPS时间序列观测时间
NEU_xyz_WE=NEU_xyz(1,:);%东西方向
NEU_xyz_NS=NEU_xyz(2,:);%南北方向
NEU_xyz_GC=NEU_xyz(3,:);%高程方向
for i=1:1:length(Time)
sin_2piTime(i)=sin(2*pi*Time(i));
end
for j=1:1:length(Time)
cos_2piTime(j)=cos(2*pi*Time(j));
end
for m=1:1:length(Time)
sin_4piTime(m)=sin(4*pi*Time(m));
end
for n=1:1:length(Time)
cos_4piTime(n)=cos(4*pi*Time(n));
end
B=[E Time sin_2piTime' cos_2piTime' sin_4piTime' cos_4piTime'];%B矩阵
abcdef_NEU_xyz_NS=(inv(B'*B))*(B'*NEU_xyz_NS');%求南北方向参数abcdef的值
abcdef_NEU_xyz_WE=(inv(B'*B))*(B'*NEU_xyz_WE');%求东西方向参数abcdef的值
abcdef_NEU_xyz_GC=(inv(B'*B))*(B'*NEU_xyz_GC');%求高程方向参数abcdef的值

%求东西方向改正噪声坐标残差
subplot(3,1,1);
V_NEU_xyz_WE=(NEU_xyz_WE'- B*abcdef_NEU_xyz_WE)*1000;
plot(Time,V_NEU_xyz_WE,'.black')
ylabel('Latitude(mm)');
xlabel('Time');
hTit(1)=title;

3 GPS时间序列分析模型

GPS时间序列中蕴藏着很多有用信息,需要基于时间序列分析的原理与方法,目前主要介绍的模型有:功率谱分析、最大似然估计、小波分析及时空滤波法等常用的时间序列分析方法。

3.1功率谱分析

功率谱分析是一种采用傅里叶变换方法,将时间序列分解成若干不同频率范围内的振幅的形式,是一种从频域研究时间序列的有效方法。研究功率谱分析,可以获取时间序列的噪声类型,也可以获取时间序列的周期项和振幅,是一种比较好的分析GPS站点位置时间序列的方法。
GPS原始时间序列扣除拟合值后的噪声时间序列,可以用频谱定性分析噪声的类型。频谱分析是一种在频率域上分析信号的方法。噪声时间序列在频谱域上的功率谱可以使power law的形式表示
在这里插入图片描述

function[a,Pf,f]=Power_spectrum_analysis(t,st)
%This is a function using the FFT function to caculate a signal’s Fourier Translation
%Input is the time and the signal vectors ,the length of time must greater than 2
%Output is the frequency and the signal spectrum
t1=t(1);t2=t(end);
N=length(st);
Fs=N/(t2-t1);
window=boxcar(N); %矩形窗
[Pf,f]=periodogram(st,window,N,Fs); %直接法

%InP(f) = InP0 - aInf
%求解谱指数k和Po 

n=length(Pf);
m=length(f);
if n==m
     for i=1:n-1
        B(i,1)=1;
        B(i,2)=-log(f(i+1));
        L(i)=log(Pf(i+1));
     end
    a=inv(B'*B)*B'*L';
end
%求噪声残差项的功率谱
N=length(Time);
T=0;
for i=1;N
    T=T+Time(i+1)+Time(i);   %求周期T
end
anv_T=T/N;
FS=1/anv_T;

V_NEU_xyz_WE=NEU_xyz_WE'- B*abcdef_NEU_xyz_WE;%求东西方向噪声残差项的功率谱
[a1,Pf1,f1]=Power_spectrum_analysis(Time,V_NEU_xyz_WE)
figure
PX_GC=100000*Pf3;
F_GC=0.28*f3;
% subplot(3,1,3);
loglog(F_GC,PX_GC,'black')
 axis([0.08,100,0.00009,10]);
ylabel('power/(mm^2/cpy)');
xlabel('frequency/cpy)');
legend('Vertical');

在这里插入图片描述

3.2 最大似然估计(MLE)

最大似然法是一种非线性的最小二乘法,目的在于找到与时间序列最相近的模型参数。通过调整协方差矩阵使得似然函数取得最大值,即可得到与该时间序列最相近的噪声模型,这样就可以通过协方差矩阵估算出时间序列中的噪声振幅大小[13]。与频谱分析相比,最大似然估计法可以定量的计算噪声大小。
假设GPS站点单方向位置时间序列为:
在这里插入图片描述

3.3小波分析

小波分析方法是一种信号的“时间一频率”分析方法,它具有多分辨率分析的特点,并在时间与频率两域都具有表征信号特性的能力,而且时间窗的大小可以随着频率窗的变化而变化,借助于小波方法可以在某种程度上将不同特性的噪声进行分离与估计。小波多分辨分析可对GPS站点坐标时间序列的周期项进行分解,提取周年项和半周年项,因此,这种方法被称为周年数学滤波器和半周年数学滤波器。在这里插入图片描述

3.4 高程方向AR、ARMA模型

ARMA系列模型是研究时间序列的有效手段,ARMA模型从系统识别的角度研究只知系统输出时的系统特性。ARMA系列有AR, MA和ARMA模型之分。在高程时间序列中主要采用AR模型和ARMA模型建模。ARMA模型为:在这里插入图片描述

4 GPS坐标时间序列时空滤波法

GPS坐标时间序列中往往存在着一些共性的误差,通常将这些共性的误差称为共模误差(CME,为了提高GPS时间序列的精度,就需要做一些方法研究。关于GPS站点坐标时间序列中共模误差的提取方法有多种,目前主要应用主成分分析法(PCA)与( KLE)方法进行分析。

4.1 PCA方法

主成分分析(Principal Component Analysis)是现代数据分析的一个有效工具。 PCA把原始相关的观测数据重新组合,分解成一组互不相关的向量,在保持数据信息损失最小的前提下,通过线性转换将原始自变量中相关的维数消除,转换到低维向量空间;转换后的低维空间中各主分量是相互正交的,综合了原始数据的最大信息量,因此对数据分析结果不会带来太大的影响,且空间性比较好。既避免了法方程病态问题的出现,又能得到参数的精确估值;同时可以揭示隐藏在数据背后的一些规律及结构特征。但如果本地噪声较大,则会导致PCA无法准确地分辨出共模误差。
在这里插入图片描述设定一个闽值,当累积贡献率达到此阈值时,对应的前P个即为主模式分量。主成分实际上是空间站点的残差向量在相应特征向量方向上的投影,一组主成分反映了对应某时刻的残差向量在以特征向量方向表述的相应空间轴上的坐标。前P个主成分对应较大的特征值,即包含了对残差时间序方差的大部分贡献值,具有整个区域最多的信息,往往反映整个网的共同变化趋势。共模误差则由这前P个主成分确定。

%求解各测站之间的主成分,共模误差CME
%列出 New_Time_VGC 即高程方向 相关系数X_VGC
X_VGC=[BMCL_New_Time_VGC BRN2_New_Time_VGC CHLM_New_Time_VGC  DLPA_New_Time_VGC  DNGD_New_Time_VGC  GRHI_New_Time_VGC JMLA_New_Time_VGC  KKN4_New_Time_VGC  LHAZ_New_Time_VGC  NPGJ_New_Time_VGC  ODRE_New_Time_VGC  RMTE_New_Time_VGC  SMKT_New_Time_VGC  TPLJ_New_Time_VGC XZDX_New_Time_VGC XZGE_New_Time_VGC ];

%对高程方向的相关数据X_VGC进行标准化得到X_VGC_BZ
X_VGC_COV = cov(X_VGC);    %求协方差矩阵
[X_VGC_Xv , X_VGC_Xd] = eig(X_VGC_COV); %协方差矩阵对应的特征值与特征向量
X_VGC_GXL = X_VGC_Xd / sum(X_VGC_Xd);
X_VGC_GXL =( fliplr(X_VGC_GXL'))';

%高程方向的共模误差CME提取,要结合贡献率和特征值大于1的变量去选取
%根据X_VGC_tent大于1的结论可知,应该选取前4个变量x1,x2,x3,x4。
%提取主成分的方法是用特征向量矩阵乘以标准化后变量,这里所有变量都是标准化后的。
%     for j = 1:length(X_VGC_Xv)
%         for m = 1:length(X_VGC)
%             Y1_VGC(m,1)=0;
%             Y1_VGC(m,1) = Y1_VGC(m,1)+ X_VGC_Xv(j,1)* X_VGC(m,j);
%         end
%     end
Y1_VGC1(:,1) = X_VGC_Xv(1,1)* X_VGC(:,1);
Y1_VGC2(:,1) = X_VGC_Xv(2,1)* X_VGC(:,2);
Y1_VGC3(:,1) = X_VGC_Xv(3,1)* X_VGC(:,3);
Y1_VGC4(:,1) = X_VGC_Xv(4,1)* X_VGC(:,4);
Y1_VGC5(:,1) = X_VGC_Xv(5,1)* X_VGC(:,5);
Y1_VGC6(:,1) = X_VGC_Xv(6,1)* X_VGC(:,6);
Y1_VGC7(:,1) = X_VGC_Xv(7,1)* X_VGC(:,7);
Y1_VGC8(:,1) = X_VGC_Xv(8,1)* X_VGC(:,8);
Y1_VGC9(:,1) = X_VGC_Xv(9,1)* X_VGC(:,9);
Y1_VGC10(:,1) = X_VGC_Xv(10,1)* X_VGC(:,10);
Y1_VGC11(:,1) = X_VGC_Xv(11,1)* X_VGC(:,11);
Y1_VGC12(:,1) = X_VGC_Xv(12,1)* X_VGC(:,12);
Y1_VGC13(:,1) = X_VGC_Xv(13,1)* X_VGC(:,13);
Y1_VGC14(:,1) = X_VGC_Xv(14,1)* X_VGC(:,14);
Y1_VGC15(:,1) = X_VGC_Xv(15,1)* X_VGC(:,15);
Y1_VGC16(:,1) = X_VGC_Xv(16,1)* X_VGC(:,16);
Y1_VGC(:,1) = Y1_VGC1(:,1)+Y1_VGC2(:,1)+Y1_VGC3(:,1)+Y1_VGC4(:,1)+Y1_VGC5(:,1)+Y1_VGC6(:,1)+Y1_VGC7(:,1)+Y1_VGC8(:,1)+Y1_VGC9(:,1)+Y1_VGC10(:,1)+Y1_VGC11(:,1)+Y1_VGC12(:,1)+Y1_VGC13(:,1)+Y1_VGC14(:,1)+Y1_VGC15(:,1)+Y1_VGC16(:,1);

在这里插入图片描述
在这里插入图片描述

4.2 KLE方法

KLE与PCA类似,也是一种基于正交分解的方法,与PCA的不同的是其对残差时间序列矩阵的协方差矩阵进行了标准化,使用相关矩阵而不是协方差矩阵来计算正交向量基。KLE对本地噪声不敏感,能从含大量噪声的时间序列中提取出所需的信号,能较好的弥补PCA的不足之处。
针对PCA能很好的提取时间序列的空间特性,而KLE法可以从含有强烈本地噪声影响的时间序列中提取出连贯的信号,采取PCA与KLE相结合的PCA/KLE方法,对GPS坐标时间序列进行滤波,以去除GPS时间序列中的共模误差。假设区域内有n个测站,将每一个测站的时间序列按列的形式排开,可以表示为m x n的矩阵形式:
在这里插入图片描述

%KLE方法求共模误差
%求解各测站之间的主成分,共模误差CME

%列出 New_Time_VGC 即高程方向 相关系数X_VGC
X_VGC=[BMCL_New_Time_VGC BRN2_New_Time_VGC CHLM_New_Time_VGC  DLPA_New_Time_VGC  DNGD_New_Time_VGC  GRHI_New_Time_VGC JMLA_New_Time_VGC  KKN4_New_Time_VGC  LHAZ_New_Time_VGC  NPGJ_New_Time_VGC  ODRE_New_Time_VGC  RMTE_New_Time_VGC  SMKT_New_Time_VGC  TPLJ_New_Time_VGC XZDX_New_Time_VGC XZGE_New_Time_VGC ];

%进行主成分分析,求解X_VGC_pc正交单位化特征向量矩阵,X_VGC_la得分矩阵,X_VGC_tent特征值
 X_VGC_BZ = zscore(X_VGC);
R_X_VGC = corrcoef(X_VGC); %求高程方向的相关系数矩阵
[R_X_VGC_LG_v,R_X_VGC_LG_d] = eig (R_X_VGC); %相关系数矩阵对应的特征值与特征向量
R_X_VGC_LG_w = R_X_VGC_LG_d / sum(R_X_VGC_LG_d);%各主成分分量贡献率
R_X_VGC_LG_w = (fliplr(R_X_VGC_LG_w'))';

Y1_VGC1(:,1) = R_X_VGC_LG_v(1,1)* X_VGC(:,1);
Y1_VGC2(:,1) = R_X_VGC_LG_v(2,1)* X_VGC(:,2);
Y1_VGC3(:,1) = R_X_VGC_LG_v(3,1)* X_VGC(:,3);
Y1_VGC4(:,1) = R_X_VGC_LG_v(4,1)* X_VGC(:,4);
Y1_VGC5(:,1) = R_X_VGC_LG_v(5,1)* X_VGC(:,5);
Y1_VGC6(:,1) = R_X_VGC_LG_v(6,1)* X_VGC(:,6);
Y1_VGC7(:,1) = R_X_VGC_LG_v(7,1)* X_VGC(:,7);
Y1_VGC8(:,1) = R_X_VGC_LG_v(8,1)* X_VGC(:,8);
Y1_VGC9(:,1) = R_X_VGC_LG_v(9,1)* X_VGC(:,9);
Y1_VGC10(:,1) = R_X_VGC_LG_v(10,1)* X_VGC(:,10);
Y1_VGC11(:,1) = R_X_VGC_LG_v(11,1)* X_VGC(:,11);
Y1_VGC12(:,1) = R_X_VGC_LG_v(12,1)* X_VGC(:,12);
Y1_VGC13(:,1) = R_X_VGC_LG_v(13,1)* X_VGC(:,13);
Y1_VGC14(:,1) = R_X_VGC_LG_v(14,1)* X_VGC(:,14);
Y1_VGC15(:,1) = R_X_VGC_LG_v(15,1)* X_VGC(:,15);
Y1_VGC16(:,1) = R_X_VGC_LG_v(16,1)* X_VGC(:,16);
Y1_VGC(:,1) = Y1_VGC1(:,1)+Y1_VGC2(:,1)+Y1_VGC3(:,1)+Y1_VGC4(:,1)+Y1_VGC5(:,1)+Y1_VGC6(:,1)+Y1_VGC7(:,1)+Y1_VGC8(:,1)+Y1_VGC9(:,1)+Y1_VGC10(:,1)+Y1_VGC11(:,1)+Y1_VGC12(:,1)+Y1_VGC13(:,1)+Y1_VGC14(:,1)+Y1_VGC15(:,1)+Y1_VGC16(:,1);

在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!