CINRAD/CC/CCJ雷达原始数据格式声明:本数据格式适用CINRAD/CC和CINRAD/CCJ.安徽四创电子股份有限公司保留最终解释权.本文档仅供内部交流,请不要发表.文件名:平扫(PPI):NNNNYYDDHH.MMP高扫(RHI):NNNNYYDDHH.MMR体扫(VPPI):NNNNYYDDHH.MMV单库FFT:NNNNYYDDHH.MMF等高PPI(CAPPI):NNNNYYDDHH.MMCN:年Y:月D:日H:时M:分数据组成:整个数据由文件头(1个)和基于极坐标系的原始数据(512个径向)组成.文件头:////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////tagWEATHERRADAR雷达信息的结构typedef struct tagWEATHERRADAR{char cFileType[16]; //3830数据标识(CINRADC)char cCountry[30]; //国家名char cProvince[20]; //省名char cStation[40]; //站名char cStationNumber[10]; //区站号char cRadarType[20]; //雷达型号char cLongitude[16]; //天线所在经度char cLatitude[16]; //天线所在纬度long lLongitudeValue; //具体经度long lLatitudeValue; //具体纬度long lHeight; //天线海拔高度short sMaxAngle; //地物阻挡最大仰角short sOptAngle; //最佳观测仰角unsigned char ucSYear1; //观测开始时间的年千百位(19-20)unsigned char ucSYear2; //观测开始时间的年十个位(00-99)unsigned char ucSMonth; //观测开始时间的月(1-12)unsigned char ucSDay; //观测开始时间的日(1-31)unsigned char ucSHour; //观测开始时间的时(0-23)unsigned char ucSMinute; //观测开始时间的分(0-59)unsigned char ucSSecond; //观测开始时间的秒(0-59)unsigned char ucTimeFrom; //时间来源0-计算机时钟(1天内未对时)// 1-计算机时钟(1天内已对时)// 2-GPS// 3-其它unsigned char ucEYear1; //观测结束时间的年千百位(19-20)unsigned char ucEYear2; //观测结束时间的年十个位(00-99)unsigned char ucEMonth; //观测结束时间的月(1-12)unsigned char ucEDay; //观测结束时间的日(1-31)unsigned char ucEHour; //观测结束时间的时(0-23)unsigned char ucEMinute; //观测结束时间的分(0-59)unsigned char ucESecond; //观测结束时间的秒(0-59)unsigned char ucScanMode; //扫描方式1-RHI// 10-PPI和ZPPI// 1XX=VPPI(XX为扫描圈数) unsigned long ulSmilliSecond; //以微秒为单位表示的秒的小数位unsigned short usRHIA; //RHI所在的方位角(0.01度为单位)// PPI和VPPI时为FFFFshort sRHIL; //RHI所在的最低仰角(0.01度为单位)//PPI和VPPI时为FFFFshort sRHIH; //RHI所在的最高仰角(0.01度为单位)//PPI和VPPI时为FFFFunsigned short usEchoType; //回波类型0x405a-Z 0x406a-V 0x407a-W// 0x408a-ZVW三要素unsigned short usProdCode; //数据类型0x8001-PPI数据0x8002-RHI数据// 0x8003-VPPI数据0x8004-单强度PPI数据// 0x8005-CAPPI数据unsigned char ucCalibration; //标校状态0-无1-自动2-1星期内人工// 3-1月内人工unsigned char remain1[3]; //保留字unsigned char remain2[660]; //保留字,放VPPISCANPARAMETER数据//该结构的说明见后long lAntennaG; //天线增益(0.001dB)long lPower; //峰值功率(瓦)long lWavelength; //波长(微米)unsigned short usBeamH; //垂直波束宽度(秒)unsigned short usBeamL; //水平波束宽度(秒)unsigned short usPolarization; //极化状态0-水平1-垂直2-双偏振// 3-圆偏振4-其它unsigned short usLogA; //对数动态范围(0.01dB)unsigned short usLineA; //线性动态范围(0.01dB)unsigned short usAGCP; //AGC延迟量(微秒)unsigned short usFreqMode; //频率方式1-单重复频率2-双重复频率3:2// 3-双重复频率4:3unsigned short usFreqRepeat; //重复频率unsigned short usPPPPulse; //PPP脉冲数unsigned short usFFTPoint; //FFT间隔点数unsigned short usProcessType; //信号处理方式1-PPP 2-全程FFT// 3-单库FFTunsigned char ucClutterT; //杂波消除阀值(即STC)char cSidelobe; //第一旁瓣(dB)unsigned char ucVelocityT; //速度门限unsigned char ucFilderP; //地物消除方式0-无1-IIR滤波器1// 2-IIR滤波器2 3-IIR滤波器3// 4-IIR滤波器4unsigned char ucNoiseT; //噪声消除阀值(即强度门限)unsigned char ucSQIT; //SQI门限unsigned char ucIntensityC; //DVIP强度值估算采用的通道// 1-对数通道2-线性通道unsigned char ucIntensityR; //强度值估算是否距离订正// 0-无(dB) 1-已订正(dBZ)unsigned char ucCalNoise; //噪声系数标定值unsigned char ucCalPower; //发射功率标定值unsigned char ucCalPulseWidth; //脉冲宽度标定值unsigned char ucCalWorkFreq; //工作频率标定值unsigned char ucCalLog; //对数斜率标定值char remain3[92]; //保留字unsigned long int liDataOffset; //数据偏移地址}WEATHERRADAR;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////tagVPPISCANPARAMETER仰角层的结构typedef struct tagVPPISCANPARAMETER{unsigned short usMaxV; //最大可测速度(厘米/秒)unsigned short usMaxL; //最大可测距离(10米)unsigned short usBindWidth; //库长(米)unsigned short usBinNumber; //每径向库数unsigned short usRecordNumber; //本圈径向数unsigned short usArotate; //本圈转速(0.01度/秒)unsigned short usPrf1; //本圈第一次重复频率(0.1Hz)对应单重频或双重频的高者unsigned short usPrf2; //本圈第二次重复频率(0.1Hz)对应双重频的低者unsigned short usSpulseW; //本圈脉宽(微秒)short usAngle; //仰角(0.01度)unsigned char cSweepStatus; //1=单要素2=三要素(单重频) 3=三要素(双重频) unsigned char cAmbiguousp; //0=无软件退模糊1=软件退模糊}VPPISCANPARAMETER;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////注:在WEATHERRADAR结构的remain2处填写了的VPPISCANPARAMETER;结构表明本仰角层的参数(对PPI和VPPI而言)或其他含义(对RHI和单库FFT文件而言)VPPI有几层填几个,PPI RHI FFT数据只填写一层即一个.原始数据:PPI RHI VPPI的数据排列如下:第0个径向的数据:Z(字)500个V(字)500个W(字)500个….….第512个径向的数据:Z(字)500个V(字)500个W(字)500个注: Z V W均为16位的字型数据(在C语言中用short int 有符整型) 所读出的值除以10得到一个小数就是最终的值.Z以dBz为单位V W均以m/s为单位读出的数据如果是0x8000,说明此处无回波.这样做的目的是为了必须区别回波强度为0和无回波.单库FFT数据排列如下:当为256点时:256个通道的功率值(字型单位:dB)当为128点时:128个通道的功率值(字型单位:dB)附函数段:////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////检查要打开的文件//filename:文件名CString CRadar::CheckData(CString filename){CFile *fp;CString str="INV ALID",error,tempfilename=filename;try{fp=new CFile(filename,CFile::modeRead);}catch(CFileException* e){ProcessFileError(e,1);return str;}WEATHERRADAR tempinfo;fp->SeekToBegin();fp->Read(&tempinfo,sizeof(WEATHERRADAR));if(strcmp(tempinfo.cFileType,"CINRADC")){error.Format("%s 不是3830雷达数据文件!",tempfilename);AfxMessageBox(error,MB_OK|MB_ICONSTOP);delete fp;return str;}if(ProdCode==0x8001) str="PPI";else if(ProdCode==0x8002) str="RHI";else if(ProdCode==0x8003) str="VPPI";else if(ProdCode==0x8004) str="ZPPI";else if(ProdCode==0x8005) str="CAPPI";else if(ProdCode==0x8006) str="FFT";else{error.Format("文件%s 不是3830雷达数据文件!",tempfilename);AfxMessageBox(error,MB_OK|MB_ICONSTOP);}delete fp;return str;}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //读取数据//filename:要打开的文件名BOOL CPPI::LoadData(CString filename){CFile *fp;CString str;try{fp=new CFile(filename,CFile::modeRead);}catch(CFileException* e){radar->ProcessFileError(e,1);return FALSE;}fp->SeekToBegin();fp->Read(&info,sizeof(WEATHERRADAR));fp->Seek(218L,CFile::begin);fp->Read(&vppipara,sizeof(VPPISCANPARAMETER));rmax=int(MaxL/100.0+0.5);scanyj=Angle/100.0;//装地图文件long l;//申请数据存储区hData=::GlobalAlloc(GHND,512L*1500L*2L);if(!hData){AfxMessageBox("内存不足",MB_OK|MB_ICONSTOP);::GlobalFree(hData);delete fp;return FALSE;}pData=(short*)::GlobalLock(hData);for(l=0;l<(512*1500);l++) pData[l]=short(0x8000); //程序中用来表示有无数据,可以//不用考虑fp->Seek(info.liDataOffset,CFile::begin);int i,BEGINPOS,angle;long pos;short tempData[500];//我的程序要把每一个径向的连续的ZVW数据块读出后再按每个点排列成//第1个点的Z V W 第2个点的Z V W …. /第500个点的Z V W//可以不用考虑if(radar->scanmode=="PPI"){for(angle=0;angle<512;angle++){for(BEGINPOS=0;BEGINPOS<=2;BEGINPOS++){fp->Read(tempData,500L*2);pos=long(angle*1500+BEGINPOS);for(i=0;i<500;i++){pData[pos]=tempData[i];pos+=3;}}}}else if(radar->scanmode=="ZPPI"){for(angle=0;angle<512;angle++){fp->Read(tempData,500L*2);pos=long(angle*1500+0);for(i=0;i<500;i++){pData[pos]=tempData[i];pos+=3;}}}delete fp;openfilename=filename;return TRUE;}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //读取数据//filename:要打开的文件名BOOL CRHI::LoadData(CString filename){CFile *fp;CString str;try{fp=new CFile(filename,CFile::modeRead);}catch(CFileException* e){radar->ProcessFileError(e,1);return FALSE;}fp->SeekToBegin();fp->Read(&info,sizeof(WEATHERRADAR));fp->Seek(218L,CFile::begin);fp->Read(&vppipara,sizeof(VPPISCANPARAMETER));rmax=int(MaxL/100);scanfw=RHIA/100.0;beginyj=info.sRHIL/100.0;endyj=info.sRHIH/100.0;hData=::GlobalAlloc(GHND,512L*1500L*2L);if(!hData){AfxMessageBox("内存不足",MB_OK|MB_ICONSTOP);::GlobalFree(hData);delete fp;return FALSE;}pData=(short*)::GlobalLock(hData);long l;for(l=0;l<(512*1500);l++) pData[l]=short(0x8000);fp->Seek(info.liDataOffset,CFile::begin);int i,BEGINPOS,angle;long pos;short tempData[500];for(angle=0;angle<512;angle++){for(BEGINPOS=0;BEGINPOS<=2;BEGINPOS++){fp->Read(tempData,500L*2);pos=long(angle*1500+BEGINPOS);for(i=0;i<500;i++){pData[pos]=tempData[i];pos+=3;}}}delete fp;openfilename=filename;if(pDC||pmemDC||pbackDC) ChangeDistanceOrHeight(rmax,hmax);return TRUE;}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //读取数据//filename:要打开的文件名BOOL CVPPI::LoadData(CString filename){// if(radar->IsZip) filename=radar->unzipfile;CFile *fp;CString str;try{fp=new CFile(filename,CFile::modeRead);}catch(CFileException* e){radar->ProcessFileError(e,1);return FALSE;}fp->SeekToBegin();fp->Read(&info,sizeof(WEATHERRADAR));fp->Seek(218L,CFile::begin);ScanPara->num=info.ucScanMode-100;int yjc,temprf1,temprf2;for(yjc=0;yjc<ScanPara->num;yjc++){fp->Read(&vppipara[yjc],sizeof(VPPISCANPARAMETER));ScanPara->yj[yjc]=float(vppipara[yjc].usAngle/100.0);temprf1=int(vppipara[yjc].usPrf1/10.0+0.5);temprf2=int(vppipara[yjc].usPrf2/10.0+0.5);ScanPara->dsp.frequency=temprf1;if((temprf1*1.0/temprf2)==(3.0/2.0)) ScanPara->dsp.freqctrl=2;else if((temprf1*1.0/temprf2)==(4.0/3.0)) ScanPara->dsp.freqctrl=3;else ScanPara->dsp.freqctrl=1;ScanPara->dsp.pulsewidth=vppipara[yjc].usSpulseW;}rmax=int(vppipara[0].usMaxL/100);long l;//申请数据存储区hData=::GlobalAlloc(GHND,512L*1500L*2L*ScanPara->num);if(!hData){AfxMessageBox("内存不足",MB_OK|MB_ICONSTOP);::GlobalFree(hData);delete fp;return FALSE;}pData=(short*)::GlobalLock(hData);for(l=0;l<(ScanPara->num*512*1500);l++) pData[l]=short(0x8000);//因为pData中存放的是处理后的数据(有0),为了区分无回波和0,规定无回波0x8000=-32768, //0=0fp->Seek(info.liDataOffset,CFile::begin);int i,BEGINPOS,angle;long pos;short tempData[500];for(yjc=0;yjc<ScanPara->num;yjc++)for(angle=0;angle<512;angle++){for(BEGINPOS=0;BEGINPOS<=2;BEGINPOS++){fp->Read(tempData,500L*2);pos=long(yjc*1500*512+angle*1500+BEGINPOS);for(i=0;i<500;i++){pData[pos]=tempData[i];pos+=3;}}}delete fp;openfilename=filename;curyjc=0;return TRUE;}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //读取数据//filename:要打开的文件名BOOL CFFT::LoadData(CString filename){// if(radar->IsZip) filename=radar->unzipfile;CFile *fp;CString str;try{fp=new CFile(filename,CFile::modeRead);}catch(CFileException* e){radar->ProcessFileError(e,1);return FALSE;}fp->SeekToBegin();fp->Read(&info,sizeof(WEATHERRADAR));fp->Seek(218L,CFile::begin);fp->Read(&vppipara,sizeof(VPPISCANPARAMETER));rmax=int(MaxL/100.0+0.5);TESTPoints=int(Arotate);scanfw=Angle/100.0;oldFFTPoints=FFTPoint;fp->Seek(info.liDataOffset,CFile::begin);fp->Read(linedata.data,256L*2);delete fp;openfilename=filename;ChangeFFTPoints(oldFFTPoints);return TRUE;}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////。