- 积分
- 449
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2021-2-2
- 最后登录
- 1970-1-1
|
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
|
|