ps_load_initial.m

来自「StaMps最新测试版」· M 代码 · 共 265 行

M
265
字号
function []=ps_load_initial()%PS_LOAD_INITIAL Initial load of PS files into matlab workspace%   PS_LOAD_INITIAL() loads various files and stores them%   in various workspaces. The version number, PSVER, is set to 1.%%   Andy Hooper, June 2006%  %   Change Log: %   06/2006 AH: Initialize day variable%   07/2006 AH: Fix error in la and bperp matrix calculation%   07/2006 AH: Add patch compatibility%   09/2006 AH: Store wrapped phase in separate workspace%   11/2007 AH: Change bperp to be the bperp at 0 m%   01/2008 AH: Selection of bperp files made more rigourous%NB IFGS assumed in ascending date orderfprintf('Loading data into matlab...\n')phname=['pscands.1.ph'];            % for each PS candidate, a float complex value for each ifgijname=['pscands.1.ij'];            % ID# Azimuth# Range# 1 line per PS candidatebperpname=['bperp.1.in'];           % in meters 1 line per ifgdayname=['day.1.in'];               % YYYYMMDD, 1 line per ifgmasterdayname=['master_day.1.in'];  % YYYYMMDDllname=['pscands.1.ll'];            % 2 float values (lon and lat) per PS candidatedaname=['pscands.1.da'];            % 1 float value per PS candidatehgtname=['pscands.1.hgt'];          % 1 float value per PS candidatelaname=['look_angle.1.in'];         % grid of look angle valuesheadingname=['heading.1.in'];       % satellite headinglambdaname=['lambda.1.in'];         % wavelengthcalname=['calamp.out'];             % amplitide calibrationswidthname=['width.txt'];            % width of interferogramslenname=['len.txt'];                % length of interferogramspsver=1;if ~exist(dayname,'file')    dayname= ['../',dayname];endday=load(dayname);year=floor(day/10000);month=floor((day-year*10000)/100);monthday=day-year*10000-month*100;slave_day=datenum(year,month,monthday);[slave_day,day_ix]=sort(slave_day);if ~exist(masterdayname,'file')    masterdayname= ['../',masterdayname];endmaster_day=load(masterdayname);master_day_yyyymmdd=master_day;year=floor(master_day/10000);month=floor((master_day-year*10000)/100);monthday=master_day-year*10000-month*100;master_day=datenum(year,month,monthday);master_ix=sum(slave_day<master_day)+1;day=[slave_day(1:master_ix-1);master_day;slave_day(master_ix:end)]; % insert master dayif ~exist(bperpname,'file')    bperpname= ['../',bperpname];endbperp=load(bperpname); bperp=bperp(day_ix);bperp=[bperp(1:master_ix-1);0;bperp(master_ix:end)]; % insert master-master bperp (zero)n_ifg=size(bperp,1); if ~exist(headingname,'file')    headingname= ['../',headingname];endheading=load(headingname);if isempty(heading)    error('heading.1.in is empty')endsetparm('heading',heading,1);if ~exist(lambdaname,'file')    lambdaname= ['../',lambdaname];endlambda=load(lambdaname);setparm('lambda',lambda,1);if ~exist(calname,'file')    calname= ['../',calname];endif exist(calname,'file')    [calfile,calconst]=textread(calname,'%s%f');    caldate=zeros(length(calfile),1);    for i = 1 : length(calfile)        aa=strread(calfile{i},'%s','delimiter','/');        bb=str2num(aa{end}(1:8));        if isempty(bb)            bb=str2num(aa{end-1}(1:8));        end        caldate(i)=bb;    end    not_master_ix=caldate~=master_day_yyyymmdd;    caldate=caldate(not_master_ix);    calconst=calconst(not_master_ix);    [Y,I]=sort(caldate);    calconst=calconst(I);else    calconst=ones(n_ifg-1,1);endij=load(ijname);n_ps=size(ij,1);fid=fopen(phname,'r');ph=zeros(n_ps,n_ifg-1,'single');byte_count=n_ps*2;for i=1:n_ifg-1    [ph_bit,byte_count]=fread(fid,[(n_ps)*2,1],'float');    ph_bit=single(ph_bit);    ph(:,i)=complex(ph_bit(1:2:end),ph_bit(2:2:end));end%fid=fopen(phname,'r');%ph=fread(fid,[(n_ifg-1)*2,inf],'float');%fclose(fid);%ph=single(ph');%ph=complex(ph(:,1:2:end),ph(:,2:2:end));ph=ph(:,day_ix);zero_ph=sum(ph==0,2);nonzero_ix=zero_ph<=1;       % if more than 1 phase is zero, drop node%n_ps=size(ph,1);ph=ph./repmat(calconst',n_ps,1);  % scale amplitudesph=[ph(:,1:master_ix-1),ones(n_ps,1),ph(:,master_ix:end)]; % insert zero phase master-master ifgfid=fopen(llname,'r');lonlat=fread(fid,[2,inf],'float');lonlat=lonlat';fclose(fid);ll0=(max(lonlat)+min(lonlat))/2;xy=llh2local(lonlat',ll0)*1000;xy=xy';sort_x=sortrows(xy,1);sort_y=sortrows(xy,2);n_pc=round(n_ps*0.001);bl=mean(sort_x(1:n_pc,:)); % bottom left cornertr=mean(sort_x(end-n_pc:end,:)); % top right cornerbr=mean(sort_y(1:n_pc,:)); % bottom right  cornertl=mean(sort_y(end-n_pc:end,:)); % top left cornertheta=(180-heading)*pi/180;if theta>pi    theta=theta-2*pi;endrotm=[cos(theta),sin(theta); -sin(theta),cos(theta)];xy=xy';xynew=rotm*xy; % rotate so that scene axes approx align with x=0 and y=0if max(xynew(1,:))-min(xynew(1,:))<max(xy(1,:))-min(xy(1,:)) &...   max(xynew(2,:))-min(xynew(2,:))<max(xy(2,:))-min(xy(2,:))    xy=xynew; % check that rotation is an improvement    disp(['Rotating by ',num2str(theta*180/pi),' degrees']);end        xy=single(xy');[dummy,sort_ix]=sortrows(xy,[2,1]); % sort in ascending y orderxy=xy(sort_ix,:);xy=[[1:n_ps]',xy];xy(:,2:3)=round(xy(:,2:3)*1000)/1000; % round to mmph=ph(sort_ix,:);ij=ij(sort_ix,:);ij(:,1)=1:n_ps;lonlat=lonlat(sort_ix,:);savename=['ps',num2str(psver)];save(savename,'ij','lonlat','xy','bperp','day','master_day','master_ix','n_ifg','n_ps','sort_ix','ll0','calconst','master_ix','day_ix');save psver psverphsavename=['ph',num2str(psver)];save(phsavename,'ph');if exist(daname,'file')  D_A=load(daname);  D_A=D_A(sort_ix);  dasavename=['da',num2str(psver)];  save(dasavename,'D_A');endif exist(hgtname,'file')    fid=fopen(hgtname,'r');    hgt=fread(fid,[1,inf],'float');    hgt=hgt';    hgt=hgt(sort_ix);    fclose(fid);    hgtsavename=['hgt',num2str(psver)];    save(hgtsavename,'hgt');endif ~exist(widthname,'file')    widthname= ['../',widthname];endwidth=load(widthname);if ~exist(lenname,'file')    lenname= ['../',lenname];endlen=load(lenname);[gridX,gridY]=meshgrid(linspace(0,width,50),linspace(0,len,50));if ~exist(laname,'file')    laname= ['../',laname];endif exist(laname,'file')    look_angle=load(laname);    la0=look_angle(1:2:end)*pi/180;    la0=reshape(la0,50,50)';    la1000=look_angle(2:2:end)*pi/180;    la1000=reshape(la1000,50,50)';    la0_ps=griddata(gridX,gridY,la0,ij(:,3),ij(:,2),'linear',{'QJ'});    la1000_ps=griddata(gridX,gridY,la1000,ij(:,3),ij(:,2),'linear',{'QJ'});    la=la0_ps+(la1000_ps-la0_ps).*hgt/1000;    lasavename=['la',num2str(psver)];    save(lasavename,'la');endupdir=0;bperpdir=dir('bperp_*.1.in');if isempty(bperpdir)    bperpdir=dir('../bperp_*.1.in');    updir=1;endbperp_mat=repmat(single(bperp([1:master_ix-1,master_ix+1:end]))',n_ps,1);if length(bperpdir)>0    i2=0;    for i=setdiff([1:n_ifg],master_ix);        i2=i2+1;        bperp_fname=['bperp_',datestr(day(i),'yyyymmdd'),'.1.in'];        if updir==1            bperp_fname=['../',bperp_fname];        end        bperp_grid=load(bperp_fname);%    for i=1:n_ifg-1;%        if updir==0%            bperp_grid=load(bperpdir(i).name);%        else%            bperp_grid=load(['../',bperpdir(i).name]);%        end        bp0=bperp_grid(1:2:end);        bp0=reshape(bp0,50,50)';        bp1000=bperp_grid(2:2:end);        bp1000=reshape(bp1000,50,50)';        bp0_ps=griddata(gridX,gridY,bp0,ij(:,3),ij(:,2),'linear',{'QJ'});        %bp1000_ps=griddata(gridX,gridY,bp1000,ij(:,3),ij(:,2),'linear',{'QJ'});        %bperp_mat(:,i)=bp0_ps+(bp1000_ps-bp0_ps).*hgt/1000;        bperp_mat(:,i2)=bp0_ps;    endendbpsavename=['bp',num2str(psver)];save(bpsavename,'bperp_mat');end % end-if

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?