#ifndef _GPURFPC_H_ #define _GPURFPC_H_ #include "BaseConstVariable.h" #include "GPUTool.cuh" #include #include #include #include /** CUDA 调用参数 ************************************************************************************/ #define RFPCPIDIVLIGHT -4*PI/(LIGHTSPEED/1e9) extern "C" struct SateState { double Px, Py, Pz, Vx, Vy, Vz,antDirectX, antDirectY, antDirectZ; }; extern "C" struct GoalState { double Tx, Ty, Tz, TsX, TsY, TsZ; size_t cls; }; extern "C" struct CUDASigmaParam { float p1; float p2; float p3; float p4; float p5; float p6; }; extern "C" struct SloperDs { double* SloperX; double* SloperY; double* SloperZ; double* SloperAngle; }; extern "C" struct DEMDs { double* demX; double* demY; double* demZ; }; extern "C" struct LandDataDs { unsigned char* landData; }; extern "C" struct GPSPointsDs { double* Pxs; double* Pys; double* Pzs; double* Vxs; double* Vys; double* Vzs; }; extern "C" struct RFPCTask { double startFreq; double stepFreq; long freqNum; long prfNum; double Rnear; double Rfar; double Rref; double Pt = 1; SateState* antlist = nullptr; GoalState* goallist = nullptr; cuComplex* d_echoData = nullptr; // 回波 CUDASigmaParam sigma0_cls; double maxGain=48; double GainWeight=10; // 2度范围 size_t targetnum; }; extern __device__ double GPU_getSigma0dB_params( const double p1, const double p2, const double p3, const double p4, const double p5, const double p6, double theta); extern __device__ double GPU_getSigma0dB(CUDASigmaParam param, double theta); extern __device__ float GPU_getSigma0dB(CUDASigmaParam param, float theta); extern __device__ CUDAVectorEllipsoidal GPU_SatelliteAntDirectNormal( double RstX, double RstY, double RstZ, double AntXaxisX, double AntXaxisY, double AntXaxisZ, double AntYaxisX, double AntYaxisY, double AntYaxisZ, double AntZaxisX, double AntZaxisY, double AntZaxisZ, double AntDirectX, double AntDirectY, double AntDirectZ ); extern __device__ double GPU_BillerInterpAntPattern(double* antpattern, double starttheta, double startphi, double dtheta, double dphi, long thetapoints, long phipoints, double searththeta, double searchphi); extern "C" void CUDA_RFPC_MainProcess( // 天线 double* antX, double* antY, double* antZ, // 天线坐标 double* antXaxisX, double* antXaxisY, double* antXaxisZ, // 天线坐标系的X轴 double* antYaxisX, double* antYaxisY, double* antYaxisZ,// 天线坐标系的Y轴 double* antZaxisX, double* antZaxisY, double* antZaxisZ,// 天线坐标系的Z轴 double* antDirectX, double* antDirectY, double* antDirectZ,// 天线的指向 long PRFCount, long FreqNum, // 脉冲数量,频率数量 float f0, float dfreq,// 起始频率,终止频率 double Pt,// 发射能量 double refPhaseRange, // 天线方向图 double* TransAntpattern, double Transtarttheta, double Transstartphi, double Transdtheta, double Transdphi, int Transthetapoints, int Transphipoints, // 发射天线方向图 double* ReceiveAntpattern, double Receivestarttheta, double Receivestartphi, double Receivedtheta, double Receivedphi, int Receivethetapoints, int Receivephipoints,//接收天线方向图 double maxTransAntPatternValue,double maxReceiveAntPatternValue, double NearR, double FarR, // 距离范围 // 地面 double* targetX, double* targetY, double* targetZ, long* demCls, long TargetPixelNumber, // 地面坐标、地表覆盖类型,像素数 double* demSlopeX, double* demSlopeY, double* demSlopeZ, // 地表坡度矢量 CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen,// 插值图像 float* out_echoReal, float* out_echoImag,// 输出回波 float* d_temp_R, float* d_temp_amp ); extern "C" double* hostSigmaData_toDevice(int devid); extern "C" void ProcessRFPCTask(RFPCTask& task,long devid,float* h_R,float* h_amp); #endif