ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:18.61KB ,
资源ID:2443509      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2443509.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MATLAB解析GPS数据程序.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

MATLAB解析GPS数据程序.docx

1、MATLAB解析GPS数据程序% 注:本程序可直接在MATLAB 2017a 中运行 %该脚本文件用于学习GPS数据的读取,需要做其他用途请自行修改代码 %本脚本文件的前面几行代码是要设置的一些参数 %默认使用COM3(需视情况修改) %波特率设为GPS模块默认的38400 %下面为程序源码 clear num_execute = 100; % 执行次数 num_SingleRead = 150; %单次从串口读取的字节数(最好设置足够大(最低大概设为80),保证单次读取的数据包含一条完整的GPS数据) Timedelay = 0.2; % 用于延时读取串口数据 BaudRate = 3840

2、0; % 读取数据的波特率 Terminator = CR; num_MaxTry = 5; %打开串口的最多尝试次数 BytesAvailableFcnCount = 1000; % 设置参数 % delete(instrfindall); % 串口打开失败时使用此句 % delete(s);clear s % 串口打开失败时使用此句 serial3 = serial(COM3); % 串口设置 serial3.BytesAvailableFcnMode = byte; % serial3.InputBufferSize = 38400; % 输出波特率 serial3.BaudRate =

3、 BaudRate; % 读入波特率 % serial3.OutputBufferSize = 1024; serial3.BytesAvailableFcnCount = BytesAvailableFcnCount; serial3.ReadAsyncMode = continuous; serial3.Terminator = Terminator; % 打开串口 count_opentimes = 1; while contains(serial3.status,closed) 0 & count_opentimes num_MaxTry fopen(serial3); %打开串口 c

4、ount_opentimes = count_opentimes+1; end if contains(serial3.status,open) 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_Dat

5、a(GPS_Data,GPS_Data_tmp); show_GPS_Data(GPS_Data); pause(Timedelay); % 延时 num_execute = num_execute-1; end % fprintf(s,abcd); %给串口的发送数据 % fscanf(s); %从串口的接收缓存读数据 % 关闭串口并删除相关数据 关闭串口fclose(serial3); %delete(serial3); clear serial3 % %将字符串根据rn划分成多个子字符串,同时去掉首尾无用的残余字符串 function out_strs = split_str2strs(

6、StrData) if contains(class(StrData),char) uint8(StrData); end record = get_pos_enterflag(StrData); if StrData(1) = uint8($) %开头为$的情况 flag_start = 1; else if size(record,2) 0 flag_start = record(1)+2; else out_strs = cell(0,0); return end end if StrData(end) = 13 flag_end = length(StrData)-1; else if

