parent
00017a32bd
commit
6615e35332
|
@ -2,7 +2,7 @@
|
|||
|
||||
#ifndef BASECONSTVARIABLE_H
|
||||
#define BASECONSTVARIABLE_H
|
||||
#define EIGEN_USE_MKL_ALL
|
||||
//#define EIGEN_USE_MKL_ALL
|
||||
//#define EIGEN_NO_DEBUG
|
||||
|
||||
|
||||
|
|
|
@ -312,6 +312,16 @@ void EchoL0Dataset::setLookSide(QString lookside)
|
|||
this->LookSide = lookside;
|
||||
}
|
||||
|
||||
double EchoL0Dataset::getBandwidth()
|
||||
{
|
||||
return this->bandwidth;
|
||||
}
|
||||
|
||||
void EchoL0Dataset::setBandwidth(double Inbandwidth)
|
||||
{
|
||||
this->bandwidth = Inbandwidth;
|
||||
}
|
||||
|
||||
SatelliteAntPos EchoL0Dataset::getSatelliteAntPos(long prf_id)
|
||||
{
|
||||
std::shared_ptr<double> antpos = this->getAntPos();
|
||||
|
@ -347,6 +357,7 @@ void EchoL0Dataset::printInfo() {
|
|||
std::cout << "Far Range: " << this->FarRange << std::endl;
|
||||
std::cout << "Center Frequency: " << this->centerFreq << std::endl;
|
||||
std::cout << "Sampling Frequency: " << this->Fs << std::endl;
|
||||
std::cout << "Band width: " << this->bandwidth << std::endl;
|
||||
}
|
||||
|
||||
// xmlÎļþ¶Áд
|
||||
|
@ -366,6 +377,7 @@ void EchoL0Dataset::saveToXml() {
|
|||
xmlWriter.writeStartElement("SimulationConfig");
|
||||
|
||||
xmlWriter.writeTextElement("PluseCount", QString::number(this->PluseCount));
|
||||
xmlWriter.writeTextElement("BandWidth", QString::number(this->bandwidth));
|
||||
xmlWriter.writeTextElement("PlusePoints", QString::number(this->PlusePoints));
|
||||
xmlWriter.writeTextElement("NearRange", QString::number(this->NearRange));
|
||||
xmlWriter.writeTextElement("FarRange", QString::number(this->FarRange));
|
||||
|
@ -408,7 +420,11 @@ ErrorCode EchoL0Dataset::loadFromXml() {
|
|||
|
||||
if (xmlReader.isStartElement()) {
|
||||
QString elementName = xmlReader.name().toString();
|
||||
if (elementName == "PluseCount") {
|
||||
if (elementName == "BandWidth") {
|
||||
this->bandwidth = xmlReader.readElementText().toLong();
|
||||
PluseCountflag = true;
|
||||
}
|
||||
else if (elementName == "PluseCount") {
|
||||
this->PluseCount = xmlReader.readElementText().toLong();
|
||||
PluseCountflag = true;
|
||||
}
|
||||
|
|
|
@ -153,6 +153,9 @@ public: //
|
|||
QString getLookSide();
|
||||
void setLookSide(QString lookside);
|
||||
|
||||
double getBandwidth();
|
||||
void setBandwidth(double Inbandwidth);
|
||||
|
||||
SatelliteAntPos getSatelliteAntPos(long plusePRFID);
|
||||
// 打印信息的成员函数
|
||||
void printInfo() ;
|
||||
|
@ -169,6 +172,8 @@ private: //
|
|||
double CenterAngle;
|
||||
QString LookSide;
|
||||
|
||||
double bandwidth;
|
||||
|
||||
public: // 读写 XML 的函数
|
||||
void saveToXml();
|
||||
ErrorCode loadFromXml();
|
||||
|
|
|
@ -58,8 +58,8 @@ std::string errorCode2errInfo(ErrorCode e)
|
|||
_CASE_STR(Error_GSL_ETOLX );
|
||||
_CASE_STR(Error_GSL_ETOLG );
|
||||
_CASE_STR(Error_GSL_EOF );
|
||||
// RTPC
|
||||
_CASE_STR(RTPC_PARAMSISEMPTY);
|
||||
// RFPC
|
||||
_CASE_STR(RFPC_PARAMSISEMPTY);
|
||||
_CASE_STR(ECHO_L0DATA_NOTOPEN);
|
||||
_CASE_STR(ECHO_L0DATA_ROW_COL_NOEQUAL);
|
||||
_CASE_STR(ECHO_L0DATA_PRFIDXOUTRANGE);
|
||||
|
|
|
@ -68,8 +68,8 @@ enum ErrorCode {
|
|||
Error_GSL_ETOLG = 131, /* cannot reach the specified tolerance in gradient */
|
||||
Error_GSL_EOF = 132, /* end of file */
|
||||
|
||||
// RTPC
|
||||
RTPC_PARAMSISEMPTY = 201,
|
||||
// RFPC
|
||||
RFPC_PARAMSISEMPTY = 201,
|
||||
// L0 数据
|
||||
ECHO_L0DATA_NOTOPEN = 202,
|
||||
ECHO_L0DATA_ROW_COL_NOEQUAL = 203, // 行或者列数量错误
|
||||
|
|
|
@ -10,24 +10,30 @@
|
|||
#include <cuComplex.h>
|
||||
|
||||
#include "BaseConstVariable.h"
|
||||
#include "GPURTPC.cuh"
|
||||
#include "GPURFPC.cuh"
|
||||
|
||||
#ifdef __CUDANVCC___
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
__device__ float GPU_getSigma0dB(CUDASigmaParam param, float theta) {//线性值
|
||||
float sigma= param.p1 + param.p2 * exp(-param.p3 * theta) + param.p4 * cos(param.p5 * theta + param.p6);
|
||||
return sigma;
|
||||
}
|
||||
|
||||
|
||||
__device__ CUDAVectorEllipsoidal GPU_SatelliteAntDirectNormal(float RstX, float RstY, float RstZ,
|
||||
__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
|
||||
) {
|
||||
CUDAVectorEllipsoidal result{ 0,0,-1 };
|
||||
|
||||
// 求解天线增益
|
||||
float Xst = -1 * RstX; // 卫星 --> 地面
|
||||
float Yst = -1 * RstY;
|
||||
float Zst = -1 * RstZ;
|
||||
|
@ -40,18 +46,69 @@ __device__ CUDAVectorEllipsoidal GPU_SatelliteAntDirectNormal(float RstX, float
|
|||
float AntZaxisX = antZaxisX;
|
||||
float AntZaxisY = antZaxisY;
|
||||
float AntZaxisZ = antZaxisZ;
|
||||
// 天线指向在天线坐标系下的值
|
||||
float Xant = (Xst * (AntYaxisY * AntZaxisZ - AntYaxisZ * AntZaxisY) + Xst * (AntXaxisZ * AntZaxisY - AntXaxisY * AntZaxisZ) + Xst * (AntXaxisY * AntYaxisZ - AntXaxisZ * AntYaxisY)) / (AntXaxisX * (AntYaxisY * AntZaxisZ - AntZaxisY * AntYaxisZ) - AntYaxisX * (AntXaxisY * AntZaxisZ - AntXaxisZ * AntZaxisY) + AntZaxisX * (AntXaxisY * AntYaxisZ - AntXaxisZ * AntYaxisY));
|
||||
float Yant = (Yst * (AntYaxisZ * AntZaxisX - AntYaxisX * AntZaxisZ) + Yst * (AntXaxisX * AntZaxisZ - AntXaxisZ * AntZaxisX) + Yst * (AntYaxisX * AntXaxisZ - AntXaxisX * AntYaxisZ)) / (AntXaxisX * (AntYaxisY * AntZaxisZ - AntZaxisY * AntYaxisZ) - AntYaxisX * (AntXaxisY * AntZaxisZ - AntXaxisZ * AntZaxisY) + AntZaxisX * (AntXaxisY * AntYaxisZ - AntXaxisZ * AntYaxisY));
|
||||
float Zant = (Zst * (AntYaxisX * AntZaxisY - AntYaxisY * AntZaxisX) + Zst * (AntXaxisY * AntZaxisX - AntXaxisX * AntZaxisY) + Zst * (AntXaxisX * AntYaxisY - AntYaxisX * AntXaxisY)) / (AntXaxisX * (AntYaxisY * AntZaxisZ - AntZaxisY * AntYaxisZ) - AntYaxisX * (AntXaxisY * AntZaxisZ - AntXaxisZ * AntZaxisY) + AntZaxisX * (AntXaxisY * AntYaxisZ - AntXaxisZ * AntYaxisY));
|
||||
|
||||
// 归一化
|
||||
float RstNorm = sqrtf(Xst * Xst + Yst * Yst + Zst * Zst);
|
||||
float AntXaxisNorm = sqrtf(AntXaxisX * AntXaxisX + AntXaxisY * AntXaxisY + AntXaxisZ * AntXaxisZ);
|
||||
float AntYaxisNorm = sqrtf(AntYaxisX * AntYaxisX + AntYaxisY * AntYaxisY + AntYaxisZ * AntYaxisZ);
|
||||
float AntZaxisNorm = sqrtf(AntZaxisX * AntZaxisX + AntZaxisY * AntZaxisY + AntZaxisZ * AntZaxisZ);
|
||||
|
||||
|
||||
float Rx = Xst / RstNorm;
|
||||
float Ry = Yst / RstNorm;
|
||||
float Rz = Zst / RstNorm;
|
||||
float Xx = AntXaxisX / AntXaxisNorm;
|
||||
float Xy = AntXaxisY / AntXaxisNorm;
|
||||
float Xz = AntXaxisZ / AntXaxisNorm;
|
||||
float Yx = AntYaxisX / AntYaxisNorm;
|
||||
float Yy = AntYaxisY / AntYaxisNorm;
|
||||
float Yz = AntYaxisZ / AntYaxisNorm;
|
||||
float Zx = AntZaxisX / AntZaxisNorm;
|
||||
float Zy = AntZaxisY / AntZaxisNorm;
|
||||
float Zz = AntZaxisZ / AntZaxisNorm;
|
||||
|
||||
float Xant = (Rx * Yy * Zz - Rx * Yz * Zy - Ry * Yx * Zz + Ry * Yz * Zx + Rz * Yx * Zy - Rz * Yy * Zx) / (Xx * Yy * Zz - Xx * Yz * Zy - Xy * Yx * Zz + Xy * Yz * Zx + Xz * Yx * Zy - Xz * Yy * Zx);
|
||||
float Yant = -(Rx * Xy * Zz - Rx * Xz * Zy - Ry * Xx * Zz + Ry * Xz * Zx + Rz * Xx * Zy - Rz * Xy * Zx) / (Xx * Yy * Zz - Xx * Yz * Zy - Xy * Yx * Zz + Xy * Yz * Zx + Xz * Yx * Zy - Xz * Yy * Zx);
|
||||
float Zant = (Rx * Xy * Yz - Rx * Xz * Yy - Ry * Xx * Yz + Ry * Xz * Yx + Rz * Xx * Yy - Rz * Xy * Yx) / (Xx * Yy * Zz - Xx * Yz * Zy - Xy * Yx * Zz + Xy * Yz * Zx + Xz * Yx * Zy - Xz * Yy * Zx);
|
||||
|
||||
|
||||
// 计算theta 与 phi
|
||||
float Norm = sqrtf(Xant * Xant + Yant * Yant + Zant * Zant); // 计算 pho
|
||||
float ThetaAnt = acosf(Zant / Norm); // theta 与 Z轴的夹角
|
||||
float YsinTheta = Yant / sinf(ThetaAnt);
|
||||
float PhiAnt = (YsinTheta / abs(YsinTheta)) * acosf(Xant / (Norm * sinf(ThetaAnt)));
|
||||
float PhiAnt = atanf(Yant / Xant); // -pi/2 ~pi/2
|
||||
|
||||
|
||||
if (abs(Yant) < PRECISIONTOLERANCE) { // X轴上
|
||||
PhiAnt = 0;
|
||||
}
|
||||
else if (abs(Xant) < PRECISIONTOLERANCE) { // Y轴上,原点
|
||||
if (Yant > 0) {
|
||||
PhiAnt = PI / 2;
|
||||
}
|
||||
else {
|
||||
PhiAnt = -PI / 2;
|
||||
}
|
||||
}
|
||||
else if (Xant < 0) {
|
||||
if (Yant > 0) {
|
||||
PhiAnt = PI + PhiAnt;
|
||||
}
|
||||
else {
|
||||
PhiAnt = -PI + PhiAnt;
|
||||
}
|
||||
}
|
||||
else { // Xant>0 X 正轴
|
||||
|
||||
}
|
||||
|
||||
if (isnan(PhiAnt)) {
|
||||
printf("V=[%f,%f,%f];norm=%f;thetaAnt=%f;phiAnt=%f;\n", Xant, Yant, Zant, Norm, ThetaAnt, PhiAnt);
|
||||
}
|
||||
|
||||
|
||||
result.theta = ThetaAnt;
|
||||
result.phi = PhiAnt;
|
||||
result.pho = Norm;
|
||||
result.Rho = Norm;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -328,8 +385,6 @@ __global__ void CUDA_InterpSigma(
|
|||
long clsid = demcls[idx];
|
||||
float localangle = localanglearr[idx];
|
||||
CUDASigmaParam tempsigma = sigma0Paramslist[clsid];
|
||||
//printf("cls:%d;localangle=%f;\n",clsid, localangle);
|
||||
|
||||
if (localangle < 0 || localangle >= LAMP_CUDA_PI/2) {
|
||||
sigmaAmp[idx] = 0;
|
||||
}
|
||||
|
@ -403,6 +458,165 @@ __global__ void CUDA_CombinationEchoAmpAndPhase(float* R,
|
|||
}
|
||||
|
||||
|
||||
__global__ void CUDAKernel_RFPC_Caluation_R_Gain(
|
||||
float antX, float antY, float antZ,
|
||||
float* targetX, float* targetY, float* targetZ, long len,
|
||||
float* demSlopeX, float* demSlopeY, float* demSlopeZ,
|
||||
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* 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,
|
||||
float* outR,
|
||||
float* outLocalAngle,
|
||||
float* AmpGain) {
|
||||
long idx = blockIdx.x * blockDim.x + threadIdx.x;
|
||||
if (idx < len) {
|
||||
float RstX = antX - targetX[idx]; // 计算坐标矢量
|
||||
float RstY = antY - targetY[idx];
|
||||
float RstZ = antZ - targetZ[idx];
|
||||
float slopeX = demSlopeX[idx];
|
||||
float slopeY = demSlopeY[idx];
|
||||
float slopeZ = demSlopeZ[idx];
|
||||
float RstR= sqrtf(RstX* RstX + RstY* RstY + RstZ* RstZ); // 矢量距离
|
||||
|
||||
if (RstR<NearR || RstR>FarR) {
|
||||
outLocalAngle[idx] = 0;
|
||||
outR[idx] = 0;
|
||||
AmpGain[idx] = 0;
|
||||
}
|
||||
else {
|
||||
// 求解坡度
|
||||
float slopR = sqrtf(slopeX * slopeX + slopeY * slopeY + slopeZ * slopeZ); //
|
||||
float dotAB = RstX * slopeX + RstY * slopeY + RstZ * slopeZ;
|
||||
outLocalAngle[idx] = acosf(dotAB / (RstR * slopR)); // 局地入射角
|
||||
float ampGain = 0;
|
||||
// 求解天线方向图指向
|
||||
CUDAVectorEllipsoidal antVector = GPU_SatelliteAntDirectNormal(
|
||||
RstX, RstY, RstZ,
|
||||
antXaxisX, antXaxisY, antXaxisZ,
|
||||
antYaxisX, antYaxisY, antYaxisZ,
|
||||
antZaxisX, antZaxisY, antZaxisZ,
|
||||
antDirectX, antDirectY, antDirectZ
|
||||
);
|
||||
if (antVector.Rho > 0) {
|
||||
// 发射方向图
|
||||
float temptheta = antVector.theta * r2d;
|
||||
float tempphi = antVector.phi * r2d;
|
||||
float TansantPatternGain =
|
||||
GPU_BillerInterpAntPattern(
|
||||
TransAntpattern,
|
||||
Transtarttheta, Transstartphi, Transdtheta, Transdphi, Transthetapoints, Transphipoints,
|
||||
temptheta, tempphi);
|
||||
|
||||
// 接收方向图
|
||||
float antPatternGain = GPU_BillerInterpAntPattern(
|
||||
ReceiveAntpattern,
|
||||
Receivestarttheta, Receivestartphi, Receivedtheta, Receivedphi, Receivethetapoints, Receivephipoints,
|
||||
temptheta, tempphi);
|
||||
|
||||
ampGain = TansantPatternGain * antPatternGain;
|
||||
ampGain = ampGain / (powf(4 * LAMP_CUDA_PI, 2) * powf(RstR, 4)); // 反射强度
|
||||
AmpGain[idx] = ampGain;
|
||||
outR[idx] = RstR;
|
||||
}
|
||||
else {
|
||||
outR[idx] = 0;
|
||||
AmpGain[idx] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
__global__ void CUDARFPCKernel_Target_Freq_EchoData(
|
||||
float* InR,
|
||||
float* InlocalAngle,
|
||||
float* InampGain,
|
||||
long* Indemcls,
|
||||
long len,
|
||||
float Pt, float freq,
|
||||
CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen,
|
||||
cuComplex* OutechoArr) {
|
||||
long idx = blockIdx.x * blockDim.x + threadIdx.x;
|
||||
if (idx < len) {
|
||||
float sigma0 = 0;
|
||||
{
|
||||
long clsid = Indemcls[idx];
|
||||
float localangle = InlocalAngle[idx];
|
||||
CUDASigmaParam tempsigma = sigma0Paramslist[clsid];
|
||||
if (localangle < 0 || localangle >= LAMP_CUDA_PI / 2) {
|
||||
sigma0 = 0;
|
||||
}
|
||||
else {}
|
||||
|
||||
if (abs(tempsigma.p1) < PRECISIONTOLERANCE &&
|
||||
abs(tempsigma.p2) < PRECISIONTOLERANCE &&
|
||||
abs(tempsigma.p3) < PRECISIONTOLERANCE &&
|
||||
abs(tempsigma.p4) < PRECISIONTOLERANCE &&
|
||||
abs(tempsigma.p5) < PRECISIONTOLERANCE &&
|
||||
abs(tempsigma.p6) < PRECISIONTOLERANCE
|
||||
) {
|
||||
sigma0 = 0;
|
||||
}
|
||||
else {
|
||||
float sigma = GPU_getSigma0dB(tempsigma, localangle);
|
||||
sigma0 = powf(10.0, sigma / 10.0);// 后向散射系数
|
||||
}
|
||||
}
|
||||
float amp = Pt * InampGain[idx] * sigma0;
|
||||
float phi = 4 * PI * freq / LIGHTSPEED * InR[idx];
|
||||
// 欧拉公式 exp(ix)=cos(x)+isin(x)
|
||||
// echo=Aexp(ix)=A*cos(x)+i*A*sin(x)
|
||||
cuComplex echotemp = make_cuComplex(amp * cosf(phi), amp * sinf(phi));
|
||||
OutechoArr[idx] = echotemp;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
__global__ void CUDACkernel_Complex_SUM_reduce_dynamicshared(cuComplex* d_x, cuComplex* d_y, long N)
|
||||
{
|
||||
const int tid = threadIdx.x; // 某个block内的线程标号 index
|
||||
const int bid = blockIdx.x; // 某个block在网格grid内的标号 index
|
||||
const int n = bid * blockDim.x + tid; // n 是某个线程的标号 index
|
||||
__shared__ cuComplex s_y[128]; // 分配共享内存空间,不同的block都有共享内存变量的副本
|
||||
s_y[tid] = (n < N) ? d_x[n] : make_cuComplex(0.0,0.0); // 每个block的共享内存变量副本,都用全局内存数组d_x来赋值,最后一个多出来的用0
|
||||
__syncthreads(); // 线程块内部直接同步
|
||||
|
||||
for (int offset = blockDim.x >> 1; offset > 0; offset >>= 1) // 折半
|
||||
{
|
||||
|
||||
if (tid < offset) // 线程标号的index 不越界 折半
|
||||
{
|
||||
s_y[tid] = cuCaddf(s_y[tid], s_y[tid + offset]); // 某个block内的线程做折半规约
|
||||
}
|
||||
__syncthreads(); // 同步block内部的线程
|
||||
}
|
||||
|
||||
if (tid == 0) // 某个block只做一次操作
|
||||
{
|
||||
d_y[bid] = s_y[0]; // 复制共享内存变量累加的结果到全局内存
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** 对外封装接口 *******************************************************************************************************/
|
||||
|
||||
extern "C" void SatelliteAntDirectNormal(float* RstX, float* RstY, float* RstZ,
|
||||
float antXaxisX, float antXaxisY, float antXaxisZ,
|
||||
|
@ -426,7 +640,7 @@ extern "C" void SatelliteAntDirectNormal(float* RstX, float* RstY, float* RstZ,
|
|||
#ifdef __CUDADEBUG__
|
||||
cudaError_t err = cudaGetLastError();
|
||||
if (err != cudaSuccess) {
|
||||
printf("CUDA_RTPC_SiglePRF CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
printf("CUDA_RFPC_SiglePRF CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
// Possibly: exit(-1) if program cannot continue....
|
||||
}
|
||||
#endif // __CUDADEBUG__
|
||||
|
@ -438,7 +652,7 @@ extern "C" void AntPatternInterpGain(float* anttheta, float* antphi, float* ga
|
|||
float* antpattern, float starttheta, float startphi, float dtheta, float dphi, int thetapoints, int phipoints, long len) {
|
||||
int blockSize = 256; // 每个块的线程数
|
||||
int numBlocks = (len + blockSize - 1) / blockSize; // 根据 pixelcount 计算网格大小
|
||||
//printf("\nCUDA_RTPC_SiglePRF blockSize:%d ,numBlock:%d\n", blockSize, numBlocks);
|
||||
//printf("\nCUDA_RFPC_SiglePRF blockSize:%d ,numBlock:%d\n", blockSize, numBlocks);
|
||||
|
||||
CUDA_AntPatternInterpGain << <numBlocks, blockSize >> > ( anttheta,antphi, gain,
|
||||
antpattern,
|
||||
|
@ -447,7 +661,7 @@ extern "C" void AntPatternInterpGain(float* anttheta, float* antphi, float* ga
|
|||
#ifdef __CUDADEBUG__
|
||||
cudaError_t err = cudaGetLastError();
|
||||
if (err != cudaSuccess) {
|
||||
printf("CUDA_RTPC_SiglePRF CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
printf("CUDA_RFPC_SiglePRF CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
// Possibly: exit(-1) if program cannot continue....
|
||||
}
|
||||
#endif // __CUDADEBUG__
|
||||
|
@ -472,7 +686,7 @@ extern "C" void calculationEcho(float* sigma0, float* TransAnt, float* ReciveAnt
|
|||
#ifdef __CUDADEBUG__
|
||||
cudaError_t err = cudaGetLastError();
|
||||
if (err != cudaSuccess) {
|
||||
printf("CUDA_RTPC_SiglePRF CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
printf("CUDA_RFPC_SiglePRF CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
// Possibly: exit(-1) if program cannot continue....
|
||||
}
|
||||
#endif // __CUDADEBUG__
|
||||
|
@ -490,7 +704,7 @@ extern "C" void CUDACalculationEchoAmp(float* sigma0, float* TransAnt, float* Re
|
|||
#ifdef __CUDADEBUG__
|
||||
cudaError_t err = cudaGetLastError();
|
||||
if (err != cudaSuccess) {
|
||||
printf("CUDA_RTPC_SiglePRF CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
printf("CUDA_RFPC_SiglePRF CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
// Possibly: exit(-1) if program cannot continue....
|
||||
}
|
||||
#endif // __CUDADEBUG__
|
||||
|
@ -508,7 +722,7 @@ extern "C" void CUDACalculationEchoPhase(float* R, float lamda, float* phaseArr,
|
|||
#ifdef __CUDADEBUG__
|
||||
cudaError_t err = cudaGetLastError();
|
||||
if (err != cudaSuccess) {
|
||||
printf("CUDA_RTPC_SiglePRF CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
printf("CUDA_RFPC_SiglePRF CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
// Possibly: exit(-1) if program cannot continue....
|
||||
}
|
||||
#endif // __CUDADEBUG__
|
||||
|
@ -533,7 +747,7 @@ extern "C" void CUDACombinationEchoAmpAndPhase(float* R,
|
|||
#ifdef __CUDADEBUG__
|
||||
cudaError_t err = cudaGetLastError();
|
||||
if (err != cudaSuccess) {
|
||||
printf("CUDA_RTPC_SiglePRF CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
printf("CUDA_RFPC_SiglePRF CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
// Possibly: exit(-1) if program cannot continue....
|
||||
}
|
||||
#endif // __CUDADEBUG__
|
||||
|
@ -555,13 +769,128 @@ extern "C" void CUDAInterpSigma(
|
|||
#ifdef __CUDADEBUG__
|
||||
cudaError_t err = cudaGetLastError();
|
||||
if (err != cudaSuccess) {
|
||||
printf("CUDA_RTPC_SiglePRF CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
printf("CUDA_RFPC_SiglePRF CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
// Possibly: exit(-1) if program cannot continue....
|
||||
}
|
||||
#endif // __CUDADEBUG__
|
||||
cudaDeviceSynchronize();
|
||||
}
|
||||
|
||||
extern "C" void CUDARFPC_Caluation_R_Gain(float antX, float antY, float antZ,
|
||||
float* targetX, float* targetY, float* targetZ, long TargetPixelNumber,
|
||||
float* demSlopeX, float* demSlopeY, float* demSlopeZ,
|
||||
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* 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,
|
||||
float* outR,
|
||||
float* outLocalAngle,
|
||||
float* AmpGain)
|
||||
{
|
||||
|
||||
int blockSize = 256; // 每个块的线程数
|
||||
int numBlocks = (TargetPixelNumber + blockSize - 1) / blockSize; // 根据 pixelcount 计算网格大小
|
||||
// 调用 CUDA 核函数
|
||||
CUDAKernel_RFPC_Caluation_R_Gain << <numBlocks, blockSize >> > (
|
||||
antX, antY, antZ,
|
||||
targetX,targetY, targetZ, TargetPixelNumber,
|
||||
demSlopeX, demSlopeY, demSlopeZ,
|
||||
antXaxisX, antXaxisY, antXaxisZ,
|
||||
antYaxisX, antYaxisY, antYaxisZ,
|
||||
antZaxisX, antZaxisY, antZaxisZ,
|
||||
antDirectX, antDirectY, antDirectZ,
|
||||
TransAntpattern,
|
||||
Transtarttheta, Transstartphi, Transdtheta, Transdphi, Transthetapoints, Transphipoints,
|
||||
ReceiveAntpattern,
|
||||
Receivestarttheta, Receivestartphi, Receivedtheta, Receivedphi, Receivethetapoints, Receivephipoints,
|
||||
NearR, FarR,
|
||||
outR,
|
||||
outLocalAngle,
|
||||
AmpGain
|
||||
);
|
||||
|
||||
|
||||
#ifdef __CUDADEBUG__
|
||||
cudaError_t err = cudaGetLastError();
|
||||
if (err != cudaSuccess) {
|
||||
printf("CUDARFPC_Caluation_R_Gain CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
// Possibly: exit(-1) if program cannot continue....
|
||||
}
|
||||
#endif // __CUDADEBUG__
|
||||
cudaDeviceSynchronize();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
extern "C" void CUDARFPC_Target_Freq_EchoData(float* InR,
|
||||
float* InlocalAngle,
|
||||
float* InampGain,
|
||||
long* Indemcls,
|
||||
long len,
|
||||
float Pt, float freq,
|
||||
CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen,
|
||||
cuComplex* OutechoArr
|
||||
|
||||
)
|
||||
{
|
||||
int blockSize = 256; // 每个块的线程数
|
||||
int numBlocks = (len + blockSize - 1) / blockSize; // 根据 pixelcount 计算网格大小
|
||||
// 调用 CUDA 核函数
|
||||
CUDARFPCKernel_Target_Freq_EchoData << <numBlocks, blockSize >> > (
|
||||
InR,
|
||||
InlocalAngle,
|
||||
InampGain,
|
||||
Indemcls,
|
||||
len,
|
||||
Pt, freq,
|
||||
sigma0Paramslist, sigmaparamslistlen,
|
||||
OutechoArr
|
||||
);
|
||||
#ifdef __CUDADEBUG__
|
||||
cudaError_t err = cudaGetLastError();
|
||||
if (err != cudaSuccess) {
|
||||
printf("CUDARFPC_Target_Freq_EchoData CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
// Possibly: exit(-1) if program cannot continue....
|
||||
}
|
||||
#endif // __CUDADEBUG__
|
||||
cudaDeviceSynchronize();
|
||||
|
||||
}
|
||||
|
||||
|
||||
extern "C" void CUDA_DemEchoSUM_NoMalloc(cuComplex* d_dem_echo,long N,
|
||||
cuComplex* d_echosum_temp, int grid_size,
|
||||
cuComplex* d_echo,long ehcoid
|
||||
) {
|
||||
long NUM_REPEATS = 100;
|
||||
const int smem = sizeof(float) * BLOCK_SIZE;
|
||||
for (long i = 0; i < grid_size; i++) { // 初始化
|
||||
d_echosum_temp[i] = make_cuComplex(0,0);
|
||||
}
|
||||
|
||||
CUDACkernel_Complex_SUM_reduce_dynamicshared << <grid_size, BLOCK_SIZE, smem >> > (d_dem_echo, d_echosum_temp,N); //归约求和
|
||||
#ifdef __CUDADEBUG__
|
||||
cudaError_t err = cudaGetLastError();
|
||||
if (err != cudaSuccess) {
|
||||
printf("CUDALinearInterp1 CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
// Possibly: exit(-1) if program cannot continue....
|
||||
}
|
||||
#endif // __CUDADEBUG__
|
||||
cudaDeviceSynchronize();
|
||||
|
||||
|
||||
for (int n = 0; n < grid_size; ++n)
|
||||
{
|
||||
d_echo[ehcoid] =cuCaddf(d_echo[ehcoid],d_echosum_temp[n]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#ifndef _GPURTPC_H_
|
||||
#define _GPURTPC_H_
|
||||
#ifndef _GPURFPC_H_
|
||||
#define _GPURFPC_H_
|
||||
|
||||
#include "BaseConstVariable.h"
|
||||
#include "GPUTool.cuh"
|
||||
|
@ -63,6 +63,50 @@ 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, // 地面坐标
|
||||
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* 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, // 距离范围
|
||||
|
||||
float* outR, // 输出距离
|
||||
float* outLocalAngle, // 输出局地坐标系
|
||||
float* AmpGain // 输出增益
|
||||
);
|
||||
|
||||
|
||||
// 创建回波
|
||||
extern "C" void CUDARFPC_Target_Freq_EchoData(
|
||||
float* InR,
|
||||
float* InlocalAngle,
|
||||
float* InampGain,
|
||||
long* Indemcls, long TargetPixelNumber,
|
||||
float Pt, float freq,
|
||||
|
||||
CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen,// 插值图
|
||||
cuComplex* OutechoArr
|
||||
);
|
||||
|
||||
|
||||
extern "C" void CUDA_DemEchoSUM_NoMalloc(cuComplex* d_dem_echo, long N,
|
||||
cuComplex* d_echosum_temp, int grid_size,
|
||||
cuComplex* d_echo, long ehcoid
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -76,8 +76,8 @@ extern "C" void CUDATBPImage(float* antPx, float* antPy, float* antPz,
|
|||
{
|
||||
int blockSize = 256; // 每个块的线程数
|
||||
int numBlocks = (rowcount * colcount + blockSize - 1) / blockSize; // 根据 pixelcount 计算网格大小
|
||||
//printf("\nCUDA_RTPC_SiglePRF blockSize:%d ,numBlock:%d\n",blockSize,numBlocks);
|
||||
// 调用 CUDA 核函数 CUDA_RTPC_Kernel
|
||||
//printf("\nCUDA_RFPC_SiglePRF blockSize:%d ,numBlock:%d\n",blockSize,numBlocks);
|
||||
// 调用 CUDA 核函数 CUDA_RFPC_Kernel
|
||||
|
||||
CUDA_TBPImage << <numBlocks, blockSize >> > (
|
||||
antPx, antPy, antPz,
|
||||
|
|
|
@ -8,12 +8,13 @@
|
|||
#include <cuda_runtime.h>
|
||||
#include <cublas_v2.h>
|
||||
#include <cuComplex.h>
|
||||
|
||||
#include <chrono>
|
||||
#include "BaseConstVariable.h"
|
||||
#include "GPUTool.cuh"
|
||||
|
||||
#ifdef __CUDANVCC___
|
||||
|
||||
#define BLOCK_DIM 1024
|
||||
#define REDUCE_SCALE 4
|
||||
|
||||
// 定义参数
|
||||
__device__ cuComplex cuCexpf(cuComplex x)
|
||||
|
@ -43,6 +44,49 @@ __device__ float GPU_CosAngle_VectorA_VectorB(CUDAVector A, CUDAVector B) {
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
__global__ void CUDACkernel_SUM_reduce_dynamicshared(float* d_x, float* d_y,long N)
|
||||
{
|
||||
const int tid = threadIdx.x; // 某个block内的线程标号 index
|
||||
const int bid = blockIdx.x; // 某个block在网格grid内的标号 index
|
||||
const int n = bid * blockDim.x + tid; // n 是某个线程的标号 index
|
||||
__shared__ float s_y[128]; // 分配共享内存空间,不同的block都有共享内存变量的副本
|
||||
s_y[tid] = (n < N) ? d_x[n] : 0.0; // 每个block的共享内存变量副本,都用全局内存数组d_x来赋值,最后一个多出来的用0
|
||||
__syncthreads(); // 线程块内部直接同步
|
||||
|
||||
for (int offset = blockDim.x >> 1; offset > 0; offset >>= 1) // 折半
|
||||
{
|
||||
|
||||
if (tid < offset) // 线程标号的index 不越界 折半
|
||||
{
|
||||
s_y[tid] += s_y[tid + offset]; // 某个block内的线程做折半规约
|
||||
}
|
||||
__syncthreads(); // 同步block内部的线程
|
||||
}
|
||||
|
||||
if (tid == 0) // 某个block只做一次操作
|
||||
{
|
||||
d_y[bid] = s_y[0]; // 复制共享内存变量累加的结果到全局内存
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
__global__ void CUDA_DistanceAB(float* Ax, float* Ay, float* Az, float* Bx, float* By, float* Bz, float* R, long len) {
|
||||
long idx = blockIdx.x * blockDim.x + threadIdx.x;
|
||||
if (idx < len) {
|
||||
|
@ -113,6 +157,22 @@ __global__ void CUDA_GridPoint_Linear_Interp1(float* v, float* q, float* qv, lon
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//错误提示
|
||||
extern "C" void checkCudaError(cudaError_t err, const char* msg) {
|
||||
|
@ -314,3 +374,39 @@ extern "C" void CUDAGridPointLinearInterp1(float* v, float* q, float* qv, long
|
|||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
extern "C" float CUDA_SUM(float* d_x, long N)
|
||||
{
|
||||
long NUM_REPEATS = 100;
|
||||
|
||||
int grid_size = (N + BLOCK_SIZE - 1) / BLOCK_SIZE;
|
||||
const int ymem = sizeof(float) * grid_size;
|
||||
const int smem = sizeof(float) * BLOCK_SIZE;
|
||||
float* d_y=(float*)mallocCUDADevice(ymem);
|
||||
float* h_y = (float*)mallocCUDAHost(ymem);
|
||||
CUDACkernel_SUM_reduce_dynamicshared << <grid_size, BLOCK_SIZE, smem >> > (d_x, d_y,N);
|
||||
#ifdef __CUDADEBUG__
|
||||
cudaError_t err = cudaGetLastError();
|
||||
if (err != cudaSuccess) {
|
||||
printf("CUDALinearInterp1 CUDA Error: %s\n", cudaGetErrorString(err));
|
||||
// Possibly: exit(-1) if program cannot continue....
|
||||
}
|
||||
#endif // __CUDADEBUG__
|
||||
cudaDeviceSynchronize();
|
||||
|
||||
DeviceToHost(h_y, d_y, ymem);
|
||||
|
||||
float result = 0.0;
|
||||
for (int n = 0; n < grid_size; ++n)
|
||||
{
|
||||
result += h_y[n];
|
||||
}
|
||||
|
||||
|
||||
FreeCUDAHost(h_y);
|
||||
FreeCUDADevice(d_y);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
#define LAMP_CUDA_PI 3.141592653589793238462643383279
|
||||
|
||||
#define BLOCK_SIZE 256
|
||||
|
||||
// 默认显存分布
|
||||
|
||||
|
@ -32,7 +33,7 @@ extern "C" struct CUDAVector {
|
|||
extern "C" struct CUDAVectorEllipsoidal {
|
||||
float theta;
|
||||
float phi;
|
||||
float pho;
|
||||
float Rho;
|
||||
};
|
||||
|
||||
// 定义设备函数
|
||||
|
|
|
@ -0,0 +1,446 @@
|
|||
#include "LAMPScatterS1B.h"
|
||||
#include <flann/flann.hpp>
|
||||
#include <QDebug>
|
||||
|
||||
LAMPScatterS1BRCSDataNode::LAMPScatterS1BRCSDataNode(QString PolarName, double AzAngle, double IncAngle, std::shared_ptr<double> freqs, std::shared_ptr<double> InRCSPoints, long freqnumber)
|
||||
{
|
||||
this->PolarName = PolarName;
|
||||
this->FreqPointNumber = freqnumber;
|
||||
this->FreqPoints = freqs;
|
||||
this->RCSPoints = InRCSPoints;
|
||||
this->AzAngle = AzAngle;
|
||||
this->IncAngle = IncAngle;
|
||||
}
|
||||
|
||||
LAMPScatterS1BRCSDataNode::~LAMPScatterS1BRCSDataNode()
|
||||
{
|
||||
}
|
||||
|
||||
long LAMPScatterS1BRCSDataNode::getFreqPointNumber()
|
||||
{
|
||||
return this->FreqPointNumber;
|
||||
}
|
||||
|
||||
std::shared_ptr<double> LAMPScatterS1BRCSDataNode::getFreqPoints()
|
||||
{
|
||||
return this->FreqPoints;
|
||||
}
|
||||
|
||||
std::shared_ptr<double> LAMPScatterS1BRCSDataNode::getRCSPoints()
|
||||
{
|
||||
return this->RCSPoints;
|
||||
}
|
||||
|
||||
QString LAMPScatterS1BRCSDataNode::getPolarName()
|
||||
{
|
||||
return this->PolarName;
|
||||
}
|
||||
|
||||
double LAMPScatterS1BRCSDataNode::getAzAngle()
|
||||
{
|
||||
return this->AzAngle;
|
||||
}
|
||||
|
||||
double LAMPScatterS1BRCSDataNode::getIncAngle()
|
||||
{
|
||||
return this->IncAngle;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
LAMPScatterS1BPolarKdTree::LAMPScatterS1BPolarKdTree(std::vector<std::shared_ptr<LAMPScatterS1BRCSDataNode>> inDatalist)
|
||||
{
|
||||
this->KdtreeFlannDatasetPtr = nullptr;
|
||||
this->kdtreeIndexPtr = nullptr;
|
||||
this->datalist = std::vector<std::shared_ptr< LAMPScatterS1BRCSDataNode >>(inDatalist.size());
|
||||
for (long i = 0; i < inDatalist.size(); i++) {
|
||||
this->datalist[i] = inDatalist[i];
|
||||
}
|
||||
|
||||
this->dataset= std::vector<std::vector<double>>(this->datalist.size(), std::vector<double>(2));
|
||||
for (size_t i = 0; i < this->datalist.size(); ++i) {
|
||||
dataset[i][0] = static_cast<double>(this->datalist[i]->getAzAngle());
|
||||
dataset[i][1] = static_cast<double>(this->datalist[i]->getIncAngle());
|
||||
}
|
||||
|
||||
// 构建KDtree
|
||||
this->KdtreeFlannDatasetPtr = std::make_shared < flann::Matrix<double>>(&(this->dataset)[0][0], this->dataset.size(), this->dataset[0].size());
|
||||
this->kdtreeIndexPtr = std::make_shared<flann::Index<flann::L2<double>>>(*(this->KdtreeFlannDatasetPtr.get()), flann::KDTreeSingleIndexParams(1));
|
||||
this->kdtreeIndexPtr->buildIndex();
|
||||
|
||||
|
||||
}
|
||||
|
||||
LAMPScatterS1BPolarKdTree::~LAMPScatterS1BPolarKdTree()
|
||||
{
|
||||
this->datalist.clear();
|
||||
std::vector<std::shared_ptr< LAMPScatterS1BRCSDataNode >>().swap(this->datalist);
|
||||
}
|
||||
|
||||
QVector<std::shared_ptr< LAMPScatterS1BRCSDataNode >> LAMPScatterS1BPolarKdTree::search(double sAzAngle, double sIncAngle, long sPointNumber)
|
||||
{
|
||||
|
||||
// 查询点
|
||||
std::vector<double> queryPoint = { sAzAngle, sIncAngle };
|
||||
flann::Matrix<double> query(&queryPoint[0], 1, queryPoint.size());
|
||||
|
||||
// 存储结果索引和距离
|
||||
std::vector<int> indices(sPointNumber);
|
||||
std::vector<double> dists(sPointNumber);
|
||||
|
||||
// 确保 indices 和 dists 是 flann::Matrix 类型
|
||||
flann::Matrix<int> flannIndices(&indices[0], sPointNumber, 1);
|
||||
flann::Matrix<double> flannDists(&dists[0], sPointNumber, 1);
|
||||
|
||||
// 执行最近邻搜索
|
||||
int result = this->kdtreeIndexPtr->knnSearch(query, flannIndices, flannDists, sPointNumber, flann::FLANN_CHECKS_AUTOTUNED);
|
||||
|
||||
|
||||
if (result > 0) {
|
||||
|
||||
QVector<std::shared_ptr< LAMPScatterS1BRCSDataNode >> searchResults(sPointNumber);
|
||||
for(long i=0;i< sPointNumber;i++){
|
||||
searchResults[i] = datalist[indices[0]];
|
||||
}
|
||||
return searchResults;
|
||||
}
|
||||
else {
|
||||
return QVector<std::shared_ptr< LAMPScatterS1BRCSDataNode >>(0);
|
||||
}
|
||||
}
|
||||
|
||||
int LAMPScatterS1BDataset::OpenFile(QString s1bfilepath)
|
||||
{
|
||||
int ncid;
|
||||
if (nc_open(s1bfilepath.toLocal8Bit().constData(), NC_NOWRITE, &ncid)) {
|
||||
qCritical() << "Failed to open NetCDF file";
|
||||
return 1;
|
||||
}
|
||||
|
||||
int FreqVarid ;
|
||||
int PolVarid ;
|
||||
int AzVarid ;
|
||||
int IncVarid ;
|
||||
int RCSVarid ;
|
||||
if (nc_inq_varid(ncid, "Freq", &FreqVarid)
|
||||
|| nc_inq_varid(ncid, "Pol", &PolVarid)
|
||||
|| nc_inq_varid(ncid, "Az", &AzVarid)
|
||||
|| nc_inq_varid(ncid, "Inc", &IncVarid)
|
||||
|| nc_inq_varid(ncid, "RCS", &RCSVarid)
|
||||
) {
|
||||
qDebug() << "Failed to get variable ";
|
||||
qDebug() << "Freq:\t" << FreqVarid << "\tPol:\t" << PolVarid << "\tAz:\t" << AzVarid << "\tInc:\t" << IncVarid << "\RCS:\t" << RCSVarid;
|
||||
nc_close(ncid);
|
||||
return 1;
|
||||
}
|
||||
|
||||
qDebug() << "[VarID]\t Freq:\t" << FreqVarid << "\tPol:\t" << PolVarid << "\tAz:\t" << AzVarid << "\tInc:\t" << IncVarid << "\RCS:\t" << RCSVarid;
|
||||
|
||||
|
||||
|
||||
// 检查变量维度
|
||||
int Freqndims ;
|
||||
int Polndims ;
|
||||
int Azndims ;
|
||||
int Incndims ;
|
||||
int RCSndims ;
|
||||
if ( nc_inq_varndims(ncid, FreqVarid , &Freqndims)
|
||||
|| nc_inq_varndims(ncid, PolVarid , &Polndims )
|
||||
|| nc_inq_varndims(ncid, AzVarid , &Azndims )
|
||||
|| nc_inq_varndims(ncid, IncVarid , &Incndims )
|
||||
|| nc_inq_varndims(ncid, RCSVarid , &RCSndims )
|
||||
) {
|
||||
qDebug() << "Failed to get number of dimensions for variable";
|
||||
qDebug() << "[Dimensions]\t Freq:\t" << Freqndims
|
||||
<< "\tPol:\t"<< Polndims
|
||||
<< "\tAz:\t" << Azndims
|
||||
<< "\tInc:\t"<< Incndims
|
||||
<< "\RCS:\t" << RCSndims ;
|
||||
|
||||
nc_close(ncid);
|
||||
return 1;
|
||||
}
|
||||
qDebug() << "[Dimensions]\t Freq:\t" << Freqndims
|
||||
<< "\tPol:\t" << Polndims
|
||||
<< "\tAz:\t" << Azndims
|
||||
<< "\tInc:\t" << Incndims
|
||||
<< "\RCS:\t" << RCSndims;
|
||||
|
||||
|
||||
|
||||
// 获取 点数据数量
|
||||
|
||||
std::vector<int> Freqdimids (Freqndims );
|
||||
std::vector<int> Poldimids (Polndims );
|
||||
std::vector<int> Azdimids (Azndims );
|
||||
std::vector<int> Incdimids (Incndims );
|
||||
std::vector<int> RCSdimids (RCSndims );
|
||||
|
||||
if ( nc_inq_vardimid(ncid, FreqVarid , Freqdimids.data())
|
||||
|| nc_inq_vardimid(ncid, PolVarid , Poldimids .data())
|
||||
|| nc_inq_vardimid(ncid, AzVarid , Azdimids .data())
|
||||
|| nc_inq_vardimid(ncid, IncVarid , Incdimids .data())
|
||||
|| nc_inq_vardimid(ncid, RCSVarid , RCSdimids .data())
|
||||
) {
|
||||
qDebug() << "Failed to get dimension IDs for variable";
|
||||
qDebug() << "[Dimensions IDs]\t Freq:\t" << Freqdimids.size()
|
||||
<< "\tPol:\t"<< Poldimids .size()
|
||||
<< "\tAz:\t" << Azdimids .size()
|
||||
<< "\tInc:\t"<< Incdimids .size()
|
||||
<< "\RCS:\t" << RCSdimids .size() ;
|
||||
nc_close(ncid);
|
||||
return 1;
|
||||
}
|
||||
qDebug() << "[Dimensions IDs]\t Freq:\t" << Freqdimids.size()
|
||||
<< "\tPol:\t" << Poldimids.size()
|
||||
<< "\tAz:\t" << Azdimids.size()
|
||||
<< "\tInc:\t" << Incdimids.size()
|
||||
<< "\RCS:\t" << RCSdimids.size();
|
||||
|
||||
|
||||
std::vector<int> Freqdimsize(Freqndims);
|
||||
std::vector<int> Poldimsizes(Polndims);
|
||||
std::vector<int> Azdimsize (Azndims);
|
||||
std::vector<int> Incdimsize (Incndims);
|
||||
std::vector<int> RCSdimsize (RCSndims);
|
||||
|
||||
|
||||
|
||||
for (long i = 0; i < Freqdimids.size(); i++) {
|
||||
size_t datalen_temp;
|
||||
if (nc_inq_dimlen(ncid, Freqdimids[i], &datalen_temp)) {
|
||||
qDebug() << "Failed to get Freqdimsize for variable";
|
||||
}
|
||||
else {
|
||||
Freqdimsize[i] = datalen_temp;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for (long i = 0; i < Poldimids.size(); i++) {
|
||||
size_t datalen_temp;
|
||||
if (nc_inq_dimlen(ncid, Poldimids[i], &datalen_temp)) {
|
||||
qDebug() << "Failed to get Poldimids for variable";
|
||||
}
|
||||
else {
|
||||
Poldimsizes[i] = datalen_temp;
|
||||
}
|
||||
}
|
||||
|
||||
for (long i = 0; i < Azdimids.size(); i++) {
|
||||
size_t datalen_temp;
|
||||
if (nc_inq_dimlen(ncid, Azdimids[i], &datalen_temp)) {
|
||||
qDebug() << "Failed to get Azdimids for variable";
|
||||
}
|
||||
else {
|
||||
Azdimsize[i] = datalen_temp;
|
||||
}
|
||||
}
|
||||
|
||||
for (long i = 0; i < Incdimids.size(); i++) {
|
||||
size_t datalen_temp;
|
||||
if (nc_inq_dimlen(ncid, Incdimids[i], &datalen_temp)) {
|
||||
qDebug() << "Failed to get Incdimids for variable";
|
||||
}
|
||||
else {
|
||||
Incdimsize[i] = datalen_temp;
|
||||
}
|
||||
}
|
||||
|
||||
for (long i = 0; i < RCSdimids.size(); i++) {
|
||||
size_t datalen_temp;
|
||||
if (nc_inq_dimlen(ncid, RCSdimids[i], &datalen_temp)) {
|
||||
qDebug() << "Failed to get RCSdimids for variable";
|
||||
}
|
||||
else {
|
||||
RCSdimsize[i] = datalen_temp;
|
||||
}
|
||||
}
|
||||
|
||||
long Freq_datalen =1;
|
||||
long Pol_datalen =1;
|
||||
long Az_datalen =1;
|
||||
long Inc_datalen =1;
|
||||
long RCS_datalen =1;
|
||||
|
||||
|
||||
for (long i = 0; i < Freqdimsize.size(); i++) {
|
||||
Freq_datalen = Freq_datalen * Freqdimsize[i];
|
||||
}
|
||||
|
||||
for (long i = 0; i < Poldimsizes.size(); i++) {
|
||||
Pol_datalen = Pol_datalen * Poldimsizes[i];
|
||||
}
|
||||
|
||||
for (long i = 0; i < Azdimsize.size(); i++) {
|
||||
Az_datalen = Az_datalen * Azdimsize[i];
|
||||
}
|
||||
|
||||
for (long i = 0; i < Incdimsize.size(); i++) {
|
||||
Inc_datalen = Inc_datalen * Incdimsize[i];
|
||||
}
|
||||
|
||||
for (long i = 0; i < RCSdimsize.size(); i++) {
|
||||
RCS_datalen = RCS_datalen * RCSdimsize[i];
|
||||
}
|
||||
|
||||
qDebug() << "[Data Size]\t Freq:\t" << Freq_datalen
|
||||
<< "\tPol:\t" << Pol_datalen
|
||||
<< "\tAz:\t" << Az_datalen
|
||||
<< "\tInc:\t" << Inc_datalen
|
||||
<< "\RCS:\t" << RCS_datalen;
|
||||
|
||||
// 读取数据
|
||||
std::vector<float> pol_data (Pol_datalen);
|
||||
std::vector<float> inc_data (Inc_datalen);
|
||||
std::vector<float> az_data (Az_datalen );
|
||||
std::vector<float> freq_data (Freq_datalen);
|
||||
std::vector<double> rcs_data (RCS_datalen);
|
||||
|
||||
if ( nc_get_var_float(ncid, FreqVarid, freq_data.data())
|
||||
//|| nc_get_var_float(ncid, PolVarid, pol_data.data())
|
||||
//|| nc_get_var_float(ncid, AzVarid, az_data.data())
|
||||
//|| nc_get_var_float(ncid, IncVarid, inc_data.data())
|
||||
//|| nc_get_var_double(ncid, RCSVarid, rcs_data.data())
|
||||
) {
|
||||
qDebug() << "reading Data for variable";
|
||||
qDebug() << "[Data size ]\t Freq:\t" << pol_data .size()
|
||||
<< "\tPol:\t" << inc_data .size()
|
||||
<< "\tAz:\t" << az_data .size()
|
||||
<< "\tInc:\t" << freq_data .size()
|
||||
<< "\RCS:\t" << rcs_data .size();
|
||||
nc_close(ncid);
|
||||
return 1;
|
||||
}
|
||||
|
||||
qDebug() << "[Data size ]\t Freq:\t" << pol_data.size()
|
||||
<< "\tPol:\t" << inc_data.size()
|
||||
<< "\tAz:\t" << az_data.size()
|
||||
<< "\tInc:\t" << freq_data.size()
|
||||
<< "\RCS:\t" << rcs_data.size();
|
||||
|
||||
|
||||
// 读取Pol的属性
|
||||
QMap<QString, QString> polnamedict = ReadPolAttribution(ncid, PolVarid);
|
||||
if (polnamedict.count()==0) {
|
||||
qDebug() << "Failed to get attribution Number for variable Pol ";
|
||||
nc_close(ncid);
|
||||
return 1;
|
||||
}
|
||||
nc_close(ncid);
|
||||
|
||||
|
||||
// 创建节点
|
||||
for (long PolId = 0; PolId < Pol_datalen; PolId++) { // Polar
|
||||
QString polkey = QString("label_Pol_%1").arg(PolId+1);
|
||||
QString polname = polnamedict[polkey];
|
||||
std::vector<std::shared_ptr< LAMPScatterS1BRCSDataNode >> nodes(0);
|
||||
for (long Azid = 0; Azid < Az_datalen; Azid++) { // Az
|
||||
for (long Incid = 0; Incid < Inc_datalen; Incid++) { // Inc
|
||||
|
||||
std::shared_ptr<double> freqs(new double[Freq_datalen], LAMPScatterS1BdelArrPtr);
|
||||
std::shared_ptr<double> RCSData(new double[Freq_datalen], LAMPScatterS1BdelArrPtr);
|
||||
double Azvalue = az_data[Azid];
|
||||
double Incvalue = inc_data[Azid];
|
||||
for (long freqID = 0; freqID < Freq_datalen; freqID++) { // Freq
|
||||
|
||||
freqs.get()[freqID] = freq_data[freqID];
|
||||
RCSData.get()[freqID] = rcs_data[PolId * Az_datalen * Inc_datalen * Freq_datalen +
|
||||
Azid * Inc_datalen * Freq_datalen +
|
||||
Incid * Freq_datalen +
|
||||
freqID
|
||||
];
|
||||
}
|
||||
|
||||
std::shared_ptr<LAMPScatterS1BRCSDataNode> node(new LAMPScatterS1BRCSDataNode(polname, Azvalue, Incvalue, freqs, RCSData, Freq_datalen));
|
||||
nodes.push_back(node);
|
||||
}
|
||||
}
|
||||
|
||||
std::shared_ptr< LAMPScatterS1BPolarKdTree> treetemp(new LAMPScatterS1BPolarKdTree(nodes));
|
||||
polarRCSTree.insert(polname, treetemp); // KDTree
|
||||
}
|
||||
|
||||
this->FreqPointNumber= Freq_datalen;
|
||||
this->polNumber= Pol_datalen;
|
||||
this->AzNumber = Az_datalen;
|
||||
this->IncNumber = Inc_datalen;
|
||||
|
||||
std::vector<float>().swap(pol_data);
|
||||
std::vector<float>().swap(inc_data);
|
||||
std::vector<float>().swap(az_data);
|
||||
std::vector<float>().swap(freq_data);
|
||||
std::vector<double>().swap(rcs_data);
|
||||
|
||||
std::vector<int>().swap(Freqdimids);
|
||||
std::vector<int>().swap(Poldimids);
|
||||
std::vector<int>().swap(Azdimids);
|
||||
std::vector<int>().swap(Incdimids);
|
||||
std::vector<int>().swap(RCSdimids);
|
||||
|
||||
std::vector<int>().swap(Freqdimsize);
|
||||
std::vector<int>().swap(Poldimsizes);
|
||||
std::vector<int>().swap(Azdimsize);
|
||||
std::vector<int>().swap(Incdimsize);
|
||||
std::vector<int>().swap(RCSdimsize);
|
||||
|
||||
|
||||
return 0;
|
||||
|
||||
|
||||
}
|
||||
|
||||
std::complex<double> LAMPScatterS1BDataset::getRCSData(QString polarName, double AzAngle, double IncAngle, double FreqId)
|
||||
{
|
||||
return std::complex<double>();
|
||||
}
|
||||
|
||||
QMap<QString, QString> LAMPScatterS1BDataset::ReadPolAttribution(int ncid, int pol_varid)
|
||||
{
|
||||
|
||||
int num_atts;
|
||||
if (nc_inq_varnatts(ncid, pol_varid, &num_atts)) {
|
||||
return QMap<QString, QString>();
|
||||
}
|
||||
if (num_atts == 0) {
|
||||
return QMap<QString, QString>();
|
||||
}
|
||||
else {
|
||||
QMap<QString, QString> result;
|
||||
qDebug() << "Attributes for Pol:" ;
|
||||
for (int i = 0; i < num_atts; ++i) {
|
||||
char att_name[NC_MAX_NAME + 1];
|
||||
if (nc_inq_attname(ncid, pol_varid, i, att_name)) {
|
||||
qDebug() << "Error getting attribute name";
|
||||
|
||||
}
|
||||
|
||||
// 获取属性类型和长度
|
||||
nc_type xtype;
|
||||
size_t len;
|
||||
if (nc_inq_att(ncid, pol_varid, att_name, &xtype, &len)) {
|
||||
qDebug() << "Error getting attribute type and length";
|
||||
|
||||
}
|
||||
|
||||
// 根据属性类型读取属性值
|
||||
switch (xtype) {
|
||||
case NC_CHAR: {
|
||||
std::vector<char> att_value(len + 1); // +1 for null terminator
|
||||
if (nc_get_att_text(ncid, pol_varid, att_name, att_value.data())) {
|
||||
qDebug() << "Error reading text attribute";
|
||||
}
|
||||
|
||||
qDebug() << "Attribute Name: " << att_name << ", Type: NC_CHAR, Value: " << att_value.data();
|
||||
result.insert(QString(att_name), QString(att_value.data()));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
std::cout << "Attribute Name: " << att_name << ", Type: Unknown" << std::endl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,90 @@
|
|||
#pragma once
|
||||
#ifndef _LAMPSCATTERS1B_H_
|
||||
#define _LAMPSCATTERS1B_H_
|
||||
#include <stdlib.h>
|
||||
#include <QString>
|
||||
#include <netcdf.h>
|
||||
#include <complex>
|
||||
#include <memory>
|
||||
#include <Qset>
|
||||
#include <QMap>
|
||||
|
||||
#include <flann/flann.hpp>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
inline void LAMPScatterS1BdelArrPtr(void* p)
|
||||
{
|
||||
delete[] p;
|
||||
p = nullptr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
class LAMPScatterS1BRCSDataNode {
|
||||
public:
|
||||
LAMPScatterS1BRCSDataNode(QString PolarName, double AzAngle, double IncAngle,std::shared_ptr<double> freqs, std::shared_ptr<double> RCSPoints,long freqnumber);
|
||||
~LAMPScatterS1BRCSDataNode();
|
||||
|
||||
public:
|
||||
long getFreqPointNumber();
|
||||
std::shared_ptr<double> getFreqPoints();
|
||||
std::shared_ptr<double> getRCSPoints();
|
||||
QString getPolarName();
|
||||
double getAzAngle();
|
||||
double getIncAngle();
|
||||
|
||||
private:
|
||||
double AzAngle;
|
||||
double IncAngle;
|
||||
long FreqPointNumber;
|
||||
std::shared_ptr<double> FreqPoints;
|
||||
std::shared_ptr<double> RCSPoints;
|
||||
QString PolarName;
|
||||
};
|
||||
|
||||
|
||||
class LAMPScatterS1BPolarKdTree {// 这里使用 kdTree作为 检索索引,不需要考虑调整的
|
||||
public:
|
||||
LAMPScatterS1BPolarKdTree(std::vector<std::shared_ptr< LAMPScatterS1BRCSDataNode >> inDatalist);
|
||||
~LAMPScatterS1BPolarKdTree();
|
||||
|
||||
public:
|
||||
QVector<std::shared_ptr< LAMPScatterS1BRCSDataNode >> search(double sAzAngle, double sIncAngle,long sPointNumber);
|
||||
|
||||
private: //kdtree
|
||||
std::vector<std::vector<double>> dataset;
|
||||
std::shared_ptr < flann::Matrix<double>> KdtreeFlannDatasetPtr;
|
||||
std::shared_ptr < flann::Index<flann::L2<double>>> kdtreeIndexPtr;
|
||||
|
||||
|
||||
private:
|
||||
std::vector<std::shared_ptr< LAMPScatterS1BRCSDataNode >> datalist; //所有节点
|
||||
};
|
||||
|
||||
|
||||
class LAMPScatterS1BDataset
|
||||
{
|
||||
public:
|
||||
int OpenFile(QString s1bfilepath);
|
||||
|
||||
public:
|
||||
std::complex<double> getRCSData(QString polarName, double AzAngle, double IncAngle, double FreqId);
|
||||
|
||||
private:
|
||||
long FreqPointNumber;
|
||||
long polNumber;
|
||||
long AzNumber;
|
||||
long IncNumber;
|
||||
QMap<QString,std::shared_ptr<LAMPScatterS1BPolarKdTree>> polarRCSTree;
|
||||
|
||||
private:
|
||||
QMap<QString,QString> ReadPolAttribution(int ncid, int polvarid);
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
|
@ -0,0 +1,10 @@
|
|||
#include "QSimulationRFPCGUI.h"
|
||||
|
||||
QSimulationRFPCGUI::QSimulationRFPCGUI(QWidget *parent)
|
||||
: QDialog(parent)
|
||||
{
|
||||
ui.setupUi(this);
|
||||
}
|
||||
|
||||
QSimulationRFPCGUI::~QSimulationRFPCGUI()
|
||||
{}
|
|
@ -0,0 +1,16 @@
|
|||
#pragma once
|
||||
|
||||
#include <QDialog>
|
||||
#include "ui_QSimulationRFPCGUI.h"
|
||||
|
||||
class QSimulationRFPCGUI : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QSimulationRFPCGUI(QWidget *parent = nullptr);
|
||||
~QSimulationRFPCGUI();
|
||||
|
||||
private:
|
||||
Ui::QSimulationRFPCGUIClass ui;
|
||||
};
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>QSimulationRTPCGUIClass</class>
|
||||
<widget class="QDialog" name="QSimulationRTPCGUIClass">
|
||||
<class>QSimulationRFPCGUIClass</class>
|
||||
<widget class="QDialog" name="QSimulationRFPCGUIClass">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
|
@ -11,7 +11,7 @@
|
|||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>RTPC回波仿真</string>
|
||||
<string>RFPC回波仿真</string>
|
||||
</property>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11"/>
|
|
@ -1,10 +0,0 @@
|
|||
#include "QSimulationRTPCGUI.h"
|
||||
|
||||
QSimulationRTPCGUI::QSimulationRTPCGUI(QWidget *parent)
|
||||
: QDialog(parent)
|
||||
{
|
||||
ui.setupUi(this);
|
||||
}
|
||||
|
||||
QSimulationRTPCGUI::~QSimulationRTPCGUI()
|
||||
{}
|
|
@ -1,16 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include <QDialog>
|
||||
#include "ui_QSimulationRTPCGUI.h"
|
||||
|
||||
class QSimulationRTPCGUI : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QSimulationRTPCGUI(QWidget *parent = nullptr);
|
||||
~QSimulationRTPCGUI();
|
||||
|
||||
private:
|
||||
Ui::QSimulationRTPCGUIClass ui;
|
||||
};
|
|
@ -78,14 +78,14 @@
|
|||
<string>orthinterpRaster</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSARRTPC">
|
||||
<action name="actionSARRFPC">
|
||||
<property name="text">
|
||||
<string>SARRTPC</string>
|
||||
<string>SARRFPC</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSimuSARRTPC">
|
||||
<action name="actionSimuSARRFPC">
|
||||
<property name="text">
|
||||
<string>SimuSARRTPC</string>
|
||||
<string>SimuSARRFPC</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSimuBPImage">
|
||||
|
|
|
@ -68,7 +68,7 @@
|
|||
<IncludePath>.\SimulationSAR;.\GF3ProcessToolbox;.\BaseTool;$(IncludePath)</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||
<IncludePath>.\GPUTool;.\SimulationSAR;.\GF3ProcessToolbox;.\BaseTool;$(oneMKLIncludeDir);$(IncludePath)</IncludePath>
|
||||
<IncludePath>.\LAMPScatterTool;.\GPUTool;.\SimulationSAR;.\GF3ProcessToolbox;.\BaseTool;$(oneMKLIncludeDir);$(IncludePath)</IncludePath>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
|
@ -128,17 +128,18 @@
|
|||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GF3ProcessToolbox\QOrthSlrRaster.cpp" />
|
||||
<ClCompile Include="QSimulationRTPCGUI.cpp" />
|
||||
<ClCompile Include="LAMPScatterTool\LAMPScatterS1B.cpp" />
|
||||
<ClCompile Include="QSimulationRFPCGUI.cpp" />
|
||||
<ClCompile Include="RegisterToolbox.cpp">
|
||||
<DynamicSource Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">input</DynamicSource>
|
||||
<QtMocFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(Filename).moc</QtMocFileName>
|
||||
<DynamicSource Condition="'$(Configuration)|$(Platform)'=='Release|x64'">input</DynamicSource>
|
||||
<QtMocFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(Filename).moc</QtMocFileName>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SimulationSAR\QImageSARRTPC.cpp" />
|
||||
<ClCompile Include="SimulationSAR\QImageSARRFPC.cpp" />
|
||||
<ClCompile Include="SimulationSAR\QSimulationBPImage.cpp" />
|
||||
<ClCompile Include="SimulationSAR\QToolAbstract.cpp" />
|
||||
<ClCompile Include="SimulationSAR\RTPCProcessCls.cpp" />
|
||||
<ClCompile Include="SimulationSAR\RFPCProcessCls.cpp" />
|
||||
<ClCompile Include="SimulationSAR\SARSatelliteSimulationAbstractCls.cpp" />
|
||||
<ClCompile Include="SimulationSAR\SARSimulationTaskSetting.cpp" />
|
||||
<ClCompile Include="SimulationSAR\SatelliteOribtModel.cpp" />
|
||||
|
@ -154,7 +155,7 @@
|
|||
<QtUic Include="Imageshow\ImageShowDialogClass.ui" />
|
||||
<QtUic Include="Imageshow\qcustomplot.ui" />
|
||||
<QtUic Include="QMergeRasterProcessDialog.ui" />
|
||||
<QtUic Include="QSimulationRTPCGUI.ui" />
|
||||
<QtUic Include="QSimulationRFPCGUI.ui" />
|
||||
<QtUic Include="RasterProcessTool.ui" />
|
||||
<QtMoc Include="RasterProcessTool.h" />
|
||||
<ClCompile Include="GF3ProcessToolbox\GF3CalibrationAndGeocodingClass.cpp" />
|
||||
|
@ -171,11 +172,11 @@
|
|||
<ClCompile Include="QMergeRasterProcessDialog.cpp" />
|
||||
<ClCompile Include="RasterProcessTool.cpp" />
|
||||
<ClCompile Include="main.cpp" />
|
||||
<QtUic Include="SimulationSAR\QImageSARRTPC.ui" />
|
||||
<QtUic Include="SimulationSAR\QImageSARRFPC.ui" />
|
||||
<QtUic Include="SimulationSAR\QSimulationBPImage.ui" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<QtMoc Include="SimulationSAR\QImageSARRTPC.h" />
|
||||
<QtMoc Include="SimulationSAR\QImageSARRFPC.h" />
|
||||
<QtMoc Include="SimulationSAR\QToolAbstract.h" />
|
||||
<QtMoc Include="RegisterToolbox.h" />
|
||||
<QtMoc Include="SimulationSAR\QSimulationBPImage.h" />
|
||||
|
@ -190,13 +191,14 @@
|
|||
<ClInclude Include="BaseTool\RasterToolBase.h" />
|
||||
<ClInclude Include="BaseTool\SARSimulationImageL1.h" />
|
||||
<ClInclude Include="BaseTool\stdafx.h" />
|
||||
<ClInclude Include="GPUTool\GPURTPC.cuh" />
|
||||
<ClInclude Include="GPUTool\GPURFPC.cuh" />
|
||||
<ClInclude Include="GPUTool\GPUTBPImage.cuh" />
|
||||
<ClInclude Include="GPUTool\GPUTool.cuh" />
|
||||
<ClInclude Include="LAMPScatterTool\LAMPScatterS1B.h" />
|
||||
<ClInclude Include="SimulationSAR\TBPImageAlgCls.h" />
|
||||
<QtMoc Include="QSimulationRTPCGUI.h" />
|
||||
<QtMoc Include="QSimulationRFPCGUI.h" />
|
||||
<QtMoc Include="GF3ProcessToolbox\QOrthSlrRaster.h" />
|
||||
<ClInclude Include="SimulationSAR\RTPCProcessCls.h" />
|
||||
<ClInclude Include="SimulationSAR\RFPCProcessCls.h" />
|
||||
<ClInclude Include="SimulationSAR\SARSatelliteSimulationAbstractCls.h" />
|
||||
<ClInclude Include="SimulationSAR\SARSimulationTaskSetting.h" />
|
||||
<ClInclude Include="SimulationSAR\SatelliteOribtModel.h" />
|
||||
|
@ -218,7 +220,7 @@
|
|||
<None Include="cpp.hint" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CudaCompile Include="GPUTool\GPURTPC.cu">
|
||||
<CudaCompile Include="GPUTool\GPURFPC.cu">
|
||||
<GenerateRelocatableDeviceCode Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</GenerateRelocatableDeviceCode>
|
||||
</CudaCompile>
|
||||
<CudaCompile Include="GPUTool\GPUTBPImage.cu">
|
||||
|
|
|
@ -36,6 +36,9 @@
|
|||
<Filter Include="GPUTool">
|
||||
<UniqueIdentifier>{c39dcd9f-dfd6-4d94-8912-7a3f5f719385}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="LAMPScatter">
|
||||
<UniqueIdentifier>{cc849de4-c841-40e3-96bc-54ebe034fa4a}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<QtRcc Include="RasterProcessTool.qrc">
|
||||
|
@ -94,7 +97,7 @@
|
|||
<ClCompile Include="GF3ProcessToolbox\QRDOrthProcessClass.cpp">
|
||||
<Filter>GF3ProcessToolbox</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SimulationSAR\RTPCProcessCls.cpp">
|
||||
<ClCompile Include="SimulationSAR\RFPCProcessCls.cpp">
|
||||
<Filter>SimulationSAR</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SimulationSAR\SARSatelliteSimulationAbstractCls.cpp">
|
||||
|
@ -109,7 +112,7 @@
|
|||
<ClCompile Include="SimulationSAR\SigmaDatabase.cpp">
|
||||
<Filter>SimulationSAR</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QSimulationRTPCGUI.cpp">
|
||||
<ClCompile Include="QSimulationRFPCGUI.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GF3ProcessToolbox\QOrthSlrRaster.cpp">
|
||||
|
@ -124,7 +127,7 @@
|
|||
<ClCompile Include="RegisterToolbox.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SimulationSAR\QImageSARRTPC.cpp">
|
||||
<ClCompile Include="SimulationSAR\QImageSARRFPC.cpp">
|
||||
<Filter>SimulationSAR</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SimulationSAR\QSimulationBPImage.cpp">
|
||||
|
@ -160,6 +163,9 @@
|
|||
<ClCompile Include="BaseTool\stdafx.cpp">
|
||||
<Filter>BaseTool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="LAMPScatterTool\LAMPScatterS1B.cpp">
|
||||
<Filter>LAMPScatter</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="GF3ProcessToolbox\GF3CalibrationAndGeocodingClass.h">
|
||||
|
@ -180,7 +186,7 @@
|
|||
<ClInclude Include="GF3ProcessToolbox\WGS84_J2000.h">
|
||||
<Filter>GF3ProcessToolbox</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SimulationSAR\RTPCProcessCls.h">
|
||||
<ClInclude Include="SimulationSAR\RFPCProcessCls.h">
|
||||
<Filter>SimulationSAR</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SimulationSAR\SARSatelliteSimulationAbstractCls.h">
|
||||
|
@ -231,12 +237,15 @@
|
|||
<ClInclude Include="GPUTool\GPUTool.cuh">
|
||||
<Filter>GPUTool</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="GPUTool\GPURTPC.cuh">
|
||||
<ClInclude Include="GPUTool\GPURFPC.cuh">
|
||||
<Filter>GPUTool</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="GPUTool\GPUTBPImage.cuh">
|
||||
<Filter>GPUTool</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="LAMPScatterTool\LAMPScatterS1B.h">
|
||||
<Filter>LAMPScatter</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<QtMoc Include="QMergeRasterProcessDialog.h">
|
||||
|
@ -257,7 +266,7 @@
|
|||
<QtMoc Include="GF3ProcessToolbox\QRDOrthProcessClass.h">
|
||||
<Filter>GF3ProcessToolbox</Filter>
|
||||
</QtMoc>
|
||||
<QtMoc Include="QSimulationRTPCGUI.h">
|
||||
<QtMoc Include="QSimulationRFPCGUI.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</QtMoc>
|
||||
<QtMoc Include="GF3ProcessToolbox\QOrthSlrRaster.h">
|
||||
|
@ -272,7 +281,7 @@
|
|||
<QtMoc Include="RegisterToolbox.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</QtMoc>
|
||||
<QtMoc Include="SimulationSAR\QImageSARRTPC.h">
|
||||
<QtMoc Include="SimulationSAR\QImageSARRFPC.h">
|
||||
<Filter>SimulationSAR</Filter>
|
||||
</QtMoc>
|
||||
<QtMoc Include="SimulationSAR\QSimulationBPImage.h">
|
||||
|
@ -298,13 +307,13 @@
|
|||
<QtUic Include="GF3ProcessToolbox\QRDOrthProcessClass.ui">
|
||||
<Filter>GF3ProcessToolbox</Filter>
|
||||
</QtUic>
|
||||
<QtUic Include="QSimulationRTPCGUI.ui">
|
||||
<QtUic Include="QSimulationRFPCGUI.ui">
|
||||
<Filter>Form Files</Filter>
|
||||
</QtUic>
|
||||
<QtUic Include="GF3ProcessToolbox\QOrthSlrRaster.ui">
|
||||
<Filter>GF3ProcessToolbox</Filter>
|
||||
</QtUic>
|
||||
<QtUic Include="SimulationSAR\QImageSARRTPC.ui">
|
||||
<QtUic Include="SimulationSAR\QImageSARRFPC.ui">
|
||||
<Filter>SimulationSAR</Filter>
|
||||
</QtUic>
|
||||
<QtUic Include="SimulationSAR\QSimulationBPImage.ui">
|
||||
|
@ -315,7 +324,7 @@
|
|||
</QtUic>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CudaCompile Include="GPUTool\GPURTPC.cu">
|
||||
<CudaCompile Include="GPUTool\GPURFPC.cu">
|
||||
<Filter>GPUTool</Filter>
|
||||
</CudaCompile>
|
||||
<CudaCompile Include="GPUTool\GPUTBPImage.cu">
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#include "QComplex2AmpPhase.h"
|
||||
#include "QRDOrthProcessClass.h"
|
||||
#include "QOrthSlrRaster.h"
|
||||
#include "QImageSARRTPC.h"
|
||||
#include "QImageSARRFPC.h"
|
||||
#include "QSimulationBPImage.h"
|
||||
|
||||
GF3ImportDataToolButton::GF3ImportDataToolButton(QWidget* parent) :QToolAbstract(parent)
|
||||
|
@ -94,21 +94,21 @@ void MergeRasterProcessToolButton::excute()
|
|||
dialog->show();
|
||||
}
|
||||
|
||||
SARSimlulationRTPCToolButton::SARSimlulationRTPCToolButton(QWidget* parent) :QToolAbstract(parent)
|
||||
SARSimlulationRFPCToolButton::SARSimlulationRFPCToolButton(QWidget* parent) :QToolAbstract(parent)
|
||||
{
|
||||
this->toolPath = QVector<QString>(0);
|
||||
this->toolPath.push_back(u8"·ÂÕæ¹¤¾ß¿â");
|
||||
this->toolname = QString(u8"RTPC");
|
||||
this->toolname = QString(u8"RFPC");
|
||||
}
|
||||
|
||||
SARSimlulationRTPCToolButton::~SARSimlulationRTPCToolButton()
|
||||
SARSimlulationRFPCToolButton::~SARSimlulationRFPCToolButton()
|
||||
{
|
||||
}
|
||||
|
||||
void SARSimlulationRTPCToolButton::excute()
|
||||
void SARSimlulationRFPCToolButton::excute()
|
||||
{
|
||||
|
||||
QImageSARRTPC* dialog = new QImageSARRTPC();
|
||||
QImageSARRFPC* dialog = new QImageSARRFPC();
|
||||
dialog->show();
|
||||
}
|
||||
|
||||
|
@ -136,7 +136,7 @@ void RegisterPreToolBox(RasterProcessTool* mainWindows)
|
|||
QRDOrthProcessClassToolButton* items3 = new QRDOrthProcessClassToolButton(nullptr);
|
||||
QOrthSlrRasterToolButton* items4 = new QOrthSlrRasterToolButton(nullptr);
|
||||
MergeRasterProcessToolButton* items5 = new MergeRasterProcessToolButton(nullptr);
|
||||
SARSimlulationRTPCToolButton* items6 = new SARSimlulationRTPCToolButton(nullptr);
|
||||
SARSimlulationRFPCToolButton* items6 = new SARSimlulationRFPCToolButton(nullptr);
|
||||
SARSimulationTBPImageToolButton* items7 = new SARSimulationTBPImageToolButton(nullptr);
|
||||
|
||||
emit mainWindows->addBoxToolItemSIGNAL(items1);
|
||||
|
|
|
@ -55,11 +55,11 @@ public slots:
|
|||
|
||||
};
|
||||
|
||||
class SARSimlulationRTPCToolButton : public QToolAbstract {
|
||||
class SARSimlulationRFPCToolButton : public QToolAbstract {
|
||||
Q_OBJECT
|
||||
public:
|
||||
SARSimlulationRTPCToolButton( QWidget* parent = nullptr);
|
||||
~SARSimlulationRTPCToolButton();
|
||||
SARSimlulationRFPCToolButton( QWidget* parent = nullptr);
|
||||
~SARSimlulationRFPCToolButton();
|
||||
public slots:
|
||||
virtual void excute() override;
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
#include "QImageSARRTPC.h"
|
||||
#include "QImageSARRFPC.h"
|
||||
#include <QFileDialog>
|
||||
#include <QMessageBox>
|
||||
#include "RTPCProcessCls.h"
|
||||
#include "RFPCProcessCls.h"
|
||||
#include <boost/thread.hpp>
|
||||
#include <thread>
|
||||
|
||||
QImageSARRTPC::QImageSARRTPC(QWidget *parent)
|
||||
QImageSARRFPC::QImageSARRFPC(QWidget *parent)
|
||||
: QDialog(parent)
|
||||
{
|
||||
ui.setupUi(this);
|
||||
|
@ -30,10 +30,10 @@ QImageSARRTPC::QImageSARRTPC(QWidget *parent)
|
|||
|
||||
}
|
||||
|
||||
QImageSARRTPC::~QImageSARRTPC()
|
||||
QImageSARRFPC::~QImageSARRFPC()
|
||||
{}
|
||||
|
||||
void QImageSARRTPC::onpushButtonRPClieck()
|
||||
void QImageSARRFPC::onpushButtonRPClieck()
|
||||
{
|
||||
// 调用文件选择对话框并选择一个 .tif 文件
|
||||
QString fileName = QFileDialog::getSaveFileName(this,
|
||||
|
@ -49,7 +49,7 @@ void QImageSARRTPC::onpushButtonRPClieck()
|
|||
}
|
||||
}
|
||||
|
||||
void QImageSARRTPC::onpushButtonTPClieck()
|
||||
void QImageSARRFPC::onpushButtonTPClieck()
|
||||
{
|
||||
// 调用文件选择对话框并选择一个 .tif 文件
|
||||
QString fileName = QFileDialog::getSaveFileName(this,
|
||||
|
@ -65,7 +65,7 @@ void QImageSARRTPC::onpushButtonTPClieck()
|
|||
}
|
||||
}
|
||||
|
||||
void QImageSARRTPC::onpushButtonEchoClieck()
|
||||
void QImageSARRFPC::onpushButtonEchoClieck()
|
||||
{
|
||||
// 调用文件选择对话框并选择一个 .tif 文件
|
||||
QString fileName = QFileDialog::getExistingDirectory(this, u8"选择回波存放路径", "");
|
||||
|
@ -79,7 +79,7 @@ void QImageSARRTPC::onpushButtonEchoClieck()
|
|||
|
||||
}
|
||||
|
||||
void QImageSARRTPC::onpushButtongpxmlClieck()
|
||||
void QImageSARRFPC::onpushButtongpxmlClieck()
|
||||
{
|
||||
// 调用文件选择对话框并选择一个 .tif 文件
|
||||
QString fileName = QFileDialog::getSaveFileName(this,
|
||||
|
@ -95,7 +95,7 @@ void QImageSARRTPC::onpushButtongpxmlClieck()
|
|||
}
|
||||
}
|
||||
|
||||
void QImageSARRTPC::onpushButtonTaskxmlClieck()
|
||||
void QImageSARRFPC::onpushButtonTaskxmlClieck()
|
||||
{
|
||||
// 调用文件选择对话框并选择一个 .tif 文件
|
||||
QString fileName = QFileDialog::getSaveFileName(this,
|
||||
|
@ -111,7 +111,7 @@ void QImageSARRTPC::onpushButtonTaskxmlClieck()
|
|||
}
|
||||
}
|
||||
|
||||
void QImageSARRTPC::onpushButtondemClieck()
|
||||
void QImageSARRFPC::onpushButtondemClieck()
|
||||
{
|
||||
// 调用文件选择对话框并选择一个 .tif 文件
|
||||
QString fileName = QFileDialog::getSaveFileName(this,
|
||||
|
@ -127,7 +127,7 @@ void QImageSARRTPC::onpushButtondemClieck()
|
|||
}
|
||||
}
|
||||
|
||||
void QImageSARRTPC::onpushButtonlandcoverClieck()
|
||||
void QImageSARRFPC::onpushButtonlandcoverClieck()
|
||||
{
|
||||
// 调用文件选择对话框并选择一个 .tif 文件
|
||||
QString fileName = QFileDialog::getSaveFileName(this,
|
||||
|
@ -143,7 +143,7 @@ void QImageSARRTPC::onpushButtonlandcoverClieck()
|
|||
}
|
||||
}
|
||||
|
||||
void QImageSARRTPC::onpushButtonHHSigma0Clieck()
|
||||
void QImageSARRFPC::onpushButtonHHSigma0Clieck()
|
||||
{
|
||||
// 调用文件选择对话框并选择一个 .tif 文件
|
||||
QString fileName = QFileDialog::getSaveFileName(this,
|
||||
|
@ -159,7 +159,7 @@ void QImageSARRTPC::onpushButtonHHSigma0Clieck()
|
|||
}
|
||||
}
|
||||
|
||||
void QImageSARRTPC::onpushButtonHVSigma0Clieck()
|
||||
void QImageSARRFPC::onpushButtonHVSigma0Clieck()
|
||||
{
|
||||
// 调用文件选择对话框并选择一个 .tif 文件
|
||||
QString fileName = QFileDialog::getSaveFileName(this,
|
||||
|
@ -175,7 +175,7 @@ void QImageSARRTPC::onpushButtonHVSigma0Clieck()
|
|||
}
|
||||
}
|
||||
|
||||
void QImageSARRTPC::onpushButtonVHSigma0Clieck()
|
||||
void QImageSARRFPC::onpushButtonVHSigma0Clieck()
|
||||
{
|
||||
// 调用文件选择对话框并选择一个 .tif 文件
|
||||
QString fileName = QFileDialog::getSaveFileName(this,
|
||||
|
@ -191,7 +191,7 @@ void QImageSARRTPC::onpushButtonVHSigma0Clieck()
|
|||
}
|
||||
}
|
||||
|
||||
void QImageSARRTPC::onpushButtonVVSigma0Clieck()
|
||||
void QImageSARRFPC::onpushButtonVVSigma0Clieck()
|
||||
{
|
||||
// 调用文件选择对话框并选择一个 .tif 文件
|
||||
QString fileName = QFileDialog::getSaveFileName(this,
|
||||
|
@ -207,7 +207,7 @@ void QImageSARRTPC::onpushButtonVVSigma0Clieck()
|
|||
}
|
||||
}
|
||||
|
||||
void QImageSARRTPC::onBtnaccept()
|
||||
void QImageSARRFPC::onBtnaccept()
|
||||
{
|
||||
|
||||
|
||||
|
@ -242,11 +242,11 @@ void QImageSARRTPC::onBtnaccept()
|
|||
|
||||
long cpucore_num = std::thread::hardware_concurrency();
|
||||
|
||||
RTPCProcessMain(cpucore_num, TransAntPatternFilePath, ReceiveAntPatternFilePath, simulationtaskName, OutEchoPath, GPSXmlPath, TaskXmlPath, demTiffPath, landConverPath, HHSigmaPath, HVSigmaPath, VHSigmaPath, VVSigmaPath);
|
||||
RFPCProcessMain(cpucore_num, TransAntPatternFilePath, ReceiveAntPatternFilePath, simulationtaskName, OutEchoPath, GPSXmlPath, TaskXmlPath, demTiffPath, landConverPath, HHSigmaPath, HVSigmaPath, VHSigmaPath, VVSigmaPath);
|
||||
|
||||
}
|
||||
|
||||
void QImageSARRTPC::onBtnReject()
|
||||
void QImageSARRFPC::onBtnReject()
|
||||
{
|
||||
this->close();
|
||||
}
|
|
@ -1,15 +1,15 @@
|
|||
#pragma once
|
||||
|
||||
#include <QMainWindow>
|
||||
#include "ui_QImageSARRTPC.h"
|
||||
#include "ui_QImageSARRFPC.h"
|
||||
|
||||
class QImageSARRTPC : public QDialog
|
||||
class QImageSARRFPC : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QImageSARRTPC(QWidget *parent = nullptr);
|
||||
~QImageSARRTPC();
|
||||
QImageSARRFPC(QWidget *parent = nullptr);
|
||||
~QImageSARRFPC();
|
||||
|
||||
|
||||
public slots:
|
||||
|
@ -30,5 +30,5 @@ public slots:
|
|||
void onBtnReject();
|
||||
|
||||
private:
|
||||
Ui::QImageSARRTPCClass ui;
|
||||
Ui::QImageSARRFPCClass ui;
|
||||
};
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>QImageSARRTPCClass</class>
|
||||
<widget class="QDialog" name="QImageSARRTPCClass">
|
||||
<class>QImageSARRFPCClass</class>
|
||||
<widget class="QDialog" name="QImageSARRFPCClass">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
|
@ -11,7 +11,7 @@
|
|||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>RTPC回波仿真</string>
|
||||
<string>RFPC回波仿真</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
#include "stdafx.h"
|
||||
#include "RTPCProcessCls.h"
|
||||
#include "RFPCProcessCls.h"
|
||||
#include "BaseConstVariable.h"
|
||||
#include "SARSatelliteSimulationAbstractCls.h"
|
||||
#include "SARSimulationTaskSetting.h"
|
||||
|
@ -21,7 +21,7 @@
|
|||
|
||||
#ifdef __CUDANVCC___
|
||||
#include "GPUTool.cuh"
|
||||
#include "GPURTPC.cuh"
|
||||
#include "GPURFPC.cuh"
|
||||
#endif // __CUDANVCC___
|
||||
#include <Imageshow/ImageShowDialogClass.h>
|
||||
|
||||
|
@ -31,7 +31,7 @@
|
|||
|
||||
|
||||
|
||||
RTPCProcessCls::RTPCProcessCls()
|
||||
RFPCProcessCls::RFPCProcessCls()
|
||||
{
|
||||
this->PluseCount = 0;
|
||||
this->PlusePoint = 0;
|
||||
|
@ -57,67 +57,67 @@ RTPCProcessCls::RTPCProcessCls()
|
|||
|
||||
}
|
||||
|
||||
RTPCProcessCls::~RTPCProcessCls()
|
||||
RFPCProcessCls::~RFPCProcessCls()
|
||||
{
|
||||
}
|
||||
|
||||
void RTPCProcessCls::setTaskSetting(std::shared_ptr < AbstractSARSatelliteModel> TaskSetting)
|
||||
void RFPCProcessCls::setTaskSetting(std::shared_ptr < AbstractSARSatelliteModel> TaskSetting)
|
||||
{
|
||||
this->TaskSetting = std::shared_ptr < AbstractSARSatelliteModel>(TaskSetting);
|
||||
qDebug() << "RTPCProcessCls::setTaskSetting";
|
||||
qDebug() << "RFPCProcessCls::setTaskSetting";
|
||||
}
|
||||
|
||||
void RTPCProcessCls::setEchoSimulationDataSetting(std::shared_ptr<EchoL0Dataset> EchoSimulationData)
|
||||
void RFPCProcessCls::setEchoSimulationDataSetting(std::shared_ptr<EchoL0Dataset> EchoSimulationData)
|
||||
{
|
||||
this->EchoSimulationData = std::shared_ptr<EchoL0Dataset>(EchoSimulationData);
|
||||
qDebug() << "RTPCProcessCls::setEchoSimulationDataSetting";
|
||||
qDebug() << "RFPCProcessCls::setEchoSimulationDataSetting";
|
||||
}
|
||||
|
||||
void RTPCProcessCls::setTaskFileName(QString EchoFileName)
|
||||
void RFPCProcessCls::setTaskFileName(QString EchoFileName)
|
||||
{
|
||||
this->TaskFileName = EchoFileName;
|
||||
}
|
||||
|
||||
void RTPCProcessCls::setDEMTiffPath(QString DEMTiffPath)
|
||||
void RFPCProcessCls::setDEMTiffPath(QString DEMTiffPath)
|
||||
{
|
||||
this->DEMTiffPath = DEMTiffPath;
|
||||
}
|
||||
|
||||
void RTPCProcessCls::setLandCoverPath(QString LandCoverPath)
|
||||
void RFPCProcessCls::setLandCoverPath(QString LandCoverPath)
|
||||
{
|
||||
this->LandCoverPath = LandCoverPath;
|
||||
}
|
||||
|
||||
void RTPCProcessCls::setHHSigmaPath(QString HHSigmaPath)
|
||||
void RFPCProcessCls::setHHSigmaPath(QString HHSigmaPath)
|
||||
{
|
||||
this->HHSigmaPath = HHSigmaPath;
|
||||
}
|
||||
|
||||
void RTPCProcessCls::setHVSigmaPath(QString HVSigmaPath)
|
||||
void RFPCProcessCls::setHVSigmaPath(QString HVSigmaPath)
|
||||
{
|
||||
this->HVSigmaPath = HVSigmaPath;
|
||||
}
|
||||
|
||||
void RTPCProcessCls::setVHSigmaPath(QString VHSigmaPath)
|
||||
void RFPCProcessCls::setVHSigmaPath(QString VHSigmaPath)
|
||||
{
|
||||
this->VHSigmaPath = VHSigmaPath;
|
||||
}
|
||||
|
||||
void RTPCProcessCls::setVVSigmaPath(QString VVSigmaPath)
|
||||
void RFPCProcessCls::setVVSigmaPath(QString VVSigmaPath)
|
||||
{
|
||||
this->VVSigmaPath = VVSigmaPath;
|
||||
}
|
||||
|
||||
void RTPCProcessCls::setOutEchoPath(QString OutEchoPath)
|
||||
void RFPCProcessCls::setOutEchoPath(QString OutEchoPath)
|
||||
{
|
||||
this->OutEchoPath = OutEchoPath;
|
||||
}
|
||||
|
||||
|
||||
|
||||
ErrorCode RTPCProcessCls::Process(long num_thread)
|
||||
ErrorCode RFPCProcessCls::Process(long num_thread)
|
||||
{
|
||||
// RTPC 算法
|
||||
// RFPC 算法
|
||||
qDebug() << u8"params init ....";
|
||||
ErrorCode stateCode = this->InitParams();
|
||||
if (stateCode != ErrorCode::SUCCESS) {
|
||||
|
@ -130,7 +130,7 @@ ErrorCode RTPCProcessCls::Process(long num_thread)
|
|||
return stateCode;
|
||||
}
|
||||
else {}
|
||||
qDebug() << "RTPCMainProcess";
|
||||
qDebug() << "RFPCMainProcess";
|
||||
|
||||
stateCode = this->InitEchoMaskArray();
|
||||
if (stateCode != ErrorCode::SUCCESS) {
|
||||
|
@ -139,8 +139,10 @@ ErrorCode RTPCProcessCls::Process(long num_thread)
|
|||
else {}
|
||||
qDebug() << "InitEchoMaskArray";
|
||||
|
||||
//stateCode = this->RTPCMainProcess(num_thread);
|
||||
stateCode = this->RTPCMainProcess_GPU( );
|
||||
//stateCode = this->RFPCMainProcess(num_thread);
|
||||
// 初始化回波
|
||||
this->EchoSimulationData->initEchoArr(std::complex<float>(0, 0));
|
||||
stateCode = this->RFPCMainProcess_GPU( );
|
||||
|
||||
if (stateCode != ErrorCode::SUCCESS) {
|
||||
return stateCode;
|
||||
|
@ -151,13 +153,13 @@ ErrorCode RTPCProcessCls::Process(long num_thread)
|
|||
return ErrorCode::SUCCESS;
|
||||
}
|
||||
|
||||
ErrorCode RTPCProcessCls::InitParams()
|
||||
ErrorCode RFPCProcessCls::InitParams()
|
||||
{
|
||||
if (nullptr == this->TaskSetting || this->DEMTiffPath.isEmpty() ||
|
||||
this->LandCoverPath.isEmpty() || this->HHSigmaPath.isEmpty() ||
|
||||
this->HVSigmaPath.isEmpty() || this->VHSigmaPath.isEmpty() ||
|
||||
this->VVSigmaPath.isEmpty()) {
|
||||
return ErrorCode::RTPC_PARAMSISEMPTY;
|
||||
return ErrorCode::RFPC_PARAMSISEMPTY;
|
||||
}
|
||||
else {
|
||||
|
||||
|
@ -180,6 +182,7 @@ ErrorCode RTPCProcessCls::InitParams()
|
|||
this->EchoSimulationData->setNearRange(this->TaskSetting->getNearRange());
|
||||
this->EchoSimulationData->setFarRange(this->TaskSetting->getFarRange());
|
||||
this->EchoSimulationData->setFs(this->TaskSetting->getFs());
|
||||
this->EchoSimulationData->setBandwidth(this->TaskSetting->getBandWidth());
|
||||
this->EchoSimulationData->setCenterAngle(this->TaskSetting->getCenterLookAngle());
|
||||
this->EchoSimulationData->setLookSide(this->TaskSetting->getIsRightLook() ? "R" : "L");
|
||||
this->EchoSimulationData->OpenOrNew(OutEchoPath, TaskFileName, PluseCount, PlusePoint);
|
||||
|
@ -192,7 +195,7 @@ ErrorCode RTPCProcessCls::InitParams()
|
|||
return ErrorCode::SUCCESS;
|
||||
}
|
||||
|
||||
ErrorCode RTPCProcessCls::DEMPreprocess()
|
||||
ErrorCode RFPCProcessCls::DEMPreprocess()
|
||||
{
|
||||
|
||||
this->demxyzPath = QDir(tmpfolderPath).filePath("demxyz.bin");
|
||||
|
@ -307,7 +310,7 @@ ErrorCode RTPCProcessCls::DEMPreprocess()
|
|||
return ErrorCode::SUCCESS;
|
||||
}
|
||||
|
||||
ErrorCode RTPCProcessCls::InitEchoMaskArray()
|
||||
ErrorCode RFPCProcessCls::InitEchoMaskArray()
|
||||
{
|
||||
QString name = this->EchoSimulationData->getSimulationTaskName();
|
||||
this->OutEchoMaskPath = JoinPath(this->OutEchoPath, name + "_echomask.bin");
|
||||
|
@ -336,11 +339,9 @@ ErrorCode RTPCProcessCls::InitEchoMaskArray()
|
|||
}
|
||||
|
||||
|
||||
ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
||||
ErrorCode RFPCProcessCls::RFPCMainProcess_GPU( )
|
||||
{
|
||||
|
||||
double widthSpace = LIGHTSPEED / 2 / this->TaskSetting->getFs();
|
||||
|
||||
double prf_time = 0;
|
||||
double dt = 1 / this->TaskSetting->getPRF();// 获取每次脉冲的时间间隔
|
||||
bool antflag = true; // 计算天线方向图
|
||||
|
@ -348,6 +349,12 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
Point3 GERpoint{ 0,0,0 };
|
||||
double R = 0;
|
||||
double dem_row = 0, dem_col = 0, dem_alt = 0;
|
||||
QVector<double> freqlist = this->TaskSetting->getFreqList();
|
||||
|
||||
float* freqpoints=(float*)mallocCUDAHost(sizeof(float)*freqlist.size());
|
||||
for (long ii = 0; ii < freqlist.size(); ii++) {
|
||||
freqpoints[ii] = freqlist[ii];
|
||||
}
|
||||
|
||||
long double imageStarttime = 0;
|
||||
imageStarttime = this->TaskSetting->getSARImageStartTime();
|
||||
|
@ -373,11 +380,7 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
std::shared_ptr<AbstractRadiationPattern> TransformPattern = this->TaskSetting->getTransformRadiationPattern(); // 发射天线方向图
|
||||
std::shared_ptr<AbstractRadiationPattern> ReceivePattern = this->TaskSetting->getReceiveRadiationPattern(); // 接收天线方向图
|
||||
long PlusePoint = this->EchoSimulationData->getPlusePoints();
|
||||
|
||||
// 初始化回波
|
||||
this->EchoSimulationData->initEchoArr(std::complex<float>(0, 0));
|
||||
POLARTYPEENUM polartype = this->TaskSetting->getPolarType();
|
||||
|
||||
gdalImage echoMaskImg(this->OutEchoMaskPath);
|
||||
|
||||
|
||||
|
@ -385,7 +388,7 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
QMessageBox::information(this, u8"程序提示", u8"请确定安装了CUDA库");
|
||||
#else
|
||||
|
||||
// RTPC CUDA版本
|
||||
// RFPC CUDA版本
|
||||
if (pluseCount * 4 * 18 > Memory1MB * 100) {
|
||||
long max = Memory1MB * 100 / 4 / 20 / PluseCount;
|
||||
QMessageBox::warning(nullptr, u8"仿真场景太大了", u8"当前频点数下,脉冲数量最多为:" + QString::number(max));
|
||||
|
@ -431,7 +434,6 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
testOutAntPatternTrans("TransPattern.bin", h_TantPattern, TstartTheta, Tdtheta, TstartPhi, Tdphi, Tthetanum, Tphinum);
|
||||
for (long i = 0; i < Tthetanum; i++) {
|
||||
for (long j = 0; j < Tphinum; j++) {
|
||||
|
@ -578,21 +580,6 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
d_demsloper_z=(float* )mallocCUDADevice( sizeof(float) * blokline * tempDemCols);
|
||||
d_demsloper_angle= (float*)mallocCUDADevice( sizeof(float) * blokline * tempDemCols);
|
||||
|
||||
float* h_dem_theta; // 天线方向图
|
||||
float* h_dem_phi;
|
||||
|
||||
float* d_dem_theta;
|
||||
float* d_dem_phi;
|
||||
|
||||
h_dem_theta=(float* )mallocCUDAHost( sizeof(float) * blokline * tempDemCols);
|
||||
h_dem_phi= (float*)mallocCUDAHost(sizeof(float) * blokline * tempDemCols);
|
||||
|
||||
d_dem_theta= (float*)mallocCUDADevice( sizeof(float) * blokline * tempDemCols);// 9
|
||||
d_dem_phi= (float*)mallocCUDADevice( sizeof(float) * blokline * tempDemCols);
|
||||
|
||||
HostToDevice((void*)h_dem_theta, (void*)d_dem_theta, sizeof(float) * blokline * tempDemCols);
|
||||
HostToDevice((void*)h_dem_phi, (void*)d_dem_phi, sizeof(float) * blokline * tempDemCols);
|
||||
|
||||
// 提前声明参数变量
|
||||
float* h_R;// 辐射方向
|
||||
float* h_localangle;//入射角
|
||||
|
@ -605,37 +592,9 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
d_R= (float*)mallocCUDADevice(sizeof(float) * blokline * tempDemCols);
|
||||
d_localangle= (float*)mallocCUDADevice( sizeof(float) * blokline * tempDemCols);
|
||||
|
||||
float* h_RstX;
|
||||
float* h_RstY;
|
||||
float* h_RstZ;
|
||||
|
||||
float* d_RstX;
|
||||
float* d_RstY;
|
||||
float* d_RstZ;
|
||||
|
||||
h_RstX=(float*)mallocCUDAHost( sizeof(float) * blokline * tempDemCols);
|
||||
h_RstY=(float*)mallocCUDAHost( sizeof(float) * blokline * tempDemCols);
|
||||
h_RstZ=(float*)mallocCUDAHost( sizeof(float) * blokline * tempDemCols); // 14
|
||||
|
||||
d_RstX=(float*)mallocCUDADevice( sizeof(float) * blokline * tempDemCols);
|
||||
d_RstY=(float*)mallocCUDADevice( sizeof(float) * blokline * tempDemCols);
|
||||
d_RstZ=(float*)mallocCUDADevice( sizeof(float) * blokline * tempDemCols);
|
||||
|
||||
float* h_sigma0;
|
||||
float* h_TransAnt;
|
||||
float* h_ReciveAnt;
|
||||
|
||||
float* d_sigma0;
|
||||
float* d_TransAnt;
|
||||
float* d_ReciveAnt;
|
||||
|
||||
h_sigma0= (float*)mallocCUDAHost( sizeof(float)* blokline* tempDemCols);
|
||||
h_TransAnt = (float*)mallocCUDAHost(sizeof(float) * blokline * tempDemCols);
|
||||
h_ReciveAnt = (float*)mallocCUDAHost(sizeof(float) * blokline * tempDemCols); // 17
|
||||
|
||||
d_sigma0= (float*)mallocCUDADevice( sizeof(float) * blokline * tempDemCols);
|
||||
d_TransAnt= (float*)mallocCUDADevice( sizeof(float) * blokline * tempDemCols);
|
||||
d_ReciveAnt= (float*)mallocCUDADevice( sizeof(float) * blokline * tempDemCols);
|
||||
float* h_gain = (float*)mallocCUDAHost( sizeof(float)* blokline* tempDemCols);
|
||||
float* d_gain = (float*)mallocCUDADevice( sizeof(float) * blokline * tempDemCols);
|
||||
|
||||
// 回波
|
||||
cuComplex* h_echo;
|
||||
|
@ -643,30 +602,11 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
h_echo=(cuComplex*)mallocCUDAHost(sizeof(cuComplex) * blokline * tempDemCols);
|
||||
d_echo=(cuComplex*)mallocCUDADevice( sizeof(cuComplex) * blokline * tempDemCols); //19
|
||||
|
||||
long* h_FreqID;
|
||||
long* d_FreqID;
|
||||
h_FreqID=(long*)mallocCUDAHost( sizeof(long) * blokline * tempDemCols);
|
||||
d_FreqID=(long*)mallocCUDADevice( sizeof(long) * blokline * tempDemCols); //21
|
||||
|
||||
// 地表覆盖类型
|
||||
Eigen::MatrixXd landcover = Eigen::MatrixXd::Zero(blokline, tempDemCols);// 地面覆盖类型
|
||||
long* h_demcls = (long*)mallocCUDAHost(sizeof(long) * blokline * tempDemCols);
|
||||
long* d_demcls = (long*)mallocCUDADevice(sizeof(long) * blokline * tempDemCols);
|
||||
|
||||
float* h_amp=(float*)mallocCUDAHost(sizeof(float) * blokline * tempDemCols);
|
||||
float* d_amp=(float*)mallocCUDADevice(sizeof(float) * blokline * tempDemCols);
|
||||
|
||||
float* h_echoAmp = (float*)mallocCUDAHost(sizeof(float) * blokline * tempDemCols);
|
||||
float* d_echoAmp = (float*)mallocCUDADevice(sizeof(float) * blokline * tempDemCols);
|
||||
|
||||
|
||||
float* h_echoPhase = (float*)mallocCUDAHost(sizeof(float) * blokline * tempDemCols);
|
||||
float* d_echoPhase = (float*)mallocCUDADevice(sizeof(float) * blokline * tempDemCols);
|
||||
|
||||
//float* h_R = (float*)mallocCUDAHost(sizeof(float) * blokline * tempDemCols);
|
||||
//float* d_R = (float*)mallocCUDADevice(sizeof(float) * blokline * tempDemCols);
|
||||
|
||||
|
||||
for (startline = 0; startline < demRow; startline = startline + blokline) {
|
||||
long newblokline = blokline;
|
||||
if ((startline + blokline) >= demRow) {
|
||||
|
@ -691,23 +631,11 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
FreeCUDAHost(h_demsloper_y); FreeCUDADevice(d_demsloper_y);
|
||||
FreeCUDAHost(h_demsloper_z); FreeCUDADevice(d_demsloper_z); //6
|
||||
FreeCUDAHost(h_demsloper_angle); FreeCUDADevice(d_demsloper_angle);//7
|
||||
FreeCUDAHost(h_dem_theta); FreeCUDADevice(d_dem_theta);
|
||||
FreeCUDAHost(h_dem_phi); FreeCUDADevice(d_dem_phi); //9
|
||||
FreeCUDAHost(h_R); FreeCUDADevice(d_R);
|
||||
FreeCUDAHost(h_localangle); FreeCUDADevice(d_localangle); //11
|
||||
FreeCUDAHost(h_RstX); FreeCUDADevice(d_RstX);
|
||||
FreeCUDAHost(h_RstY); FreeCUDADevice(d_RstY);
|
||||
FreeCUDAHost(h_RstZ); FreeCUDADevice(d_RstZ); //14
|
||||
FreeCUDAHost(h_sigma0); FreeCUDADevice(d_sigma0);
|
||||
FreeCUDAHost(h_TransAnt); FreeCUDADevice(d_TransAnt);
|
||||
FreeCUDAHost(h_ReciveAnt); FreeCUDADevice(d_ReciveAnt); //17
|
||||
FreeCUDAHost(h_gain); FreeCUDADevice(d_gain);
|
||||
FreeCUDAHost(h_echo); FreeCUDADevice(d_echo);//19
|
||||
FreeCUDAHost(h_FreqID); FreeCUDADevice(d_FreqID);//20
|
||||
FreeCUDAHost(h_demcls); FreeCUDADevice(d_demcls);
|
||||
FreeCUDAHost(h_amp); FreeCUDADevice(d_amp);
|
||||
FreeCUDAHost(h_echoAmp); FreeCUDADevice(d_echoAmp);
|
||||
FreeCUDAHost(h_echoPhase); FreeCUDADevice(d_echoPhase);
|
||||
|
||||
|
||||
h_dem_x = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_dem_y = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
|
@ -716,25 +644,12 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
h_demsloper_y = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_demsloper_z = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_demsloper_angle = (float*)mallocCUDAHost(sizeof(float) * blokline * tempDemCols);
|
||||
h_dem_theta = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_dem_phi = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_R = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_localangle = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_RstX = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_RstY = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_RstZ = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_sigma0 = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_TransAnt = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_ReciveAnt = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_gain = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_echo = (cuComplex*)mallocCUDAHost(sizeof(cuComplex) * newblokline * tempDemCols);
|
||||
h_FreqID = (long*)mallocCUDAHost(sizeof(long) * newblokline * tempDemCols);
|
||||
h_demcls = (long*)mallocCUDAHost(sizeof(long) * newblokline * tempDemCols);
|
||||
h_amp = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_R = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_echoAmp = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
h_echoPhase = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
|
||||
|
||||
|
||||
d_dem_x=(float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
d_dem_y=(float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
|
@ -743,23 +658,12 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
d_demsloper_y=(float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
d_demsloper_z=(float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);//6
|
||||
d_demsloper_angle=(float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);//7
|
||||
d_dem_theta=(float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
d_dem_phi=(float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);// 9
|
||||
d_R=(float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
d_localangle=(float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
d_RstX=(float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
d_RstY=(float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
d_RstZ=(float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
d_sigma0=(float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
d_TransAnt=(float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
d_ReciveAnt=(float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
d_gain =(float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
d_echo=(cuComplex*)mallocCUDADevice(sizeof(cuComplex) * newblokline * tempDemCols);
|
||||
d_FreqID=(long*)mallocCUDADevice(sizeof(long) * newblokline * tempDemCols);
|
||||
d_demcls = (long*)mallocCUDADevice(sizeof(long) * newblokline * tempDemCols);
|
||||
d_amp = (float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
d_R = (float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
d_echoAmp = (float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
d_echoPhase = (float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
}
|
||||
//# pragma omp parallel for
|
||||
for (long i = 0; i < newblokline; i++) {
|
||||
|
@ -772,9 +676,6 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
h_demsloper_z[i * demxyz.width + j] = float(demsloper_z(i, j));
|
||||
h_demsloper_angle[i * demxyz.width + j] = float(sloperAngle(i, j));
|
||||
h_demcls[i * demxyz.width + j] = clamap[long(landcover(i, j))];
|
||||
h_amp[i * demxyz.width + j] = 0.0f;
|
||||
h_echoAmp[i * demxyz.width + j] = 0.0f;
|
||||
h_echoPhase[i * demxyz.width + j] = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -785,12 +686,7 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
HostToDevice((void*)h_demsloper_y, (void*)d_demsloper_y, sizeof(float) * newblokline * tempDemCols);
|
||||
HostToDevice((void*)h_demsloper_z, (void*)d_demsloper_z, sizeof(float) * newblokline * tempDemCols);
|
||||
HostToDevice((void*)h_demsloper_angle, (void*)d_demsloper_angle, sizeof(float) * newblokline * tempDemCols);
|
||||
HostToDevice((void*)h_dem_theta, (void*)d_dem_theta, sizeof(float) * newblokline * tempDemCols);
|
||||
HostToDevice((void*)h_dem_phi, (void*)d_dem_phi, sizeof(float) * newblokline* tempDemCols);
|
||||
HostToDevice((void*)h_demcls, (void*)d_demcls, sizeof(long) * newblokline* tempDemCols);
|
||||
HostToDevice((void*)h_amp, (void*)d_amp, sizeof(float) * newblokline* tempDemCols);
|
||||
HostToDevice((void*)h_echoAmp, (void*)d_echoAmp, sizeof(float) * newblokline* tempDemCols);
|
||||
HostToDevice((void*)h_echoPhase, (void*)d_echoPhase, sizeof(float) * newblokline* tempDemCols);
|
||||
|
||||
|
||||
|
||||
|
@ -805,13 +701,27 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
|
||||
long pixelcount = newblokline * tempDemCols;
|
||||
|
||||
long echoblockline = Memory1MB * 2000 / 8 / 2 / PlusePoint;
|
||||
long echoblockline = Memory1MB / 8 / 2 / PlusePoint*2;
|
||||
long startprfid = 0;
|
||||
|
||||
int grid_size = (pixelcount + BLOCK_SIZE - 1) / BLOCK_SIZE;
|
||||
|
||||
cuComplex* d_echosum_temp = (cuComplex*)mallocCUDADevice(sizeof(cuComplex) * grid_size);
|
||||
|
||||
for (startprfid = 0; startprfid < pluseCount; startprfid = startprfid + echoblockline) {
|
||||
long templine = startprfid + echoblockline < PluseCount ? echoblockline : PluseCount - startprfid;
|
||||
std::shared_ptr<std::complex<float>> echotemp = this->EchoSimulationData->getEchoArr(startprfid, templine);
|
||||
Eigen::MatrixXd echoMasktemp = echoMaskImg.getData(startprfid,0, templine,echoMaskImg.width,1);
|
||||
// 创建内存
|
||||
cuComplex* h_echoData_tempblock = (cuComplex*)mallocCUDAHost(sizeof(cuComplex) * templine * PlusePoint);
|
||||
cuComplex* d_echoData_tempblock = (cuComplex*)mallocCUDADevice(sizeof(cuComplex) * templine * PlusePoint);
|
||||
|
||||
for (long tempprfid = 0; tempprfid < templine; tempprfid++) {
|
||||
for (long j = 0; j < PlusePoint; j++) {
|
||||
h_echoData_tempblock[tempprfid * PlusePoint + j] = make_cuComplex(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
HostToDevice(h_echoData_tempblock, d_echoData_tempblock, sizeof(cuComplex) * templine * PlusePoint); // 回波复制
|
||||
|
||||
for (long tempprfid = 0; tempprfid < templine; tempprfid++) {
|
||||
{// 计算
|
||||
long prfid = tempprfid + startprfid;
|
||||
|
@ -837,99 +747,43 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
#ifdef __PRFDEBUG__
|
||||
std::cout << "ant Position=[" << antpx << "," << antpy << "," << antpz << "]" << std::endl;
|
||||
#endif // __PRFDEBUG__
|
||||
// 计算距离、局地入射角、增益
|
||||
CUDARFPC_Caluation_R_Gain(
|
||||
antpx, antpy, antpz, // 天线的坐标
|
||||
d_dem_x, d_dem_y, d_dem_z, pixelcount, // 地面坐标
|
||||
d_demsloper_x, d_demsloper_y, d_demsloper_z, // 地表坡度矢量
|
||||
|
||||
CUDAmake_VectorA_B(antpx, antpy, antpz, d_dem_x, d_dem_y, d_dem_z, d_RstX, d_RstY, d_RstZ, pixelcount); // Rst = Rs - Rt; 地面-> 指向
|
||||
CUDANorm_Vector(d_RstX, d_RstY, d_RstZ, d_R, pixelcount); // R
|
||||
CUDAcosAngle_VA_AB(d_RstX, d_RstY, d_RstZ, d_demsloper_x, d_demsloper_y, d_demsloper_z, d_localangle, pixelcount); // 局部入射角 (线性)
|
||||
SatelliteAntDirectNormal(d_RstX, d_RstY, d_RstZ,
|
||||
antXaxisX, antXaxisY, antXaxisZ,
|
||||
antYaxisX, antYaxisY, antYaxisZ,
|
||||
antZaxisX, antZaxisY, antZaxisZ,
|
||||
antdirectx, antdirecty, antdirectz,
|
||||
d_dem_theta, d_dem_phi, pixelcount);// 计算角度
|
||||
antXaxisX, antXaxisY, antXaxisZ, // 天线坐标系的X轴
|
||||
antYaxisX, antYaxisY, antYaxisZ,// 天线坐标系的Y轴
|
||||
antZaxisX, antZaxisY, antZaxisZ,// 天线坐标系的Z轴
|
||||
antdirectx, antdirecty, antdirectz,// 天线的指向
|
||||
|
||||
#ifdef __PRFDEBUG__
|
||||
d_TantPattern, TstartTheta, TstartPhi, Tdtheta, Tdphi, Tthetanum, Tphinum, // 发射天线方向图
|
||||
d_RantPattern, RstartTheta, RstartPhi, Rdtheta, Rdphi, Rthetanum, Rphinum,//接收天线方向图
|
||||
NearRange, FarRange,
|
||||
d_R, // 输出距离
|
||||
d_localangle, // 输出局地入射角
|
||||
d_gain // 输出增益
|
||||
);
|
||||
// 计算某个具体回波
|
||||
|
||||
CUDA_Norm_Vector(d_RstX, d_RstY, d_RstZ, d_R, pixelcount);
|
||||
|
||||
|
||||
DeviceToHost(h_RstX, d_RstX, sizeof(float)* pixelcount);
|
||||
DeviceToHost(h_RstY, d_RstY, sizeof(float)* pixelcount);
|
||||
DeviceToHost(h_RstZ, d_RstZ, sizeof(float)* pixelcount);
|
||||
DeviceToHost(h_R, d_R, sizeof(float)* pixelcount);
|
||||
|
||||
testOutAmpArr(QString("h_RstX_%1.bin").arg(prfid), h_RstX, newblokline, tempDemCols);
|
||||
testOutAmpArr(QString("h_RstY_%1.bin").arg(prfid), h_RstY, newblokline, tempDemCols);
|
||||
testOutAmpArr(QString("h_RstZ_%1.bin").arg(prfid), h_RstZ, newblokline, tempDemCols);
|
||||
testOutAmpArr(QString("h_R_%1.bin").arg(prfid), h_R, newblokline, tempDemCols);
|
||||
|
||||
#endif // __PRFDEBUG__
|
||||
AntPatternInterpGain(d_dem_theta, d_dem_phi, d_TransAnt, d_TantPattern, TstartTheta, TstartPhi, Tdtheta, Tdphi, Tthetanum, Tphinum, pixelcount);
|
||||
AntPatternInterpGain(d_dem_theta, d_dem_phi, d_ReciveAnt, d_RantPattern, RstartTheta, RstartPhi, Rdtheta, Rdphi, Rthetanum, Rphinum, pixelcount);
|
||||
#ifdef __PRFDEBUG__
|
||||
DeviceToHost(h_dem_theta, d_dem_theta, sizeof(float)* pixelcount); // 从GPU -> 主机
|
||||
DeviceToHost(h_dem_phi, d_dem_phi, sizeof(float)* pixelcount);
|
||||
DeviceToHost(h_localangle, d_localangle, sizeof(float)* pixelcount);
|
||||
|
||||
testOutAmpArr(QString("h_localangle_%1.bin").arg(prfid), h_localangle, newblokline, tempDemCols);
|
||||
|
||||
DeviceToHost(h_TransAnt, d_TransAnt, sizeof(float)* pixelcount);
|
||||
DeviceToHost(h_ReciveAnt, d_ReciveAnt, sizeof(float)* pixelcount);
|
||||
|
||||
testOutAmpArr(QString("ant_theta_%1.bin").arg(prfid), h_dem_theta, newblokline, tempDemCols);
|
||||
testOutAmpArr(QString("ant_phi_%1.bin").arg(prfid), h_dem_phi, newblokline, tempDemCols);
|
||||
testOutAmpArr(QString("antPattern_Trans_%1.bin").arg(prfid), h_TransAnt, newblokline, tempDemCols);
|
||||
testOutAmpArr(QString("antPattern_Receive_%1.bin").arg(prfid), h_ReciveAnt, newblokline, tempDemCols);
|
||||
#endif // __PRFDEBUG__
|
||||
// 插值后向散射系数
|
||||
CUDAInterpSigma(d_demcls, d_amp, d_localangle, pixelcount, d_clsSigmaParam, clamapid);
|
||||
// 计算强度
|
||||
CUDACalculationEchoAmp(d_amp, d_TransAnt, d_ReciveAnt, d_R, Pt, d_echoAmp, pixelcount);
|
||||
// 计算相位
|
||||
CUDACalculationEchoPhase(d_R,lamda, d_echoPhase, pixelcount);
|
||||
// 计算回波
|
||||
CUDACombinationEchoAmpAndPhase(d_R, d_echoAmp, d_echoPhase,NearRange,Fs,PlusePoint,d_echo,d_FreqID,pixelcount);
|
||||
#ifdef __PRFDEBUG__
|
||||
DeviceToHost(h_amp, d_amp, sizeof(float) * pixelcount);
|
||||
DeviceToHost(h_echoAmp, d_echoAmp, sizeof(float) * pixelcount);
|
||||
DeviceToHost(h_echoPhase, d_echoPhase, sizeof(float) * pixelcount);
|
||||
|
||||
testOutAmpArr(QString("amp_%1.bin").arg(prfid), h_amp, newblokline, tempDemCols);
|
||||
testOutAmpArr(QString("echoAmp_%1.bin").arg(prfid), h_echoAmp, newblokline, tempDemCols);
|
||||
testOutAmpArr(QString("echoPhase_%1.bin").arg(prfid), h_echoPhase, newblokline, tempDemCols);
|
||||
#endif // __PRFDEBUG__
|
||||
|
||||
DeviceToHost(h_echo, d_echo, sizeof(cuComplex) * pixelcount);
|
||||
DeviceToHost(h_FreqID, d_FreqID, sizeof(long) * pixelcount);
|
||||
//DeviceToHost(h_amp, d_amp, sizeof(float) * pixelcount);
|
||||
|
||||
#ifdef __PRFDEBUG__
|
||||
float* h_echoAmp_real = (float*)mallocCUDAHost(sizeof(float) * pixelcount);
|
||||
float* h_echoAmp_imag = (float*)mallocCUDAHost(sizeof(float) * pixelcount);
|
||||
float* h_echoAmp_abs = (float*)mallocCUDAHost(sizeof(float) * pixelcount);
|
||||
|
||||
for (long freqi = 0; freqi < pixelcount; freqi++) {
|
||||
h_echoAmp_real[freqi] = h_echoAmp[freqi].x;
|
||||
h_echoAmp_imag[freqi] = h_echoAmp[freqi].y;
|
||||
h_echoAmp_abs[freqi] =20*std::log10(std::abs(std::complex<double>(h_echoAmp_real[freqi], h_echoAmp_imag[freqi])));
|
||||
for (long freqid = 0; freqid < freqlist.size(); freqid++) {
|
||||
float freqpoint = freqlist[freqid];
|
||||
CUDARFPC_Target_Freq_EchoData(d_R,
|
||||
d_localangle,
|
||||
d_gain,
|
||||
d_demcls,
|
||||
pixelcount,
|
||||
Pt, freqpoint,
|
||||
d_clsSigmaParam, clamapid,
|
||||
d_echo);
|
||||
// 数据求和
|
||||
long tempechoid = tempprfid * PlusePoint + freqid;
|
||||
CUDA_DemEchoSUM_NoMalloc(d_echo, pixelcount,
|
||||
d_echosum_temp, grid_size,
|
||||
d_echoData_tempblock, tempechoid
|
||||
);
|
||||
}
|
||||
testOutAmpArr(QString("h_echoAmp_real_%1.bin").arg(prfid), h_echoAmp_real, newblokline, tempDemCols);
|
||||
testOutAmpArr(QString("h_echoAmp_imag_%1.bin").arg(prfid), h_echoAmp_imag, newblokline, tempDemCols);
|
||||
testOutAmpArr(QString("h_echoAmp_absdB_%1.bin").arg(prfid), h_echoAmp_abs, newblokline, tempDemCols);
|
||||
testOutClsArr(QString("h_FreqID_%1.bin").arg(prfid), h_FreqID, newblokline, tempDemCols);
|
||||
|
||||
FreeCUDAHost(h_echoAmp_real);
|
||||
FreeCUDAHost(h_echoAmp_imag);
|
||||
|
||||
#endif // __PRFDEBUG__
|
||||
for (long freqi = 0; freqi < pixelcount; freqi++) {
|
||||
long pluseid = h_FreqID[freqi];
|
||||
echotemp.get()[tempprfid * PlusePoint + pluseid] =
|
||||
echotemp.get()[tempprfid * PlusePoint + pluseid]
|
||||
+ std::complex<float>(h_echo[freqi].x, h_echo[freqi].y);
|
||||
echoMasktemp(tempprfid, pluseid)=echoMasktemp(tempprfid, pluseid) + 1;
|
||||
}
|
||||
|
||||
if (prfid % 1000 == 0) {
|
||||
std::cout << "[" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString() << "] dem:\t" << startline << "\t-\t" << startline + newblokline << "\t:\t pluse :\t" << prfid << " / " << pluseCount << std::endl;
|
||||
}
|
||||
|
@ -944,11 +798,26 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
DeviceToHost(h_echoData_tempblock, d_echoData_tempblock, sizeof(cuComplex) * templine * PlusePoint); // 回波复制
|
||||
std::shared_ptr<std::complex<float>> echotemp = this->EchoSimulationData->getEchoArr(startprfid, templine);
|
||||
for (long tempprfid = 0; tempprfid < templine; tempprfid++) {
|
||||
for (long j = 0; j < PlusePoint; j++) {
|
||||
echotemp.get()[tempprfid * PlusePoint + j] = echotemp.get()[tempprfid * PlusePoint + j]
|
||||
+ std::complex<float>(h_echoData_tempblock[tempprfid * PlusePoint + j].x,
|
||||
h_echoData_tempblock[tempprfid * PlusePoint + j].y);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
echoMaskImg.saveImage(echoMasktemp, startprfid, 0, 1);
|
||||
this->EchoSimulationData->saveEchoArr(echotemp, startprfid, templine);
|
||||
|
||||
}
|
||||
|
||||
FreeCUDADevice(d_echosum_temp);
|
||||
|
||||
|
||||
}
|
||||
|
||||
std::cout << std::endl;
|
||||
|
@ -964,24 +833,12 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
FreeCUDAHost(h_demsloper_angle); FreeCUDADevice(d_demsloper_angle); //7
|
||||
|
||||
// 临时变量释放
|
||||
FreeCUDAHost(h_dem_theta); FreeCUDADevice(d_dem_theta);
|
||||
FreeCUDAHost(h_dem_phi); FreeCUDADevice(d_dem_phi);// 9
|
||||
FreeCUDAHost(h_R); FreeCUDADevice(d_R);
|
||||
FreeCUDAHost(h_localangle); FreeCUDADevice(d_localangle); //11
|
||||
|
||||
FreeCUDAHost(h_RstX); FreeCUDADevice(d_RstX);
|
||||
FreeCUDAHost(h_RstY); FreeCUDADevice(d_RstY);
|
||||
FreeCUDAHost(h_RstZ); FreeCUDADevice(d_RstZ); //14
|
||||
|
||||
FreeCUDAHost(h_sigma0); FreeCUDADevice(d_sigma0);
|
||||
FreeCUDAHost(h_TransAnt); FreeCUDADevice(d_TransAnt);
|
||||
FreeCUDAHost(h_ReciveAnt); FreeCUDADevice(d_ReciveAnt); //17
|
||||
FreeCUDAHost(h_echoAmp); FreeCUDADevice(d_echoAmp);//19
|
||||
FreeCUDAHost(h_FreqID); FreeCUDADevice(d_FreqID);//20
|
||||
|
||||
FreeCUDAHost(h_gain); FreeCUDADevice(d_gain);
|
||||
FreeCUDAHost(h_demcls); FreeCUDADevice(d_demcls);
|
||||
FreeCUDAHost(h_amp); FreeCUDADevice(d_amp);
|
||||
|
||||
FreeCUDAHost(freqpoints);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -989,7 +846,7 @@ ErrorCode RTPCProcessCls::RTPCMainProcess_GPU( )
|
|||
return ErrorCode::SUCCESS;
|
||||
}
|
||||
|
||||
std::shared_ptr<SatelliteOribtNode[]> RTPCProcessCls::getSatelliteOribtNodes(double prf_time, double dt, bool antflag, long double imageStarttime)
|
||||
std::shared_ptr<SatelliteOribtNode[]> RFPCProcessCls::getSatelliteOribtNodes(double prf_time, double dt, bool antflag, long double imageStarttime)
|
||||
{
|
||||
|
||||
|
||||
|
@ -1049,7 +906,7 @@ std::shared_ptr<SatelliteOribtNode[]> RTPCProcessCls::getSatelliteOribtNodes(dou
|
|||
}
|
||||
|
||||
|
||||
void RTPCProcessMain(long num_thread, QString TansformPatternFilePath, QString ReceivePatternFilePath, QString simulationtaskName, QString OutEchoPath, QString GPSXmlPath, QString TaskXmlPath, QString demTiffPath, QString LandCoverPath, QString HHSigmaPath, QString HVSigmaPath, QString VHSigmaPath, QString VVSigmaPath)
|
||||
void RFPCProcessMain(long num_thread, QString TansformPatternFilePath, QString ReceivePatternFilePath, QString simulationtaskName, QString OutEchoPath, QString GPSXmlPath, QString TaskXmlPath, QString demTiffPath, QString LandCoverPath, QString HHSigmaPath, QString HVSigmaPath, QString VHSigmaPath, QString VVSigmaPath)
|
||||
{
|
||||
|
||||
std::shared_ptr < AbstractSARSatelliteModel> task = ReadSimulationSettingsXML(TaskXmlPath);
|
||||
|
@ -1106,19 +963,19 @@ void RTPCProcessMain(long num_thread, QString TansformPatternFilePath, QString R
|
|||
task->setSatelliteOribtModel(SatelliteOribtModel);
|
||||
}
|
||||
|
||||
qDebug() << "-------------- RTPC init ---------------------------------------";
|
||||
RTPCProcessCls rtpc;
|
||||
rtpc.setTaskSetting(task); //qDebug() << "setTaskSetting";
|
||||
rtpc.setTaskFileName(simulationtaskName); //qDebug() << "setTaskFileName";
|
||||
rtpc.setDEMTiffPath(demTiffPath); //qDebug() << "setDEMTiffPath";
|
||||
rtpc.setLandCoverPath(LandCoverPath); //qDebug() << "setLandCoverPath";
|
||||
rtpc.setHHSigmaPath(HHSigmaPath); //qDebug() << "setHHSigmaPath";
|
||||
rtpc.setHVSigmaPath(HVSigmaPath); //qDebug() << "setHVSigmaPath";
|
||||
rtpc.setVHSigmaPath(VHSigmaPath); //qDebug() << "setVHSigmaPath";
|
||||
rtpc.setVVSigmaPath(VVSigmaPath); //qDebug() << "setVVSigmaPath";
|
||||
rtpc.setOutEchoPath(OutEchoPath); //qDebug() << "setOutEchoPath";
|
||||
qDebug() << "-------------- RTPC start---------------------------------------";
|
||||
rtpc.Process(num_thread); // 处理程序
|
||||
qDebug() << "-------------- RTPC end---------------------------------------";
|
||||
qDebug() << "-------------- RFPC init ---------------------------------------";
|
||||
RFPCProcessCls RFPC;
|
||||
RFPC.setTaskSetting(task); //qDebug() << "setTaskSetting";
|
||||
RFPC.setTaskFileName(simulationtaskName); //qDebug() << "setTaskFileName";
|
||||
RFPC.setDEMTiffPath(demTiffPath); //qDebug() << "setDEMTiffPath";
|
||||
RFPC.setLandCoverPath(LandCoverPath); //qDebug() << "setLandCoverPath";
|
||||
RFPC.setHHSigmaPath(HHSigmaPath); //qDebug() << "setHHSigmaPath";
|
||||
RFPC.setHVSigmaPath(HVSigmaPath); //qDebug() << "setHVSigmaPath";
|
||||
RFPC.setVHSigmaPath(VHSigmaPath); //qDebug() << "setVHSigmaPath";
|
||||
RFPC.setVVSigmaPath(VVSigmaPath); //qDebug() << "setVVSigmaPath";
|
||||
RFPC.setOutEchoPath(OutEchoPath); //qDebug() << "setOutEchoPath";
|
||||
qDebug() << "-------------- RFPC start---------------------------------------";
|
||||
RFPC.Process(num_thread); // 处理程序
|
||||
qDebug() << "-------------- RFPC end---------------------------------------";
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
/*****************************************************************//**
|
||||
* \file RTPCProcessCls.h
|
||||
* \file RFPCProcessCls.h
|
||||
* \brief 距离时域脉冲相干法(Range Time domain Pulse Coherent)处理流程与相关文件
|
||||
*
|
||||
* 参考资料
|
||||
|
@ -28,11 +28,11 @@
|
|||
#include "EchoDataFormat.h"
|
||||
#include "SigmaDatabase.h"
|
||||
|
||||
class RTPCProcessCls
|
||||
class RFPCProcessCls
|
||||
{
|
||||
public:
|
||||
RTPCProcessCls();
|
||||
~RTPCProcessCls();
|
||||
RFPCProcessCls();
|
||||
~RFPCProcessCls();
|
||||
public:
|
||||
void setTaskSetting(std::shared_ptr < AbstractSARSatelliteModel> TaskSetting);
|
||||
void setEchoSimulationDataSetting(std::shared_ptr < EchoL0Dataset> EchoSimulationData);
|
||||
|
@ -48,7 +48,7 @@ public:
|
|||
|
||||
private:
|
||||
std::shared_ptr <AbstractSARSatelliteModel> TaskSetting; // 仿真任务设置
|
||||
std::shared_ptr <EchoL0Dataset> EchoSimulationData; // GPSÊý¾Ý
|
||||
std::shared_ptr <EchoL0Dataset> EchoSimulationData; // »Ø²¨ÉèÖÃ
|
||||
std::shared_ptr<SigmaDatabase> SigmaDatabasePtr;
|
||||
long PluseCount; // 脉冲数量
|
||||
long PlusePoint; // 脉冲点数
|
||||
|
@ -58,11 +58,9 @@ private:
|
|||
QString HVSigmaPath;
|
||||
QString VHSigmaPath;
|
||||
QString VVSigmaPath;
|
||||
|
||||
QString OutEchoPath; // 输出回波路径
|
||||
QString TaskFileName;
|
||||
QString tmpfolderPath;
|
||||
|
||||
QString OutEchoMaskPath;
|
||||
|
||||
public:
|
||||
|
@ -71,8 +69,8 @@ private: //
|
|||
ErrorCode InitParams();// 1. 初始化参数
|
||||
ErrorCode DEMPreprocess(); // 2. 裁剪DEM范围
|
||||
ErrorCode InitEchoMaskArray();
|
||||
//ErrorCode RTPCMainProcess(long num_thread);
|
||||
ErrorCode RTPCMainProcess_GPU();
|
||||
//ErrorCode RFPCMainProcess(long num_thread);
|
||||
ErrorCode RFPCMainProcess_GPU();
|
||||
|
||||
std::shared_ptr<SatelliteOribtNode[]> getSatelliteOribtNodes(double prf_time, double dt, bool antflag, long double imageStarttime);
|
||||
|
||||
|
@ -82,5 +80,5 @@ private:
|
|||
QString demsloperPath;
|
||||
};
|
||||
|
||||
void RTPCProcessMain(long num_thread,QString TansformPatternFilePath,QString ReceivePatternFilePath,QString simulationtaskName, QString OutEchoPath, QString GPSXmlPath,QString TaskXmlPath,QString demTiffPath, QString LandCoverPath, QString HHSigmaPath, QString HVSigmaPath, QString VHSigmaPath, QString VVSigmaPath);
|
||||
void RFPCProcessMain(long num_thread,QString TansformPatternFilePath,QString ReceivePatternFilePath,QString simulationtaskName, QString OutEchoPath, QString GPSXmlPath,QString TaskXmlPath,QString demTiffPath, QString LandCoverPath, QString HHSigmaPath, QString HVSigmaPath, QString VHSigmaPath, QString VVSigmaPath);
|
||||
|
|
@ -199,6 +199,30 @@ double AbstractSARSatelliteModel::getBandWidth()
|
|||
return 0.0;
|
||||
}
|
||||
|
||||
QVector<double> AbstractSARSatelliteModel::getFreqList()
|
||||
{
|
||||
double bandwidth = this->getBandWidth(); // 频率范围
|
||||
double centerFreq = this->getCenterFreq(); // 中心频率
|
||||
double nearR = this->getNearRange();
|
||||
double farR = this->getFarRange();
|
||||
// 计算分辨率
|
||||
double Resolution = LIGHTSPEED / 2.0 / bandwidth; // 计算分辨率
|
||||
double freqpoints = (farR - nearR) / Resolution + 1;
|
||||
|
||||
double minFreq = centerFreq - bandwidth / 2.0;// 最小频率
|
||||
double maxFreq = minFreq + bandwidth;
|
||||
|
||||
double deltaFreq = bandwidth / (freqpoints - 1);
|
||||
|
||||
QVector<double> freqlist(freqpoints);
|
||||
|
||||
for (long i = 0; i < freqpoints; i++) {
|
||||
freqlist[i] = minFreq + i * deltaFreq;
|
||||
}
|
||||
return freqlist;
|
||||
|
||||
}
|
||||
|
||||
POLARTYPEENUM AbstractSARSatelliteModel::getPolarType()
|
||||
{
|
||||
return POLARTYPEENUM();
|
||||
|
@ -219,13 +243,18 @@ double AbstractSARSatelliteModel::getPRF()
|
|||
|
||||
double AbstractSARSatelliteModel::getFs()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
double NearRange = this->getNearRange();
|
||||
double FarRange = this->getFarRange();
|
||||
|
||||
void AbstractSARSatelliteModel::setFs(double Fs)
|
||||
{
|
||||
}
|
||||
QVector<double> freqpoints = this->getFreqList();
|
||||
long freqNum = freqpoints.size();
|
||||
|
||||
double timeRange = 2 * (FarRange - NearRange) / LIGHTSPEED;
|
||||
double fs = freqNum / timeRange;
|
||||
|
||||
return fs;
|
||||
}
|
||||
|
||||
double AbstractSARSatelliteModel::getCenterLookAngle()
|
||||
{
|
||||
return 0.0;
|
||||
|
|
|
@ -259,6 +259,9 @@ public: //
|
|||
virtual void setBandWidth(double bandwidth); // 带宽范围
|
||||
virtual double getBandWidth();
|
||||
|
||||
virtual QVector<double> getFreqList(); // 获取频点列表
|
||||
|
||||
|
||||
virtual POLARTYPEENUM getPolarType();// 极化类型
|
||||
virtual void setPolarType(POLARTYPEENUM type);
|
||||
public: // 设置PRF、FS
|
||||
|
@ -266,7 +269,7 @@ public: //
|
|||
virtual double getPRF();
|
||||
|
||||
virtual double getFs(); // 距离向采样频率
|
||||
virtual void setFs(double Fs);
|
||||
|
||||
|
||||
virtual double getCenterLookAngle() ;
|
||||
virtual void setCenterLookAngle(double angle) ;
|
||||
|
|
|
@ -143,16 +143,6 @@ double SARSimulationTaskSetting::getPRF()
|
|||
return this->PRF;
|
||||
}
|
||||
|
||||
double SARSimulationTaskSetting::getFs()
|
||||
{
|
||||
return this->Fs;
|
||||
}
|
||||
|
||||
void SARSimulationTaskSetting::setFs(double Fs)
|
||||
{
|
||||
this->Fs = Fs;
|
||||
}
|
||||
|
||||
void SARSimulationTaskSetting::setTransformRadiationPattern(std::shared_ptr<AbstractRadiationPattern> radiationPanttern)
|
||||
{
|
||||
this->TransformRadiationPattern = radiationPanttern;
|
||||
|
@ -231,12 +221,14 @@ std::shared_ptr<AbstractSARSatelliteModel> ReadSimulationSettingsXML(QString xml
|
|||
QDomElement bandWidth = taskSensor.firstChildElement("bandWidth");
|
||||
QDomElement centerLookAngle = taskSensor.firstChildElement("centerLookAngle");
|
||||
QDomElement prf = taskSensor.firstChildElement("prf");
|
||||
QDomElement fs = taskSensor.firstChildElement("fs");
|
||||
//QDomElement fs = taskSensor.firstChildElement("fs");
|
||||
QDomElement polar = taskSensor.firstChildElement("polar");
|
||||
QDomElement nearRange = taskSensor.firstChildElement("nearRange");
|
||||
QDomElement farRange = taskSensor.firstChildElement("farRange");
|
||||
QDomElement lookDirection = taskSensor.firstChildElement("lookDirection");
|
||||
if (imagingMode.isNull() || radarCenterFrequency.isNull() || bandWidth.isNull() || centerLookAngle.isNull() || prf.isNull() || fs.isNull() || polar.isNull() || nearRange.isNull() || farRange.isNull() )
|
||||
if (imagingMode.isNull() || radarCenterFrequency.isNull() || bandWidth.isNull()
|
||||
|| centerLookAngle.isNull() || prf.isNull() || polar.isNull()
|
||||
|| nearRange.isNull() || farRange.isNull() )
|
||||
{
|
||||
qDebug() << QString::fromStdString(errorCode2errInfo(ErrorCode::XMLNOTFOUNDElEMENT));
|
||||
return nullptr;
|
||||
|
@ -295,7 +287,7 @@ std::shared_ptr<AbstractSARSatelliteModel> ReadSimulationSettingsXML(QString xml
|
|||
taskSetting->setBandWidth(bandWidth.text().toDouble());
|
||||
taskSetting->setCenterFreq(radarCenterFrequency.text().toDouble()); // ÖÐÐÄÆµÂÊ
|
||||
taskSetting->setPRF(prf.text().toDouble()); // PRF
|
||||
taskSetting->setFs(fs.text().toDouble()); //Fs
|
||||
//taskSetting->setFs(fs.text().toDouble()); //Fs
|
||||
taskSetting->setNearRange(nearRange.text().toDouble()); // NearRange
|
||||
taskSetting->setFarRange(farRange.text().toDouble()); // FarRange
|
||||
taskSetting->setIsRightLook(isR);
|
||||
|
|
|
@ -78,13 +78,9 @@ private:
|
|||
public: // 设置PRF、FS
|
||||
virtual void setPRF(double prf) override; // 方位向采样频率
|
||||
virtual double getPRF() override;
|
||||
|
||||
virtual double getFs() override; // ¾àÀëÏò²ÉÑùƵÂÊ
|
||||
virtual void setFs(double Fs) override;
|
||||
|
||||
|
||||
private:
|
||||
double PRF;
|
||||
double Fs;
|
||||
|
||||
|
||||
public:// 天线方向图
|
||||
|
|
|
@ -608,8 +608,8 @@ ErrorCode TBPImageAlgCls::ProcessCPU(long num_thread)
|
|||
long startLine = 0;
|
||||
long processValue = 0;
|
||||
long processNumber = 0;
|
||||
QProgressDialog progressDialog(u8"RTPC回波生成中", u8"终止", 0, rowCount);
|
||||
progressDialog.setWindowTitle(u8"RTPC回波生成中");
|
||||
QProgressDialog progressDialog(u8"RFPC回波生成中", u8"终止", 0, rowCount);
|
||||
progressDialog.setWindowTitle(u8"RFPC回波生成中");
|
||||
progressDialog.setWindowModality(Qt::WindowModal);
|
||||
progressDialog.setAutoClose(true);
|
||||
progressDialog.setValue(0);
|
||||
|
|
Loading…
Reference in New Issue