基于广播星历的北斗定位解算原理(基于C语言和MATLAB实现)_卫星位置解算

本文介绍了基于C语言的北斗定位解算原理,通过解析广播星历来计算卫星位置。文中提供了相关代码示例,涉及时间转换、周数计算等关键步骤。同时,还提及了资料获取方式,鼓励读者加入技术交流群共同进步。
摘要由CSDN通过智能技术生成

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

typedef struct{
char PRN[10];
int year;
int month;
int day;
int hour;
int minute;
double second;
}TIME;

/*--------------------------------------------------------------------------------
get the BDS time
*/

int GetsBDSTime(char PRN[10],int year,int month,int day,int hour,int minute,double second,int WeekNum,double SecondOfWeek){
int DayOfYear = 0;
int DayOfMonth = 0;
// /
-------------------------------------
// year
//
for(int DayOfBDS = 2006;DayOfBDS < year;DayOfBDS ++){
if(((DayOfBDS % 4 == 0)&&(DayOfBDS % 100 != 0))||(DayOfBDS % 400 == 0)){
DayOfYear += 366;
}
else{
DayOfYear += 365;
}
}
// /
--------------------------------------
// month
//
for(int DayOfBDS = 1;DayOfBDS < month;DayOfBDS ++){
if((DayOfBDS == 1)||(DayOfBDS == 3)||(DayOfBDS == 5)||(DayOfBDS == 7)||(DayOfBDS == 8)||(DayOfBDS == 10)||(DayOfBDS == 12)){
DayOfMonth += 31;
}
else if((DayOfBDS == 4)||(DayOfBDS == 6)||(DayOfBDS == 9)||(DayOfBDS == 11)){
DayOfMonth += 30;
}
else{
if(((year % 4 == 0)&&(year % 100 != 0))||(year % 400 == 0)){
DayOfMonth += 29;
}
else{
DayOfMonth += 28;
}
}
}
int VariableDay = 0;
int ExtraDay = 0;
VariableDay = DayOfYear + DayOfMonth + day - 1; //总天数
WeekNum = VariableDay/7; //总周数
ExtraDay = VariableDay - (7
(VariableDay/7));//VariableDay%7
*SecondOfWeek = (double)((ExtraDay * 86400) + (hour * 3600) + (minute * 60) + second);
//return DayOfBDS;
}

int main(){

TIME time;
/*-------------------------------------------------------------------------------------
parameters
*/
/*-----------------------------------------------
timing
*/
double	a0	=	0;				//钟差 
double	a1	=	0;				//钟速 
double	a2	=	0;				//钟飘 
double	toe	=	0;				//星历表参考历元 
double	toc	=	0;				//参考时间 
/*-----------------------------------------------
Kepler orbit parameters
*/
double	i0		=	0;			//轨道倾角 
double	e		=	0;			//轨道偏心率 
double	OMEGA	=	0;			//Ω升交点赤经 
double	omega	=	0;			//w近地点角距 
double	M0		=	0;			//M0toe时刻的平近点角 
double	sqrt_a	=	0;			//轨道长半径的平方根 
/*-----------------------------------------------
perturbation parameters
*/
double	OMEGADOT=	0;			//升交点赤经变化率 
double	IDOT	=	0;			//轨道倾角变化率 
double	Cuc		=	0;			//纬度幅角的余弦调和项 
double	Cic		=	0;			//轨道倾角的余弦调和项 
double	Crc		=	0;			//轨道半径的余弦调和项 
double	Cus		=	0;			//纬度幅角的正弦调和项 
double	Cis		=	0;			//轨道倾角的正弦调和项 
double	Crs		=	0;			//轨道半径的正弦调和项 
double	DELTA_n	=	0;			//平均角速度摄动量 
/*-----------------------------------------------
extra parameters
*/
double	AODE	=	0;

/*----------------------------------------------------------------------------------------
read file
*/
FILE *pfile			=	fopen("文件路径(相对路径或绝对路径均可)","r");
FILE *pfileWrite	=	fopen("文件路径(相对路径或绝对路径均可)","w");
if(!pfile || !pfileWrite){
	printf("/-----------------------------------------------------------------------------------------/\n");
	printf("\topen the file error!\n");
}
else{
	printf("/-----------------------------------------------------------------------------------------/\n");
	printf("\topen the file success!\n");
}
printf("/-----------------------------------------------------------------------------------------/\n");
/*---------------------------------------------
first line
*/
fscanf(pfile,"%s %d %d %d %d %d %lf %lf %lf %lf\n",&time.PRN,&time.year,&time.month,&time.day,&time.hour,&time.minute,&time.second,&a0,&a1,&a2);

// printf(“%s %d %d %d %d %d %.2lf %.15lf %.15lf %.15lf\n”,time.PRN,time.year,time.month,time.day,time.hour,time.minute,time.second,a0,a1,a2);
printf(“\t%s %d %d %d %d %d %.2lf %e\t%e\t%e\t\n”,time.PRN,time.year,time.month,time.day,time.hour,time.minute,time.second,a0,a1,a2);
/*----------------------------------------------
second line
/
fscanf(pfile,“%lf %lf %lf %lf\n”,&AODE,&Crs,&DELTA_n,&M0);
// printf(" %.15lf %.15lf %.15lf %.15lf\n",AODE,Crs,DELTA_n,M0);
printf(“\t %e %e\t%e\t%e\t\n”,AODE,Crs,DELTA_n,M0);
/
----------------------------------------------
third line
/
fscanf(pfile,“%lf %lf %lf %lf\n”,&Cuc,&e,&Cus,&sqrt_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值