#ifndef _GPURFPC_H_ #define _GPURFPC_H_ #include "BaseConstVariable.h" #include "GPUTool.cuh" #include #include #include #include extern "C" struct CUDASigmaParam { float p1; float p2; float p3; float p4; float p5; float p6; }; extern __device__ float GPU_getSigma0dB(CUDASigmaParam param, float theta); extern __device__ CUDAVectorEllipsoidal GPU_SatelliteAntDirectNormal( float RstX, float RstY, float RstZ, float antXaxisX, float antXaxisY, float antXaxisZ, float antYaxisX, float antYaxisY, float antYaxisZ, float antZaxisX, float antZaxisY, float antZaxisZ, float antDirectX, float antDirectY, float antDirectZ ); extern __device__ float GPU_BillerInterpAntPattern(float* antpattern, float starttheta, float startphi, float dtheta, float dphi, long thetapoints, long phipoints, float searththeta, float searchphi); extern __global__ void CUDA_AntPatternInterpGain(float* anttheta, float* antphi, float* gain, float* antpattern, float starttheta, float startphi, float dtheta, float dphi, int thetapoints, int phipoints, long len); extern __global__ void CUDA_InterpSigma( long* demcls, float* sigmaAmp, float* localanglearr, long len, CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen); extern __global__ void CUDAKernel_RFPC_Caluation_R_Gain( float antX, float antY, float antZ, // 天线的坐标 float* targetX, float* targetY, float* targetZ, long len, // 地面坐标 long* demCls, float* demSlopeX, float* demSlopeY, float* demSlopeZ, // 地表坡度矢量 float antXaxisX, float antXaxisY, float antXaxisZ, // 天线坐标系的X轴 float antYaxisX, float antYaxisY, float antYaxisZ,// 天线坐标系的Y轴 float antZaxisX, float antZaxisY, float antZaxisZ,// 天线坐标系的Z轴 float antDirectX, float antDirectY, float antDirectZ,// 天线的指向 float Pt,// 发射能量 double refPhaseRange, float* TransAntpattern, float Transtarttheta, float Transstartphi, float Transdtheta, float Transdphi, int Transthetapoints, int Transphipoints, // 发射天线方向图 float* ReceiveAntpattern, float Receivestarttheta, float Receivestartphi, float Receivedtheta, float Receivedphi, int Receivethetapoints, int Receivephipoints,//接收天线方向图 float NearR, float FarR, // 距离范围 CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen,// 插值图 float* factorj, long freqnum, double* outR, // 输出距离 float* outAmp // 输出增益 ); extern __global__ void CUDAKernel_PRF_CalFreqEcho( double* Rarr, float* ampArr, long pixelcount, float* factorj, long freqnum, double dx, double nearR, cuComplex* PRFEcho, long prfid); extern __device__ cuComplex GPU_calculationEcho(float sigma0, float TransAnt, float ReciveAnt, float localangle, float R, float slopeangle, float Pt, float lamda); extern __global__ void CUDA_calculationEcho(float* sigma0, float* TransAnt, float* ReciveAnt, float* localangle, float* R, float* slopeangle, float nearRange, float Fs, float Pt, float lamda, long FreqIDmax, cuComplex* echoArr, long* FreqID, long len); extern __global__ void CUDA_BillerInterpAntPattern(float* antpattern, float starttheta, float startphi, float dtheta, float dphi, long thetapoints, long phipoints, float* searththeta, float* searchphi, float* searchantpattern, long len); extern __global__ void CUDA_SatelliteAntDirectNormal(float* RstX, float* RstY, float* RstZ, float antXaxisX, float antXaxisY, float antXaxisZ, float antYaxisX, float antYaxisY, float antYaxisZ, float antZaxisX, float antZaxisY, float antZaxisZ, float antDirectX, float antDirectY, float antDirectZ, float* thetaAnt, float* phiAnt , long len); extern __global__ void CUDAKernel_PRFSumEcho_Rows( double* Rarr, float* ampArr, long Rows, long Cols, long startRid, float* factorj, long freqnum, cuComplex* freqRowsbuffer, long tempRows ); extern __global__ void CUDAKernel_PRFSumEcho_Freq( cuComplex* freqRowsbuffer, long tempRows, long freqnum, cuComplex* PRFEcho, long prfid ); extern "C" void SatelliteAntDirectNormal(float* RstX, float* RstY, float* RstZ, float antXaxisX, float antXaxisY, float antXaxisZ, float antYaxisX, float antYaxisY, float antYaxisZ, float antZaxisX, float antZaxisY, float antZaxisZ, float antDirectX, float antDirectY, float antDirectZ, float* thetaAnt, float* phiAnt, long len); extern "C" void AntPatternInterpGain(float* anttheta, float* antphi, float* gain, float* antpattern, float starttheta, float startphi, float dtheta, float dphi, int thetapoints, int phipoints, long len); extern "C" void calculationEcho(float* sigma0, float* TransAnt, float* ReciveAnt, float* localangle, float* R, float* slopeangle, float nearRange, float Fs, float pt, float lamda, long FreqIDmax, cuComplex* echoAmp, long* FreqID, long len); extern "C" void CUDAInterpSigma( long* demcls, float* sigmaAmp, float* localanglearr, long len, CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen); // 计算坐标的 距离、增益 extern "C" void CUDARFPC_Caluation_R_Gain( float antX, float antY, float antZ, // 天线的坐标 float* targetX, float* targetY, float* targetZ, long TargetPixelNumber, // 地面坐标 long* demCls, float* demSlopeX, float* demSlopeY, float* demSlopeZ, // 地表坡度矢量 float antXaxisX, float antXaxisY, float antXaxisZ, // 天线坐标系的X轴 float antYaxisX, float antYaxisY, float antYaxisZ,// 天线坐标系的Y轴 float antZaxisX, float antZaxisY, float antZaxisZ,// 天线坐标系的Z轴 float antDirectX, float antDirectY, float antDirectZ,// 天线的指向 float Pt,// 发射能量 double refPhaseRange, float* TransAntpattern, float Transtarttheta, float Transstartphi, float Transdtheta, float Transdphi, int Transthetapoints, int Transphipoints, // 发射天线方向图 float* ReceiveAntpattern, float Receivestarttheta, float Receivestartphi, float Receivedtheta, float Receivedphi, int Receivethetapoints, int Receivephipoints,//接收天线方向图 float NearR, float FarR, // 距离范围 CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen,// 插值图 float* factorj, long freqnum, double* outR, // 输出距离 //float* outAmp // 输出增益 double* PRFEcho_real, double* PRFEcho_imag, long prfid ); extern "C" void CUDA_PRF_CalFreqEcho( double* Rarr, float* ampArr, long pixelcount, float* factorj, long freqnum, double dx, double nearR, cuComplex* PRFEcho, long prfid); #endif