#ifndef _GPURFPC_H_ #define _GPURFPC_H_ #include "BaseConstVariable.h" #include "GPUTool.cuh" #include #include #include #include extern "C" struct CUDASigmaParam { double p1; double p2; double p3; double p4; double p5; double p6; }; extern __device__ double GPU_getSigma0dB(CUDASigmaParam param, double 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 __global__ void CUDA_AntPatternInterpGain(double* anttheta, double* antphi, double* gain, double* antpattern, double starttheta, double startphi, double dtheta, double dphi, int thetapoints, int phipoints, long len); extern __global__ void CUDA_InterpSigma( long* demcls, double* sigmaAmp, double* localanglearr, long len, CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen); extern __global__ void CUDAKernel_PRF_CalFreqEcho( double* Rarr, double* ampArr, long pixelcount, double* factorj, long freqnum, double dx, double nearR, cuComplex* PRFEcho, long prfid); extern __device__ cuComplex GPU_calculationEcho(double sigma0, double TransAnt, double ReciveAnt, double localangle, double R, double slopeangle, double Pt, double lamda); extern __global__ void CUDA_calculationEcho(double* sigma0, double* TransAnt, double* ReciveAnt, double* localangle, double* R, double* slopeangle, double nearRange, double Fs, double Pt, double lamda, long FreqIDmax, cuComplex* echoArr, long* FreqID, long len); extern __global__ void CUDA_BillerInterpAntPattern(double* antpattern, double starttheta, double startphi, double dtheta, double dphi, long thetapoints, long phipoints, double* searththeta, double* searchphi, double* searchantpattern, long len); extern __global__ void CUDA_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, double* thetaAnt, double* phiAnt , long len); extern __global__ void CUDAKernel_PRF_GeneratorEcho(double* Rarr, double* ampArr, long blocknum, long pixelcount, double* factorj, long freqnum, double nearR, double farR, double* echo_real, double* echo_imag, long prfid); extern "C" void 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, double* thetaAnt, double* phiAnt, long len); extern "C" void AntPatternInterpGain(double* anttheta, double* antphi, double* gain, double* antpattern, double starttheta, double startphi, double dtheta, double dphi, int thetapoints, int phipoints, long len); extern "C" void calculationEcho(double* sigma0, double* TransAnt, double* ReciveAnt, double* localangle, double* R, double* slopeangle, double nearRange, double Fs, double pt, double lamda, long FreqIDmax, cuComplex* echoAmp, long* FreqID, long len); extern "C" void CUDAInterpSigma( long* demcls, double* sigmaAmp, double* localanglearr, long len, CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen); // 计算坐标的 距离、增益 extern "C" void CUDARFPC_Caluation_R_Gain( double antX, double antY, double antZ, // 天线的坐标 double* targetX, double* targetY, double* targetZ, long TargetPixelNumber, // 地面坐标 long* demCls, double* demSlopeX, double* demSlopeY, double* demSlopeZ, // 地表坡度矢量 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,// 天线的指向 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 NearR, double FarR, // 距离范围 CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen,// 插值图 double* factorj, long freqnum, double* outR, // 输出距离 //double* outAmp // 输出增益 double* PRFEcho_real, double* PRFEcho_imag, long prfid ); extern "C" void CUDA_PRF_CalFreqEcho( double* Rarr, double* ampArr, long pixelcount, double* factorj, long freqnum, double dx, double nearR, cuComplex* PRFEcho, long prfid); extern "C" void CUDA_PRF_GeneratorEcho(cublasHandle_t handle,double* Rarr, double* ampArr, long pixelcount, double* factorj, long freqnum, double nearR, double farR, double* echo_real, double* echo_imag, long prfid); #endif