爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 16434|回复: 13

[程序设计] 雷达数据matlab程序有问题

[复制链接]

新浪微博达人勋

发表于 2017-7-9 21:26:12 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 二爷名声在外 于 2017-7-10 08:05 编辑

   大神求助,雷达数据格式的字节数对不上,什么uint,uint16 ,uint32 ,int32什么的搞的一塌糊涂,东西都写在附件里了还请大神赐教

问题.rar

1.26 MB, 下载次数: 15, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-7-10 10:11:44 | 显示全部楼层
*C程序转换为MATLAB程序,主要是C不熟啊,备注中是C的相关信息,感兴趣的可以下载附件看看

cart_version=fread(fid,16,'uint8=>char'); %正确    char       char        %s
proc_version=fread(fid,32,'uint8=>char');%正确     char       char        %s
zphi_version=fread(fid,16,'uint8=>char');%正确     char       char        %s
headerSize=fread(fid,1,'uint16')/256;%正确 (128) u_int16_t   int        %d C 中的相关表示u_int_16 int 表示C中的相关信息     奇怪,除了256才是真实值,也是瞎猜的    (128)
DataType=fread(fid,1,'uint16')/256; %正确(17)    u_int16_t   int        %d
ProjType=fread(fid,1,'uint16')/256;%正确( 2 )      u_int16_t   int        %d
pad_0=fread(fid,2,'uint8');
UTCDateTime=datestr(fread(fid,1,'uint32')); %      u_int32_t  time_t      
%time_t这个是C语言读取时间的命令,MATLAB大概和datestr对应吧 总之是读错了
%C中输出结果 以及定义格式
%tim = (time_t) hr.UTCDateTimeEnd;
%strftime(datetime, 128, "%d/%m/%Y %H:%M:%S", gmtime(&tim));
%fprintf(stdout, "UTCDateTimeEnd  = %s\n", datetime);
%datestr;datenum;

nX=fread(fid,1,'uint16')/256;       % u_int16_t       int       %d   明明和上面的一样headerSize 一样,但是读出来的数据却是错的
dX=0.001*fread(fid,1,'uint16')/256; % u_int16_t       float     %f
Xoffset=0.001*fread(fid,1,'int32'); % int32_t         float     %f
nY=fread(fid,1,'uint16')/256;       % u_int16_t       int       %d   同nX一样,是错的
dY=0.001*fread(fid,1,'uint16')/256; % u_int16_t       float     %f
Yoffset=0.001*fread(fid,1,'int32'); % int32_t         float     %f
radarLat=0.001*fread(fid,1,'int32');% int32_t         float     %f
radarLon=0.001*fread(fid,1,'int32');% int32_t         float     %f
radarXPos=0.001*fread(fid,1,'int32');% int32_t        float     %f
radarYPos=0.001*fread(fid,1,'int32');% int32_t        float     %f
blockSize=fread(fid,1,'int8'); % int8_t         char      %f      2 正确
pad_1=fread(fid,3,'uint8');   
UTCDateTimeEnd=fread(fid,1,'uint32');      % u_int32_t  time_t
realAccTime=fread(fid,1,'uint32');         % u_int32_t  int  %d
timeForecast=fread(fid,1,'uint32');        % u_int32_t  int  %d
nb_parent_files=fread(fid,1,'uint16')/256; % u_int16_t  int  %d     2正确
pad_2=fread(fid,2,'uint8');
fseek(fid, 128, -1);%数据块部分
ftell(fid);
%n=nX*nY;
n=361*361;
us_tab=fread(fid,n,'uint16');%%根本没有361*361这么多的数据,是什么问题?
A=find(us_tab(:)>=65533);
us_tab(A)=nan;
us_tab=double(us_tab-1)/250.;
us_tab=reshape(us_tab,361,361);
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-9 23:42:00 | 显示全部楼层
最近似乎突然冒出来几个关于雷达数据读取的,是碰到课程啦???



我觉着你放附件里,反而不如整理好一条一条贴出来诶
至少我不会闲着下附件看
但如果“偶然”在帖子里看到,能帮忙的 可能 还是会回复的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 32430
发表于 2017-7-10 08:05:31 | 显示全部楼层
你们这个题目啊……
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-10 10:19:40 | 显示全部楼层
shalimyy 发表于 2017-7-10 10:11
*C程序转换为MATLAB程序,主要是C不熟啊,备注中是C的相关信息,感兴趣的可以下载附件看看

cart_version ...

1字节能读对和2字节的读出来之后除256是对的很正常,但是一旦超过2字节,就有问题了。这是因为字节存储顺序和通常的字节存储顺序不同导致的。改变字节存储顺序就行了。对应更改fread函数的 machinefmt 参数。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-7-10 11:09:46 | 显示全部楼层
Lighting 发表于 2017-7-10 10:19
1字节能读对和2字节的读出来之后除256是对的很正常,但是一旦超过2字节,就有问题了。这是因为字节存储顺 ...

看到您的回复了,真的很感谢,还得研究一下这些数据的基本原理。现在在想C中htons和ntohs涉及到的网络字节和主机字节的转换,与这里的数据读取估计有关系。一直没能很好的理解到底是怎么转换的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-7-10 15:39:04 | 显示全部楼层
目前问题已经解决,为了广泛交流,共同提高,现把问题解决的核心分享给大家 ,多谢 lighting 的无私帮助

hr.ProjType          = fread(fid, 1, 'uint16', 'b');
参见MATLAB  fread 中machinefmt

A = fread(fileID,sizeA,precision,skip,machinefmt)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-8-26 17:43:52 | 显示全部楼层
shalimyy 发表于 2017-7-10 15:39
目前问题已经解决,为了广泛交流,共同提高,现把问题解决的核心分享给大家 ,多谢 lighting 的无私帮助

...

所有的字节都是‘b’大端模式吗,还是只有部分是大端模式,我读的数据,一开始用的默认(‘n’)读出来数据不对,之后都用的‘b’,也不对啊,请问楼主能指导一下吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-9-6 22:11:16 来自手机 | 显示全部楼层
lz,解决了吗?我有程序哦
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-4-2 16:18:16 | 显示全部楼层
sunlight12138 发表于 2017-9-6 22:11
lz,解决了吗?我有程序哦

请问matlab程序能给一份吗?最近处理基数据,程序老写不对。。。。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表