文档库

最新最全的文档下载
当前位置:文档库 > CC雷达基数据格式说明(附函数)

CC雷达基数据格式说明(附函数)

CINRAD/CC/CCJ雷达原始数据格式

声明:

本数据格式适用CINRAD/CC和CINRAD/CCJ.安徽四创电子股份有限公司保留最终解释权.本文档仅供内部交流,请不要发表.

文件名:

平扫(PPI):NNNNYYDDHH.MMP

高扫(RHI):NNNNYYDDHH.MMR

体扫(VPPI):NNNNYYDDHH.MMV

单库FFT:NNNNYYDDHH.MMF

等高PPI(CAPPI):NNNNYYDDHH.MMC

N:年Y:月D:日H:时M:分

数据组成:

整个数据由文件头(1个)和基于极坐标系的原始数据(512个径向)组成.

文件头:

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//tagWEA THERRADAR雷达信息的结构

typedef struct tagWEA THERRADAR

{

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 lLongitudeV alue; //具体经度

long lLatitudeV alue; //具体纬度

long lHeight; //天线海拔高度

short sMaxAngle; //地物阻挡最大仰角

short sOptAngle; //最佳观测仰角

unsigned char ucSY ear1; //观测开始时间的年千百位(19-20)

unsigned char ucSY ear2; //观测开始时间的年十个位(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 ucEY ear1; //观测结束时间的年千百位(19-20)

unsigned char ucEY ear2; //观测结束时间的年十个位(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时为FFFF

short sRHIL; //RHI所在的最低仰角(0.01度为单位)

//PPI和VPPI时为FFFF

short sRHIH; //RHI所在的最高仰角(0.01度为单位)

//PPI和VPPI时为FFFF

unsigned 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:3

unsigned short usFreqRepeat; //重复频率

unsigned short usPPPPulse; //PPP脉冲数

unsigned short usFFTPoint; //FFT间隔点数

unsigned short usProcessType; //信号处理方式1-PPP 2-全程FFT

// 3-单库FFT

unsigned char ucClutterT; //杂波消除阀值(即STC)

char cSidelobe; //第一旁瓣(dB)

unsigned char ucV elocityT; //速度门限

unsigned char ucFilderP; //地物消除方式0-无1-IIR滤波器1

// 2-IIR滤波器2 3-IIR滤波器3

// 4-IIR滤波器4

unsigned 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; //数据偏移地址

}WEA THERRADAR;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//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;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

注:在WEA THERRADAR结构的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;

}

WEA THERRADAR tempinfo;

fp->SeekToBegin();

fp->Read(&tempinfo,sizeof(WEA THERRADAR));

if(strcmp(tempinfo.cFileType,"CINRADC"))

{

error.Format("%s 不是3830雷达数据文件!",tempfilename);

AfxMessageBox(error,MB_OK|MB_ICONSTOP);

delete fp;

return str;

}

if(http://www.wendangku.net/doc/03ec232dcfc789eb172dc8f1.htmlProdCode==0x8001) str="PPI";

else if(http://www.wendangku.net/doc/03ec232dcfc789eb172dc8f1.htmlProdCode==0x8002) str="RHI";

else if(http://www.wendangku.net/doc/03ec232dcfc789eb172dc8f1.htmlProdCode==0x8003) str="VPPI";

else if(http://www.wendangku.net/doc/03ec232dcfc789eb172dc8f1.htmlProdCode==0x8004) str="ZPPI";

else if(http://www.wendangku.net/doc/03ec232dcfc789eb172dc8f1.htmlProdCode==0x8005) str="CAPPI";

else if(http://www.wendangku.net/doc/03ec232dcfc789eb172dc8f1.htmlProdCode==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(WEA THERRADAR));

fp->Seek(218L,CFile::begin);

fp->Read(&vppipara,sizeof(VPPISCANPARAMETER));

rmax=int(http://www.wendangku.net/doc/03ec232dcfc789eb172dc8f1.htmlMaxL/100.0+0.5);

scanyj=http://www.wendangku.net/doc/03ec232dcfc789eb172dc8f1.htmlAngle/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(WEA THERRADAR));

fp->Seek(218L,CFile::begin);

fp->Read(&vppipara,sizeof(VPPISCANPARAMETER));

rmax=int(http://www.wendangku.net/doc/03ec232dcfc789eb172dc8f1.htmlMaxL/100);

scanfw=http://www.wendangku.net/doc/03ec232dcfc789eb172dc8f1.htmlRHIA/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(WEA THERRADAR));

fp->Seek(218L,CFile::begin);

ScanPara->num=info.ucScanMode-100;

int yjc,temprf1,temprf2;

for(yjc=0;yjcnum;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=0

fp->Seek(info.liDataOffset,CFile::begin);

int i,BEGINPOS,angle;

long pos;

short tempData[500];

for(yjc=0;yjcnum;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(WEA THERRADAR));

fp->Seek(218L,CFile::begin);

fp->Read(&vppipara,sizeof(VPPISCANPARAMETER));

rmax=int(http://www.wendangku.net/doc/03ec232dcfc789eb172dc8f1.htmlMaxL/100.0+0.5);

TESTPoints=int(http://www.wendangku.net/doc/03ec232dcfc789eb172dc8f1.htmlArotate);

scanfw=http://www.wendangku.net/doc/03ec232dcfc789eb172dc8f1.htmlAngle/100.0;

oldFFTPoints=http://www.wendangku.net/doc/03ec232dcfc789eb172dc8f1.htmlFFTPoint;

fp->Seek(info.liDataOffset,CFile::begin);

fp->Read(linedata.data,256L*2);

delete fp;

openfilename=filename;

ChangeFFTPoints(oldFFTPoints);

return TRUE;

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////