MATLAB解析GPS数据程序Word文档下载推荐.docx
- 文档编号:4525072
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:19
- 大小:18.61KB
MATLAB解析GPS数据程序Word文档下载推荐.docx
《MATLAB解析GPS数据程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《MATLAB解析GPS数据程序Word文档下载推荐.docx(19页珍藏版)》请在冰点文库上搜索。
%%设置参数
%delete(instrfindall);
%串口打开失败时使用此句
%delete(s);
clears%串口打开失败时使用此句
serial3=serial('
COM3'
);
%串口设置
serial3.BytesAvailableFcnMode='
byte'
%serial3.InputBufferSize=38400;
%输出波特率
serial3.BaudRate=BaudRate;
%读入波特率
%serial3.OutputBufferSize=1024;
serial3.BytesAvailableFcnCount=BytesAvailableFcnCount;
serial3.ReadAsyncMode='
continuous'
serial3.Terminator=Terminator;
%%打开串口
count_opentimes=1;
whilecontains(serial3.status,'
closed'
)>
0&
&
count_opentimes<
num_MaxTry
fopen(serial3);
%打开串口
count_opentimes=count_opentimes+1;
end
ifcontains(serial3.status,'
open'
)<
1
disp('
opencomfailed!
'
return
%%读取并处理数据
%初始化
GPS_Data=GPS_Init();
while(num_execute>
0)
GPS_DataStrs=fread(serial3,num_SingleRead,'
char'
%一次读出10个字符
GPS_DataStrs=reshape(GPS_DataStrs,1,[]);
GPS_DataStrs=split_str2strs(GPS_DataStrs);
GPS_Data_tmp=get_GPS_specificData(GPS_DataStrs);
GPS_Data=Updata_GPU_Data(GPS_Data,GPS_Data_tmp);
show_GPS_Data(GPS_Data);
pause(Timedelay);
%延时
num_execute=num_execute-1;
%fprintf(s,'
abcd'
%给串口的发送数据
%fscanf(s);
%从串口的接收缓存读数据
%%关闭串口并删除相关数据
关闭串口fclose(serial3);
%.
delete(serial3);
clearserial3
%%
%将字符串根据'
\r\n'
划分成多个子字符串,同时去掉首尾无用的残余字符串
functionout_strs=split_str2strs(StrData)
ifcontains(class(StrData),'
)
uint8(StrData);
end
record=get_pos_enterflag(StrData);
ifStrData
(1)==uint8('
$'
)%开头为'
的情况
flag_start=1;
else
ifsize(record,2)>
0
flag_start=record
(1)+2;
out_strs=cell(0,0);
ifStrData(end)==13
flag_end=length(StrData)-1;
flag_end=record(end)-1;
ifflag_start>
=flag_end
StrData=StrData(flag_start:
flag_end);
%截取有效数据,方便下面划分子字符串
num_strs=size(record,2)+1;
out_strs=cell(num_strs,1);
ifnum_strs>
out_strs{1,1}=char(StrData(1:
record
(1)-1));
ifnum_strs==2
out_strs{num_strs,1}=char(StrData(record
(1)+2:
end));
fori=2:
num_strs-1
out_strs{i,1}=char(StrData(record(i-1)+2:
record(i)-1));
out_strs{num_strs,1}=char(StrData(record(i)+2:
out_strs{1,1}=char(StrData);
%得到字符串中'
在字符串中的位置(实际为'
\r'
的位置)
functionrecord=get_pos_enterflag(data)
record=[];
%记录回车符号位置
forii=1:
length(data)-1
ifdata(ii)==13
ifdata(ii+1)==10
record=[record,ii];
ii=ii+1;
%得到具体GPS结构体数据
functionGPS_Data_tmp=get_GPS_specificData(StrsData)
GPS_Data_tmp=[];
num_str=size(StrsData,1);
fori=1:
num_str
str_tab=StrsData{i,1};
ifcontains(str_tab,'
GGA'
GPS_Data_tmp=GNGGA(str_tab);
elseifcontains(str_tab,'
GSA'
GPS_Data_tmp=GNGSA(str_tab);
GSV'
GPS_Data_tmp=GNGSV(str_tab);
RMC'
GPS_Data_tmp=GNRMC(str_tab);
VTG'
GPS_Data_tmp=GNVTG(str_tab);
GLL'
GPS_Data_tmp=GNGLL(str_tab);
%GPS字符串解析
functionGPS_Data_tmp=GNGGA(str_tab)
index=strfind(str_tab,'
'
count=1;
Time=str_tab(index(count)+1:
index(count+1)-1);
count=count+1;
Latitude=str_tab(index(count)+1:
GPS_Data_tmp.LatitudeDir=str_tab(index(count)+1:
Longitude=str_tab(index(count)+1:
GPS_Data_tmp.LongitudeDir=str_tab(index(count)+1:
GPS_Data_tmp.GPSState=str_tab(index(count)+1:
GPS_Data_tmp.SatelliteNum=str_tab(index(count)+1:
GPS_Data_tmp.HDOP=str_tab(index(count)+1:
GPS_Data_tmp.altitude=str_tab(index(count)+1:
%other=str_tab(index(count)+1:
end);
%进一步处理
GPS_Data_tmp.Time.hour=Time(1:
2);
GPS_Data_tmp.Time.min=Time(3:
4);
GPS_Data_tmp.Time.sec=Time(5:
6);
GPS_Data_tmp.Time.millisec=Time(8:
10);
GPS_Data_tmp.Latitude.degree=Latitude(1:
%纬度
GPS_Data_tmp.Latitude.min=Latitude(3:
tmp=str2double(Latitude(6:
9));
tmp=tmp*6/1000;
%tmp=tmp/10000*60;
GPS_Data_tmp.Latitude.sec=num2str(floor(tmp));
GPS_Data_tmp.Latitude.millisec=num2str((tmp-floor(tmp))*10000);
GPS_Data_tmp.Longitude.degree=Longitude(1:
3);
%经度
GPS_Data_tmp.Longitude.min=Longitude(4:
5);
tmp=str2double(Longitude(7:
10));
GPS_Data_tmp.Longitude.sec=num2str(floor(tmp));
GPS_Data_tmp.Longitude.millisec=num2str((tmp-floor(tmp))*10000);
%UTC时间转换为北京时间
hour=GPS_Data_tmp.Time.hour;
ifstr2num(hour)+8>
=24
GPS_Data_tmp.Time.hour=num2str(str2num(hour)+8-24);
GPS_Data_tmp.Time.hour=num2str(str2num(hour)+8);
functionGPS_Data_tmp=GNGSA(str_tab)
GPS_Data_tmp.LocationMode=str_tab(index(count)+1:
GPS_Data_tmp.CurState=str_tab(index(count)+1:
GPS_Data_tmp.PRN=str_tab(index(count)+1:
GPS_Data_tmp.PDOP=str_tab(index(count)+1:
GPS_Data_tmp.VDOP=str_tab(index(count)+1:
functionGPS_Data_tmp=GNGSV(str_tab)
%此语句为与卫星有关的信息(包括卫星方位,卫星编号)
%暂时用不着,不处理
functionGPS_Data_tmp=GNRMC(str_tab)
GPS_Data_tmp.LocationState=str_tab(index(count)+1:
GPS_Data_tmp.speed=str_tab(index(count)+1:
GPS_Data_tmp.TrueDir=str_tab(index(count)+1:
Date=str_tab(index(count)+1:
GPS_Data_tmp.MagneticAngle=str_tab(index(count)+1:
GPS_Data_tmp.MagneticDir=str_tab(index(count)+1:
GPS_Data_tmp.DATE.day=Date(1:
GPS_Data_tmp.DATE.month=Date(3:
GPS_Data_tmp.DATE.year=Date(5:
functionGPS_Data_tmp=GNVTG(str_tab)
GPS_Data_tmp.ReferenceTrueDir=str_tab(index(count)+1:
GPS_Data_tmp.RelativeDir=str_tab(index(count)+1:
GPS_Data_tmp.ReferenceRelativeDir=str_tab(index(count)+1:
GPS_Data_tmp.step=str_tab(index(count)+1:
GPS_Data_tmp.stepflag=str_tab(index(count)+1:
GPS_Data_tmp.velocity=str_tab(index(count)+1:
functionGPS_Data_tmp=GNGLL(str_tab)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 解析 GPS 数据 程序