基于Matlab读取标准RINEX格式的GPS星历数据
基于Matlab读取标准RINEX格式的GPS星历数据,采用Matlab直接读取Rinex文件张妮,等基于 Matlab读取标准 RINEX格式的GPS星历数据navdata(i). day str2num(line(10: 12));Le Edit yie seb finds Helpnavdata(i). hour=str2num (line(13: 15));navdata(i). minute str2num(line(16: 18))navdata (i).second str2num (line(19: 22));navdata(i). af0= str2num(line(23: 41))2:s10122-0041.4e012]【5.917e012]t30e95a-012navdata(i). afl str2num (line(42: 60));4.480-00navdata(i). af2 str2num (line(61: 79));4.600T+00619.8348←[6.419e007line fgetl(fid); %o second linem…2107007]navdata(i). aode str2num(line(4: 22))205-00【--007[7.2643c0090.9161【0.922】navdata().crs str2num(line(23: 41))navdata (i).dn= str2num(line(42: 60))图3读取星历数据结果navdata(i) Anomaly str2num (line(61: 79))Fig 3 Reading result of ephemeris dat4)关闭文件 status= fclose(fid)。骤,利用 Matlab矩阵的计算优势,很方便地计算不同时刻卫22星历数据的读取星的坐标,此外,还可方便查看卫星导航表层信息,判断导航星历数据的读取采用结构体数组显示的相关命令读取,数据的质量。若要获取某个卫星的相关参数可输入如示例命令:>>navdata(1)。获取结果如图2所示,为1号卫星参数读取结果3结论利用 Matlab以矩阵为单位进行计算的优势对 RINEX文件进行读取,较其他语言简单易行,结果精确,程序可移植性好,便于后续数据处理,同时还可利用 Matlab的仿真功能,实现卫星动态变化的实时模拟afl:1.47T9e-012参考文献:[1]陈东银,刘立龙,陈雷.GPS导航定位技术中面向对象读取 RINEX格式数据!测绘与空间地理信,2009(6):41-43.chen DorInCHen Lei. An ohmethod of reading rineX formatdat in GPS navigation tech-图21号卫星参数读取结果nology [J]. Geomatics and Spatial Information TechnologyFig. 2 Reading result of parameter of satliete NO.2009(6):41-43也可利用 Matlab元包数组,将数据存放并显示出来,具|2 I Gurtner W. RINEX: The receiver independent exchange for体实现代码如下mat: Version 2.10[M] Canada: Astronomical Institute UniverFN=fieldnamesnavdata)sity of Berne, 2002size=size(FN)3]孟广祥,郭标明.CPS接收机(OEM)二进制文件向 RINEXnavdata year;文件的转换[,测绘工程,2009(10:18-21.nav data=cell(oh+1);MENG Guang-xiang. Guo Biao-ming. The transformationsIzefrom GPS receiver (OEM) binary data to RINEX file[J]. Enfor i= 2: noph +1gineering of Surveyying and Mapping, 2009(10): 18-21onavcell=char(navdata year)[4]陈桂珍,戴建军.GPS-OEM原始数据向 RINEX格式转换nav_data(n, 1= char(FN(n));的方法[测绘技术装备,2006(4):26-27nav_data n, i= navdata(i-1).(char(FN(n)))CHENG Gui-zhen, DAI Jian-jun. The transformation fromGPS-OEM orignal data to RINEX Format[J]. Surveying techendnical equipment, 2006(4): 26-27读取结果如图3所示。5]张志涌.精通 Matlab6.5[M]北京:北京航空航天大学出版采用 Matlab软件读 RINEX导航文件,可以将文件所有社,2004的数据用矩阵保存,数据的显示精度不仅不会影响计算精6 Chapman Stephen J. Matlab Programming for engineers [M度,而且可以随时修改,并可根据卫星坐标的计算公式和步北京:科学出版社,200325基于Ma1ab读取标准RINX格式的GPS星历数据旧万据WANFANG DATA文献链接作者张妮,王标标, ZHANG NI, WANG Biao-biao作者单位张妮, ZHANG Ni(西安工业大学北方信息工程学院,陕西,西安,710025),王标标, WANG Biaobiao(中国人民解放军96275部队,河南洛阳,471003)刊名:电子设计工程sTc英文刊名ELECTRONIC DESIGN ENGINEERING年,卷(期):2010,18(8参考文献(6条)1. Chapman Stephen J Matlab Programming for engineers 20032.张志涌精通 Matlab6.520043.陈桂珍;戴建军 GPS-OEM原始数据向 RINEX格式转换的方法[期刊论文]测绘技术装备2006(044.孟广祥;郭标明GPS接收机(OEM二进制文件向 RINEX文件的转换2009(10)5. Gurtner W RINEX: The receiver independent exchange format: Version 2.10 2002陈东银;刘立龙;陈雷GPS导航定位技术中面向对象读取 RINEX格式数据2009(06)本文链接http://d.g.wanfangdata.comcn/periodiCaldzsjgc201008007.aspx
- 2020-11-02下载
- 积分:1
内存乒乓缓存机制和消息分发机制的C代码实现
用C代码实现乒乓内存缓冲机制,具体实用价值,帮助您提高内存响应速度与及时数据的处理。unsigned long writeunsigned long greadunsigned long overflowST TWTMSG QUEUE:/ Helper macros for accessing Msg queues. *#define tWt QUEUE EMPty(a)(((g->write==(q)->gread)? 1: 0)#define twt_ QUeUe full(a)(((((q)->qwrite +1% TIMEWEIGHT TASKQUEUE SIZED)==(q)->gread)?1: 0)米 generate a Msg entity*正常返回消息体的指针,异常返回NULLT TWTMSG* generateMsg(tT-TWTMSG* pmSg=nULL,if(NULL =-(ptMsg malloc(sizeof(T TWTMSG)))return NULL;memset(ptMsg, 0, sizeof(T TWTMSG)return pmSg;destroy a Msgvoid destroy Msg(t TWTMSG ptMsgif(NULL ptMsg->pfDestroyMsg)pt Msg->pfDestroy Msg(ptMsg->pvMsg)if (NULL != pt Msg)free(pmSgfree a Msg Queuevoid freeTWTMsg Que(T TWTMSG QUEUE* ptMsgQif(NULL =ptMsg Afree(ptMsg Q);Init a Msg QT TWTMSG QUEUE* initTWTMsg QueoT TWTMSG QUEUE pmSg Q= NULlif (NULL ==(ptMsgQ malloc(sizeof(T_ TWTMSG QUeue)goto ErrRetmemset(ptMsgQ, 0, sizeof(T TWTMSG QUEUE))return pmSg Q;Errretprintf( initTWTMsg Que Fail! ")freeTWTMsgQue(ptMsg Q)return nullPop a pvMsg packet from a msg packet queues param g is the packet queue from which to pop the pbuf@return pointer to pvMsg packet if available, NULl otherwiseT TWTMSG* TWTMsg Get(T_ TWTMSG QUEUE aT TWTMSG*//*加锁if(TWT_ QUEUE_ EMPTY(a))iReturn a NUll pointer if the queue is emptypmSg=NULL;else is The queue is not empty so return the next frame from itand adjust the read pointer accordinglypmSg=g->pvMsglq >greadg->gread =((q->gread +1)% TIMEWEIGHT_TASKQUEUE_ SIZE)/*解锁return(pmSg);Push a pmSg packet onto a pvMsg packet queue@param p is the pmsg to push onto the packet queue@param g is the packet queue.W @return 0 if successful, -1 if q is fullnt TWTMsg Send(T tWTMSg*p, T TWTMSG QUEUE *qint ret/if(!TWT_ QUEUE FULL(al)iThe queue isn t full so we add the new frame at the currentw write position and move the write pointer.g->pvMsgla->write]=pg- >write =((q->qwrite+1)% TIMEWEIGHT TASKQUEUE SIZE;ret =oThe stack is full so we are throwing away this value. Keep trackof the number of times this happensg->overflow++ret =-1://*解锁return(ret)**米**米来米***来米*半米*米*半米*米求***半*米米求半**米求半**半求半和*米*//消息分发机制//*算法是//*正常返回0,出错返回-1水米米******水*米*水**米*半*水米米冰半**水水*水米米半米冰水*米水水*水*米水水extern int RecToFile MsgProc(T_ MSG_ REC2 FILE* ptMsg);int DispatchMsg(T TWTMSG *ptMsgitif(NULl = ptMsg goto ErrRet/*dispatch msg*/switch(ptMsg->en Msg Type)case TWT PINgPoNgBuff recRecTo File Msg Procl(TMSG_REC2FE) (pmSg->pMsg);/*处理消息*/destroy Msg( pmSg;/*消毁消息breakdefault.printf("Dispatch Msg Msgtype Error! n")break.return 0ErrRetprintf("Dispatch Msg Fail! ";return-1./*buff size*/#defineP| NGPONG_ BUFF BSIZE0X20000//10*1024*1024/*10M*/*ping pong buff*///chargacPINGBUFF[PINGPONG BUFF BSIZE]; /* Ping Buff*///chargacPONGBUFF[PINGPONG_ BUFF BSIZE] *Pong Buff*/水米米*********米*水**米*半*水米米水**冰水*水米米半半水半米冰水*米水水*水*米米//*释放 ping pong buff/必然成功//*无返回木***木*水****本**水*水水*水****本水**水水****水水***本***米*水void Destroy Ping Pong Butt(T PINGPONGBUFF USE DES ptPing Pong Butt)nLoopif (NULL = pt Ping pong buffreturnfor (nLoop=0; nLooptIng BuffUse[nLoop]. pcHeadAddr)free(ptPing Pong ->t Ping BuffUse[nLoop]. pcHeadAddr)free(pt Ping pong Buff)/初始化 ping pong buff返回 pign pong buff的描述指针//*正常返回0,出错返回-1水水水水水水水水水木水木水水水水水木水木水水水水水水水水本水水水水水水水水水本水水水水水水水水水水水水水T PINGPONGBUFF USE DES InitPing Pong Buff(unsigned int n BuffSizeT PINGPONGBUFF USE DES* ptBuffDes=NULLintnLoop/*获取buf描述*if NULL==(ptBuffDes=malloc(sizeof(T PINGPONGBUFF USE DES))))goto ErrRetmemset(pt BuffDes, 0, sizeof(T_PINGPONGBUFF USE_ DES));/*分别初始化ping和pong*/for(nLoop=0; nLooptIng BuffUsenLoop pcHeadAddr =malloc n BuffSize))goto Err Ret;ptBuffDes->tIng BuffUselnLoop] nBuffSize nBuffsizeptBuffDes->tPing BuffUse[nLoop]. oFfsetptBuffDes->tPing BuffUsenLoop) eUseStatus-=BUFF WRITEABLE;pt BuffDes->eCurUseIDBUFF PINGreturn pt BuffDesErrretprintf("lnitPing Pong Buff Fail!");DestroyIng Pong Buff(pt BuffDes)turn null平**米**米*米***来米米*米*米*半米*米米米来*半米平**米米求*来*半求半来*米求*和*米*/*Reset ping pong buff//*正常返回0,出错返回-1米米米米水冰米*米米水**米米冰*米水米米米米水米水*水米米来米米x米来米米水冰来来宋来水米来米来冰#define ResetBuffUse(ptBuffuse)pt BuffUse->oFfset0pt BuffUse->eUseStatus BUFF WRITEABLEgenerate a file rec msg*正常返回消息体的指针,异常返回NULLT_MSG_REC2lGK SenFRMSB(T_BUFF_USE_DES *ptBuffUse, REC_FILE_DESLIST *ptFileListRT MSG REC2FILE KE* ptRFMsg= NULL;if(NULL ==(ptRFMsg malloc(sizeof(T_ MSG REC2 FILE)return nUllptRFMsg- >pt BuffUse pt BuffUseptRFMsg->pt Filelist ptFilelist;return ptRFMsg
- 2020-12-03下载
- 积分:1