爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1283|回复: 0

雷达数据读取

[复制链接]
发表于 2023-7-23 16:27:29 | 显示全部楼层 |阅读模式
MATLAB
问题截图:
问题概况: 我用MATLAB读取雷达数据(.002_R0 文件)画组合反射率,在写入数据部分出现图上的赋值错误。
我看过提问的智慧: 看过
自己思考时长(天): 5
系统平台:

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

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

x
各位大佬好
我想画一个组合反射率的图,这是我的读取数据和写入数据部分,问题出在写入数据。我尝试过读取同类型的其他数据,更换MATLAB的版本,更改写入数据部分的参数读取顺序以及注释掉部分参数。每次的错误都是无法执行赋值,左右侧大小不一样。我想请教大家,出现这种问题的原因以及解决掉办法。
%%%-------清除所有之前-------%%%%
clc
clear
close all

%%%-------全局变量-------%%%
global  Pathname;                                                          % global 定义全局变量
global SavePicPathName;
global  temp1;
global  num_temp1;
global  i1;
global saveNameChar;

Pathname ='C:\radar\ys\select\';
SavePicPathName='C:\radar\ys\';

temp1 =dir([Pathname,'*.*']);                                                %列出文件夹内容
num_temp1 =length(temp1);                                                   %获取数据文件下数据的个数
for i1=3:num_temp1                                                         %循环获取数据文件,执行程序(批量处理)

Pathname ='C:\radar\ys\select\';
SavePicPathName='C:\radar\ys\';

temp1 =dir([Pathname,'*.*']);                                                %列出文件夹内容
num_temp1 =length(temp1);  
Filename =[temp1(i1).name];

fid=fopen([Pathname  Filename],'r');
sname=regexp(Filename, '\.', 'split');
saveNameChar=char(sname(1));
spval=-9900;  
%-----读取文件数据-------------
%%%----------------雷达站地址参数段--------------------%%
Headlen=fread(fid,1,'int16');
RadarType=fread(fid,20,'int8=>char');                                   
Province=fread(fid,20,'int8=>char');
Station=fread(fid,20,'int8=>char');
SectionSta=fread(fid,20,'int8=>char');
Type=fread(fid,20,'int8=>char');
ScanModeName=fread(fid,20,'int8=>char');
Reserve1=fread(fid,20,'int8=>char');
LongitudeV=double(fread(fid,1,'int32')/360000);
LatitudeV=double(fread(fid,1,'int32')/360000);
Height=(fread(fid,1,'int32')/1000);
ElevationMax=(fread(fid,1,'int16')/100);
ElevationPer=(fread(fid,1,'int16')/100);
Reserve2=fread(fid,1,'int16');
%%%%%%--------------------------性能参数-----------------------%%%%
iAntennaPlus=fread(fid,1,'uint16');                             %天线增益,以0.01dB为单位
iVBeamwidth=fread(fid,1,'uint16');                              %垂直/水平波束宽度,以0.01°为单位
iHBeamwidth=fread(fid,1,'uint16');
iPolarzation=fread(fid,1,'uint16');
iWaveLength=fread(fid,1,'uint16');                               %波长,以微米为单位
iPeakPower=fread(fid,1,'uint32');
iSidelobeLevel=fread(fid,1,'uint16');
iLogExtent=fread(fid,1,'uint16')/100;
iLinearExtent=fread(fid,1,'uint16');
iAGCDelayAmount=fread(fid,1,'uint16');                          %微s为单位
iLogMinObsPower=fread(fid,1,'uint16');
iLinearMinObsPower=fread(fid,1,'uint16');
iNoiseThr=fread(fid,1,'uint16');
iClutterRejectionThr=fread(fid,1,'uint16');
iSQIThreshold=fread(fid,1,'uint16');
iVProcessMode=fread(fid,1,'uint16');                           %速度处理方式,0:无速度处理; 1:PPI; 2:FFT
iCluProcessMode=fread(fid,1,'uint16');                           %地物处理方式
iIntensityGangway=fread(fid,1,'uint16');                         %强度估算采用通道,1:对数; 2:线性
iRangeReduction=fread(fid,1,'uint16');

%%%%-----------------------g观测参数----------------%%%%%%
iProductNumber=fread(fid,1,'uint16');                            %产品类型   0:PPI; 1:RHI; 2:立体扫描; 3:反射率。。
iScanCutNum=fread(fid,1,'uint16');                              %扫描层数
iObsStartTimeYear=fread(fid,1,'uint16');
iObsStartTimeMonth=fread(fid,1,'uint16');
iObsStartTimeDay=fread(fid,1,'uint16');
iObsStartTimeHour=fread(fid,1,'uint16');
iObsStartTimeMinute=fread(fid,1,'uint16');
iObsStartTimeSecond=fread(fid,1,'uint16');
iGPSStartTime=fread(fid,1,'uint32');                             %以微秒为单位
iCalibrate=fread(fid,1,'uint16');                                %定标情况 0:没有标定; 1:自动标定; 2:一周内人工标定;
                                                                           %3:一月内人工标定
iIntensityIntNum=fread(fid,1,'uint16');
iVSample=fread(fid,1,'uint16');

