1、基于Matlab的TEQC绘图程序代码【实用文档】doc文档可直接使用可编辑,欢迎下载在 tab下新建一个m文件,将以下代码直接拷贝进去,即可执行。需要一个C生成的lt文件作为参数fctio out=tecplo(file);%读取TEQ生成的Plot文件,绘制数据图表,支持Copact、Comt2、Cmpct格式选取一个TQ的lt文件% 格式说明 。n1 载波 L1的信噪比 Signal to nise ratio (/N) % 。n2 载波的信噪比 nalto noe rato (/N) Carier L2 iod *.d12d21 电离层延迟观测值变化率(米秒)eiviv of ioos
2、phric dlayosevable (m) 。o 。i .i2电离层延迟观测值(米)Ionosphr delayobevabe () *。p1。m12 载波L的多路径误差 Mulit Crrier L% *。mp2 *.m2载波L2的多路径误差 Mltipth Crier L2% *zi 卫星方位角() atelite azimtal data (degrees)% .ele 卫星高度角() ali levaodata (degre) nargi=0 filen,p=ugetie(*n;*.s;.iod;ion;*。p1;。p;azi;*。ele;i2;*i21;.m12;m21;*.d2;
3、*d21,。. 请选择TEC报告文件:);el a,len,ext=filas(ies); pah=path ; ilenfie ex;end读取这个文件filechar(filen);按行读取文件至数组AA=imprdata(athfle,t);定义AT,存放卫星数据GPS有2颗卫星,存放序号1-3,GLONASS有32颗卫星,存放序号3364,BEIDOU有5颗卫星,存放序号6599SA(:ength(A),1:9)=NN;sats(1:legth(A),1:99)NaN;%存放采样时间,单位秒ec(1:lngh(A))=NaN;%读取文件的第一行fllxA1;判断是哪种格式sitchfl
4、elx ae COPC %读取数据采样间隔 t_s=cha((3); 读取开始时间 mjl=chr(A(4)); %读取数据采样间隔 AM=str2nm(t_amp(max(id(tsmp= )):ed); 读取数据采样开始时间 MJL_START=sr2u(jl(m(fid(mjl= ):end); %转成时间序列数字,dte seralnumber,从0000年月1日时分秒开始计算的十进制天数 MJD_ART=MJL_STAR+678941999941; %i为行号 n1;=5; cas OMPACT2 %读取数据采用间隔 _smp=char(A(2)); 读取开始时间 jlcar((3)
5、); %读取数据采样间隔 TSMPstr2um(tsmp(max(fin(t_ap= )):end)); 读取数据采样开始时间 LSTARTs2nm(ml(ma(fd(mj= )):nd); %转成时间序列数字,dteserial number,从000年1月1日0时0分0秒开始计算的十进制天数 MJD_SART=ML_SART+68941。9999741; n=;i=4; ase CMAT 读取开始时间 _start=char(A()); t_tat = deblank(_rt); s = spitr(_str,6); %t_sartme=char(s)年har(3) 月 ch(s4) 日
6、har(s5) 时 cha(s) 分 nu2str(t2num(h(s7)),02d) 秒 ; %获取采样的开始时间,21,12,7,0,05,55 t_s_ie=srnu(char(s2), st2num(har(3),tr2num(char(s4)),r2um(car(s)),tr2num(char(s6),str2nu(har(s)); n=;i=3; oterwie disp(数据格式存在问题); etnend=1;=;satsstnum(Ai);snggfen=sre(file,_,);%生成进度条h=waibar(0,正在读取数据,请稍等cha(snyin);hililenth(A
7、); watbar(i/eth(A),);drwnow %读取卫星编号数据行 采样时间 卫星数量 卫星编号 CAPT3 satbhr=char(A()); =slitsr(satbhstr,*,); %如果卫星编号数据为0,说明数据缺失,退出本函数 if ttm(sabstr)=0 dp (数据为空!); loe(h); tur ed switch ilelx caseCOMPACT3 %记录采样时间,单位秒 tse()st2nu(s1); s2=1 如果为-1,使用上次的卫星编号行 sabhstroldstb; = splitsr(atbhsr,32); ele olatbh=sats; e
8、 获取当前卫星数量 satcnt=tr2num(s2); ca OMPC,COMPACT 记录采样时间,单位秒 sec()(-)T_SAMP; i1=1 如果为1,使用上次的卫星编号行 stbt=dsth; s splitst(satbhstr,*,32); ele lath=sbhstr; en 获取当前卫星数量 satcoun=strnum(s1); end %读取卫星数据行 sattastr=char(A(i+)); stasittr(sdatastr,,32); for=3:tcount2 sichfilelx caseCOMPACT 如果是COMPACT格式,卫星编号前面没有字母,默
9、认是GPS卫星,在前面增加字符G satbh= char(sk1); aCMPACT2 如果是COPACT2格式,卫星编号行第个数据开始是卫星编号 satbh=char(sk-); cse COMPC3 如果是COMACT格式,卫星编号行第个数据开始是卫星编号 sthchar(sk); end sitch satb(1); cs %如果是GPS卫星,获得与编号对应的存储序号,范围12 id=num(atb(:3)); cse R %如果是GLNASS卫星,获得与编号对应的存储序号,范围33-64 ix=2+tr2um(abh(:3); cse %如果是EIDOU卫星,获得与编号对应的存储序号,
10、范围6599 index=4+sr2num(satb(:3)); ohrise 其他情况,获得与编号对应的存储序号,范围-2 index=t2num(atbh(2:3); e %switch 获得对应的卫星数据 sdatasr=char(sdak-); 如果卫星数据不是数值型,用0替代 if semt(sr2num(sdaastr)=1 dtastr0.00; nd %将卫星数据存入ST数组的对应位置 SAT(n,indx)=str2um(atast); fo n=n+1; %根据数据文件结构,一行是卫星编号,下一行就是对应的卫星数据 %程序一次读取2行数据 =i+2;end whie数据读取
11、完毕,关闭进度条ose(h);获取已使用的卫星编号,返回给s_sat_b=getatbh(SA);增加最后一个结束字符sat_bh_tempsa nd;tbhesat_bh_tem;%删去所有都为NaN值的列,返回给s_atast_dt=elnanol(SAT);%删去所有NN值的采样时间列t_seonds=denancol(tsec);删去所有都为NaN值的行,返回sa_datasa_datasdelnanro(sat_ata);增加一个n列row,co=siz(sat_dats);bb(:ro,1)aN;satats=sat_datas bb;将含有NN值的数据替换为0,返回给s_a%s_
12、ata=repna20(s_data);%将采样时间转成顺序日期serl dateumberswitchfiel seCOPAT,COMAT2 t_s_jd_timeMJD_RT; case COMCT ts_jd_ti=aten(s_ime);enfor i1:nth(tscon) 将每次采样时间转换成相应的顺序日期 t_jd_time(i)=_sdtim+t_secods(i)/0/60/4;n%绘制图表+根据不同的文件类型,设置坐标轴的范围typ,maxy,min=getilype(fie);figure;ox on;ho nrow,cl=sie(st_daas);%绘制渐变彩色图pco
13、lor(t_jd_time,1:col,sat_ata);set(gc,rnder,zbuffer);shadin flatset(ga,xtilbel,tjd_tme);set(gc,xl,t_j_time(1)t_j_te(end))%_start_timest_tat : t_start_:t_tars;dateaxis(,3)cr(v,minmaxy,tye);se(gca,yl, col1)set(ga,yick,1。5:1:col+.5)t(ca,ytklabel,st_bh_ed);st(gca,fose,);colrap(fipud(je);axi(miny axy);t_en
14、d_ime=cal2e(t_time,tsecods(nd));xlabe(dtestr(tdtme()) |- 采样间隔: num2r(t_ecnds(2)t_secon() 秒- astr(t_jd_e(ed)ylabel(卫星编号)imestr=ses2ms(lnh(sa);=tl(TEQC 报告文件: srp(file,_,-));set(T,fntsize,)%out.(ile(end-:end))st;ou._smp=_AP;out。Stat=daestr(t_j_time(1);utStptestr(t_jd_ime(end));+%以下是本函数中所使用的一些相关函数+%+uct
15、ion s=pltstr(st,slt,nu);%用指定分隔符分隔字符串函数strnae 0 2010-006 3 Qt BKB;表示特殊分隔符回车、空格、换行、制表符等%nu表示分隔字符串的个数sti=cll(num,1);inex=1;tep;i lt=* %特殊分隔符 for =1:length(tr) isspac(sr(i) if isempy(tem)=fale sringndextemp; indxnde; temp=; nd else te=emp,s(i); en endel %常规分隔符 fo i=:length(st) ifstr(i)=spit if empty(tem
16、p)=false stringindetemp; inex=id+1; temp=; end else tem=te,str(i); en enedif iemy(emp)=als tringindex=tp;edstrn;%+functin B=dlnanc(A);%删除矩阵中所有值都是nan的列xy=sze(A);f i=y:-1:1 if al(inan(A(:,))= A(:,i)=; enedBA;+funcion =delnanrow();删除矩阵中所有值都是an的行 =size(A);fr i:-1:1 ifall(isna(A(,:)=1 (i,:)=; endendB=;%+
17、funcionB=repan20(data);%将矩阵中的NAN值用0替代ats,featurs=size(data); fo k=1:eat for i1:ata ifisnan(daa(,))=1 data(i,k)=; ed endndB=data;+fnctionsatbh=getsatb(satata);%获取卫星数据中的卫星编号,返回一个字符串数组scll(32,);tep=;inex=; for i=1:99 f ll(isnn(atdata(:,i)1 switch 32 a tempG,um2str(i,02); case1 ii tmp=C,numstr(i-64,02d)
18、; else te=R,nums(i2,02d); n ed snd=te; idex=index+1; ed en i de1 sbs(1:index); ese sa=; nd+ FUNCTION: G FLETYP INFO +functin t,xy,miny=gtietpe(tefil);根据文件类型,设置坐标轴的范围pah,me,ext,ve=fieprts(tql);sthex cse 。s1 %uSignalo noie rato/ L1; ut=L1载波上的信噪比(dBHz); may=60; iny15; ase 。n2 %ut=Signal toie rati /N L2
19、; out=2载波上的信噪比(dBHz); maxy=0; min=5; cse .mp1,。m12 =Multih1; out1多路径观测值; mxy=; miny; ca p2,。m21 %out=Multipath 2; ot=2多路径观测值; mxy=; miny=1; cse .d,d12,d21 o=erivative ofionsherc dlay obrvable (ms); ou=电离层延迟观测值变化率(米/秒); mxy=; mny=-; cas 。in,.i2,i21 maxy2; miy=-; out=Inshecdlabserable (m); out=电离层延迟观测
20、值(米); case 。ee maxy=; miny=0; ut=Stellevato daa; ot=卫星高度角(); ase .a maxy=; in=-180; outStllt zmuthalta; out=卫星方位角(); otrwie disp(Somethings wrng!)nd FUNCTI: PLACEA ODIIED COLORBAR+uction CBar(c,rane,label);% 。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.% C =ca(loc,rng,lbel) ace acoobar : oc = v i vertcal or
21、h in horionta poiion in crrent fgure scaled betwen:% rnge = min maxwth a: lab = stig。% fonize i dcd to 10 adwdth oba i alf dfaut.% Exampl: ,Y,Zpeaks(5); ranemn(mi(Z) ma(mx(Z);% color(X,Y,); cbr(,rng,Elevn (m)% .。.。.。.。.。.。.。.。.。caxi(rang(1)rang());switch lc cse v Colorar(erti); et(,lm,range(1) range
22、(2); PO=gt(B,piion); st(CB,poition,OS() POS(2) 0。03 ()); s(B,fsize,8); set(ge(CB,ylabel),string,lae); et(CB,box,on) cse h Bcolrbar(horizonal); (CB,xm,rang(1)range(2)); POSget(CB,positin); set(CB,ption,(1) POS(2) OS()0。3); set(,ontsze,); st(get(CB,xlbel),strig,abel)ed+funin d=a2jd(al)% l2jd1将公历年月日时分秒
23、转换到儒略日。 jd=ca2jd(ca) 返回儒略日% c:1矩阵,6列分别为年月日时分秒。构造cal时可以省略末尾的0% 公元2年10月4日24:00点之前使用儒略历,公元5年10月15日00:00点之后使用公历i lengh(cal) 6al(6)=0;endea=al(1);oth=ca();ay=l(3)(ca(4)*360+cal(5)6l()/8600; ya + 400; 41 C. ia ceturyyer and also aeap yar. if( er )y y+1;% e e thatthre i nyea A。endoh;f( m = ) Jnuay nd Febru
24、ar omeaferDecembr。m m2; y =y 1;ende=foor(0.6 * (m+1);afor(y/0); nefceture 教皇格雷戈里十三世于152年2月日以教皇训令颁布,将1582年10月5日至14抹掉。1年月日过完后第二天是10月15日( year1582 )(yar=182mth10)(year=1582 onh=0a15)b -3;eleb = fr((4) - a); % nmber of er yeartha ae not lapyearsndc=foor(5.2*y); % Juian calendaryea d ap ar jd= b + + + da
25、y -2675;+functn cl=d2cl()% 从儒略日计算公历年月日时分秒 cad2cal(J) 返回的cal是6矩阵,6列分别为年月日时分秒%公元152年月4日24:00点之前使用儒略历,公元52年月1日00:00点之后使用公历if(J 17214235) 公元1月日0时B = 1;elsBC = 0;enstrt fom Julian rc, 4801 。C.if( 29160.5) befor 18.0.4。24:00iJuin calender0foor(J5);dd+5j0;ele% ae 1582。101。 00:00 is Greorinaledernumber cert
26、ur year ha ae otleap yean=oo(J2342015)/36524。2/4)+1;17。1.n2for(J278555.5)/36524.254)+1;103。1。n3=loor(J24109.)6545/4)+;1900。.0=n1+n2n3+10;dd=+0。5loor(j00。);j0=foor(j05);dj0=j0+08;yearceil(j03652)1;year=ear0-8;dayj0floo(yer03625);onthloor((day.6)/30)3;d=dound((mth3)*30);if nth2month=month1;yeryr+1;ene
27、ar=yerBC;se=oud(dd8400);hour=o(sec360);secsechor*360;minfloor(sc/0);sec=sec-n0;alyear,moth, dy, or, in, ec;%+unctin mdcal2jd(ca)c2mjd将公历年月日时分秒转换到简化儒略日。cal2md(al) 返回简化儒略日% cal:1x6矩阵,列分别为年月日时分秒。构造c时可以省略末尾的0j= cal2jd(cal);mj =jd - 20.5; UNCTION: SECONDTO HOUR, MIUTES nd SCONDS +functiontistscs2hms(SECS
28、)HORS=SES/60/;ours=flor(OUS);MINUTES=(HRShs)60;minus=flor(MINTES);secons=(MINUT-minues)*0;H=um2str(hour);M=nustr(is);Sum2tr(seconds);if secds10; S=0num2str(SS);else S=nu2t(SS);edif mnute10; MM= nm2(MM);lse MM=numst(M);endtest=HH: M : S;+ncton imstrcal2et(tstart,secs)%根据开始时间,时长(秒),计算结束时间_str 16矩阵,年,月,日,时,分,秒%secs时长,单位秒t_dayst_sart(4)/24+_sart(5)/6024+_start(6)60/0/24;t_e_day=ts_ayssecs/0/0/24;HOURt_e_days*2;hours=flo(HORS);