7、 size(record,2) 0 flag_end = record(end)-1; end end if flag_start = flag_end out_strs = cell(0,0); return end StrData = StrData(flag_start:flag_end); % 截取有效数据,方便下面划分子字符串 record = get_pos_enterflag(StrData); num_strs = size(record,2)+1; out_strs = cell(num_strs,1); if num_strs 1 out_strs1,1 = char(St

8、rData(1:record(1)-1); if num_strs = 2 out_strsnum_strs,1 = char(StrData(record(1)+2:end); else for i = 2 : num_strs-1 out_strsi,1 = char(StrData(record(i-1)+2:record(i)-1); end out_strsnum_strs,1 = char(StrData(record(i)+2:end); end else out_strs1,1 = char(StrData); end % 得到字符串中rn在字符串中的位置(实际为r的位置) f

9、unction record = get_pos_enterflag(data) record = ; % 记录回车符号位置 for ii = 1 : length(data)-1 if data(ii) = 13 if data(ii+1) = 10 record = record,ii; ii = ii+1; end end end end end % 得到具体GPS结构体数据 function GPS_Data_tmp = get_GPS_specificData(StrsData) GPS_Data_tmp = ; num_str = size(StrsData,1); for i =

10、 1 : num_str str_tab = StrsDatai,1; if contains(str_tab,GGA) 0 GPS_Data_tmp = GNGGA(str_tab); elseif contains(str_tab,GSA) 0 GPS_Data_tmp = GNGSA(str_tab); elseif contains(str_tab,GSV) 0 GPS_Data_tmp = GNGSV(str_tab); elseif contains(str_tab,RMC) 0 GPS_Data_tmp = GNRMC(str_tab); elseif contains(str_

11、tab,VTG) 0 GPS_Data_tmp = GNVTG(str_tab); elseif contains(str_tab,GLL) 0 GPS_Data_tmp = GNGLL(str_tab); end end end % GPS字符串解析 function GPS_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

12、:index(count+1)-1);count=count+1; GPS_Data_tmp.LatitudeDir = str_tab(index(count)+1:index(count+1)-1);count=count+1; Longitude = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.LongitudeDir = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.GPSState = str_tab

13、(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.SatelliteNum = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.HDOP = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.altitude = str_tab(index(count)+1:index(count+1)-1);count=count+1; % other = s

14、tr_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:2); % 纬度 GPS_Data_tmp.Latitude.min = Latitude(3:4); tmp = str2double(Latitu

15、de(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); tmp = t

16、mp*6/1000; % tmp = tmp/10000*60; 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; if str2num(hour)+8 = 24 GPS_Data_tmp.Time.hour = num2str(str2num(hour)+8-24); else GPS_Data_tmp.Time.hour =

17、 num2str(str2num(hour)+8); end end function GPS_Data_tmp = GNGSA(str_tab) index = strfind(str_tab,); count = 1; GPS_Data_tmp.LocationMode = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.CurState = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.PRN = str_t

18、ab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.PDOP = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.HDOP = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.VDOP = str_tab(index(count)+1:index(count+1)-1);count=count+1; % other = str_tab(ind

19、ex(count)+1:end); end function GPS_Data_tmp = GNGSV(str_tab) % 此语句为与卫星有关的信息(包括卫星方位,卫星编号) % 暂时用不着,不处理 GPS_Data_tmp = ; end function GPS_Data_tmp = GNRMC(str_tab) index = strfind(str_tab,); count = 1; Time = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.LocationState = str_tab(i

20、ndex(count)+1:index(count+1)-1);count=count+1; Latitude = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.LatitudeDir = str_tab(index(count)+1:index(count+1)-1);count=count+1; Longitude = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.LongitudeDir = str_tab

21、(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.speed = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.TrueDir = str_tab(index(count)+1:index(count+1)-1);count=count+1; Date = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.MagneticAngle = str

22、_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.MagneticDir = str_tab(index(count)+1:index(count+1)-1);count=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_tm

23、p.Time.millisec = Time(8:10); GPS_Data_tmp.Latitude.degree = Latitude(1:2); % 纬度 GPS_Data_tmp.Latitude.min = Latitude(3:4); 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)*

24、10000); GPS_Data_tmp.Longitude.degree = Longitude(1:3); % 经度 GPS_Data_tmp.Longitude.min = Longitude(4:5); tmp = str2double(Longitude(7:10); tmp = tmp*6/1000; % tmp = tmp/10000*60; GPS_Data_tmp.Longitude.sec = num2str(floor(tmp); GPS_Data_tmp.Longitude.millisec = num2str(tmp-floor(tmp)*10000); GPS_Da

25、ta_tmp.DATE.day = Date(1:2); GPS_Data_tmp.DATE.month = Date(3:4); GPS_Data_tmp.DATE.year = Date(5:6); % UTC时间转换为北京时间 hour = GPS_Data_tmp.Time.hour; if str2num(hour)+8 = 24 GPS_Data_tmp.Time.hour = num2str(str2num(hour)+8-24); else GPS_Data_tmp.Time.hour = num2str(str2num(hour)+8); end end function G

26、PS_Data_tmp = GNVTG(str_tab) index = strfind(str_tab,); count = 1; GPS_Data_tmp.TrueDir = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.ReferenceTrueDir = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.RelativeDir = str_tab(index(count)+1:index(count+1)-1

27、);count=count+1; GPS_Data_tmp.ReferenceRelativeDir = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.step = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.stepflag = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.velocity = str_tab(ind

28、ex(count)+1:index(count+1)-1);count=count+1; % other = str_tab(index(count)+1:end); end function GPS_Data_tmp = GNGLL(str_tab) index = strfind(str_tab,); count = 1; Latitude = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.LatitudeDir = str_tab(index(count)+1:index(count+1)-1);

29、count=count+1; Longitude = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.LongitudeDir = str_tab(index(count)+1:index(count+1)-1);count=count+1; Date = str_tab(index(count)+1:index(count+1)-1);count=count+1; GPS_Data_tmp.LocationState = str_tab(index(count)+1:index(count+1)-1);

30、count=count+1; % other = str_tab(index(count)+1:end); % 进一步处理 GPS_Data_tmp.Latitude.degree = Latitude(1:2); % 纬度 GPS_Data_tmp.Latitude.min = Latitude(3:4); 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);

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2