%%%%----------------------30层观测量--------------%%%%%%%%%%%
    ID=fread(fid,30,'uint32');
    Parame=fread(fid,30,'uint8');%各层观测要素
    cVDeblurring=fread(fid,30,'uint8');%速度退模糊
    iFirstKindPRF=fread(fid,30,'uint16');%各层第一种脉冲重复频率
    iSecondKindPRF=fread(fid,30,'uint16');%各层第二种脉冲重复频率
    iPulseWidth=fread(fid,30,'uint16');  %各层脉冲宽度
    VMax=fread(fid,30,'uint16')/100;     %各层最大可测速度cm/s
    usRefBinNumber=fread(fid,30,'uint16');%各层反射率库数
    iRadialNum=fread(fid,30,'uint16');%各层径向数
    iDopBinLen=fread(fid,30,'uint16');%各层多普勒库长
    iRefBinLen=fread(fid,30,'uint16');%各层反射率库长
    iFirstBinDis=fread(fid,30,'uint16');%各层径向上的第一个库(或数据)的开始距离
    iPPIStartPos=fread(fid,30,'uint32');%各层PPI在文件中开始的位置
    iElevation=(fread(fid,30,'int16'))/100;%各层的仰角

%%%--------------观测要素---------%%%
    cDataArrayMode=fread(fid,1,'int8=>char');
    cRByteCount=fread(fid,1,'uint8=>char');
    cVByteCount=fread(fid,1,'uint8=>char');
    cWByteCount=fread(fid,1,'uint8=>char');

    iRNoEchoCode=fread(fid,1,'int16');
    iVNoEchoCode=fread(fid,1,'int16');
    iWNoEchoCode=fread(fid,1,'int16');
    iRMinIncrement=fread(fid,1,'int16');
    iVMinIncrement=fread(fid,1,'int16')*1000;
    iWMinIncrement=fread(fid,1,'int16')*1000;
    iRef0=fread(fid,1,'int16');
    iVel0=fread(fid,1,'int16');
    iWid0=fread(fid,1,'int16');

    iObsEndTimeYear=fread(fid,1,'uint16');
    iObsEndTimeMonth=fread(fid,1,'uint16');
    iObsEndTimeDay=fread(fid,1,'uint16');
    iObsEndTimeHour=fread(fid,1,'uint16');
    iObsEndTimeMinute=fread(fid,1,'uint16');
    iObsEndTimeSecond=fread(fid,1,'uint16');
    iGPSEndTime=fread(fid,1,'uint32');
    iStructSize=fread(fid,1,'uint16');
    scanmode=fread(fid,1,'uint16');
    wavForm=fread(fid,30,'uint8');
    usDopBinNumber=fread(fid,30,'uint16');%各层的多普勒距离库数
%     Reserve3=fread(fid,4,'uint16=>uint16');
%%%-----------------------------分配内存---------------------------%%%
layer=iScanCutNum;
Num_1=max(usRefBinNumber(1:layer));
Num_R=usRefBinNumber(1:layer);
Elevation=nan(layer,Num_1);
Azimuth1=nan(layer,Num_1);   
CorZ=nan(layer,360,Num_1);
V=nan(layer,360,Num_1);
W=nan(layer,360,Num_1);
ZDR=nan(layer,360,Num_1);     
ROHV=nan(layer,360,Num_1);      
KDP=nan(layer,360,Num_1);
PHDP=nan(layer,360,Num_1);
HCL=nan(layer,360,Num_1);
Reserve3=nan(layer,360,4);
Reserve4=nan(layer,360,56);
%%%------------------写入数据---------------------%%%
% ------------------写入数据块-----------------------%
for i=1:9
    for layer_num=1:360
        Reserve3(i,layer_num,1:4)=fread(fid,4,'uint8');  %读入4个字节的数据放一起
        Azimuth1(i,layer_num)=fread(fid,1,'uint16')*0.01;  %方位角
        Elevation(i,layer_num)=fread(fid,1,'uint16')*0.01; %海拔
        Reserve4(i,layer_num,1:56)= fread(fid,56,'uint8'); %读取了56个字节的内容(把这56个字节的内容放一起跳过,直接读取接下来的具体数据)
        CorZ(i,layer_num,1:Num_R(i))=fread(fid,Num_R(i),'uint8'); %经过杂波消除的dBZ值
        V(i,layer_num,1:Num_R(i))=fread(fid,Num_R(i),'uint8');
        W(i,layer_num,1:Num_R(i))=fread(fid,Num_R(i),'uint8');
        HCL(i,layer_num,1:Num_R(i))=fread(fid,Num_R(i),'uint8');
        ZDR(i,layer_num,1:Num_R(i))=fread(fid,Num_R(i),'uint8');  %反射率差值:单位为0.01dB
        KDP(i,layer_num,1:Num_R(i))=fread(fid,Num_R(i),'uint8');%传播相移差值:单位为0.01
        ROHV(i,layer_num,1:Num_R(i))=fread(fid,Num_R(i),'uint8');%相关系数值(单位为0.001)
        PHDP(i,layer_num,1:Num_R(i))=fread(fid,Num_R(i),'uint16'); %比差分相移值:单位为0.01
    end
end

end
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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