检查错误
parent
f991dc3b99
commit
0517044995
|
@ -547,8 +547,8 @@ __global__ void CUDAKernel_RFPC_Computer_R_Gain(
|
|||
double* ReceiveAntpattern, double Receivestarttheta, double Receivestartphi, double Receivedtheta, double Receivedphi, int Receivethetapoints, int Receivephipoints,//接收天线方向图
|
||||
double NearR, double FarR, // 距离范围
|
||||
CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen,// 插值图
|
||||
double* outR, // 输出距离
|
||||
double* outAmp
|
||||
float* outR, // 输出距离
|
||||
float* outAmp
|
||||
) {
|
||||
long idx = blockIdx.x * blockDim.x + threadIdx.x;
|
||||
if (idx < len) {
|
||||
|
@ -628,8 +628,8 @@ __global__ void CUDAKernel_RFPC_Computer_R_Gain(
|
|||
|
||||
ampGain = TansantPatternGain * antPatternGain;
|
||||
ampGain = ampGain / (powf(4 * LAMP_CUDA_PI, 2) * powf(RstR, 4)); // 反射强度
|
||||
outAmp[idx] = ampGain * Pt * sigma0;
|
||||
outR[idx] = RstR - refPhaseRange;
|
||||
outAmp[idx] = float(ampGain * Pt * sigma0);
|
||||
outR[idx] = float(RstR - refPhaseRange);
|
||||
}
|
||||
else {
|
||||
}
|
||||
|
@ -675,13 +675,13 @@ __global__ void CUDAKernel_PRF_CalFreqEcho(
|
|||
}
|
||||
|
||||
|
||||
__global__ void CUDAKernel_PRF_GeneratorEcho(double* Rarr, double* ampArr, long blocknum, long pixelcount, double* factorj, long freqnum,
|
||||
__global__ void CUDAKernel_PRF_GeneratorEcho(float* Rarr, float* ampArr, long blocknum, long pixelcount, double* factorj, long freqnum,
|
||||
double nearR, double farR, double* echo_real, double* echo_imag, long prfid) //11
|
||||
{
|
||||
//// 假定共享内存大小为49152 byte
|
||||
//// 假定每个Block 线程数大小为 32
|
||||
__shared__ double s_R[GPU_SHARE_MEMORY]; // 距离 32*12 * 8= 49.2kb
|
||||
__shared__ double s_Amp[GPU_SHARE_MEMORY]; // 振幅 3072 * 8= 49.2kb 49.2*2 = 98.4 < 100 KB
|
||||
__shared__ float s_R[GPU_SHARE_MEMORY]; // 距离 32*12 * 8= 49.2kb
|
||||
__shared__ float s_Amp[GPU_SHARE_MEMORY]; // 振幅 3072 * 8= 49.2kb 49.2*2 = 98.4 < 100 KB
|
||||
|
||||
const int bid = blockIdx.x; // 获取 grid网格编号ID
|
||||
const int tid = threadIdx.x;// 获取 单个 block 中的线程ID
|
||||
|
@ -956,7 +956,7 @@ extern "C" void CUDA_RFPC_MainBlock(
|
|||
double NearR, double FarR, // 距离范围
|
||||
CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen,// 插值图
|
||||
double* out_echoReal, double* out_echoImag,// 输出回波
|
||||
double* temp_R, double* temp_amp
|
||||
float* temp_R, float* temp_amp
|
||||
//, double* temp_phi, double* temp_real, double* temp_imag// 临时变量
|
||||
) {
|
||||
|
||||
|
@ -992,9 +992,9 @@ extern "C" void CUDA_RFPC_MainBlock(
|
|||
);
|
||||
cudaDeviceSynchronize();
|
||||
|
||||
blocknum = pixelcount / GPU_SHARE_MEMORY + 1;
|
||||
blocknum = (pixelcount+ GPU_SHARE_STEP-1) / GPU_SHARE_STEP ;
|
||||
blockSize = 32; // 每个块的线程数
|
||||
numBlocks = (pixelcount + GPU_SHARE_MEMORY - 1) / GPU_SHARE_MEMORY; // 网格数量
|
||||
numBlocks = (pixelcount + GPU_SHARE_STEP - 1) / GPU_SHARE_STEP; // 网格数量
|
||||
|
||||
CUDAKernel_PRF_GeneratorEcho << <numBlocks, blockSize >> > (temp_R, temp_amp, blocknum, pixelcount,
|
||||
factorj, freqnum,
|
||||
|
|
|
@ -81,7 +81,7 @@ extern __global__ void CUDA_SatelliteAntDirectNormal(double* RstX, double* RstY,
|
|||
|
||||
|
||||
|
||||
extern __global__ void CUDAKernel_PRF_GeneratorEcho(double* Rarr, double* ampArr, long blocknum, long pixelcount, double* factorj, long freqnum,
|
||||
extern __global__ void CUDAKernel_PRF_GeneratorEcho(float* Rarr, float* ampArr, long blocknum, long pixelcount, double* factorj, long freqnum,
|
||||
double nearR, double farR, double* echo_real, double* echo_imag, long prfid);
|
||||
|
||||
|
||||
|
@ -163,7 +163,7 @@ extern "C" void CUDA_RFPC_MainBlock(
|
|||
double NearR, double FarR, // 距离范围
|
||||
CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen,// 插值图
|
||||
double* out_echoReal,double* out_echoImag,// 输出回波
|
||||
double* temp_R,double* temp_amp
|
||||
float* temp_R, float* temp_amp
|
||||
//,double* temp_phi ,double* temp_real, double* tmep_imag// 临时变量
|
||||
);
|
||||
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
#ifndef _GPUTOOL_H_
|
||||
#define _GPUTOOL_H_
|
||||
#ifdef __CUDANVCC___
|
||||
|
||||
#include "BaseConstVariable.h"
|
||||
|
||||
#ifdef __CUDANVCC___
|
||||
#include <cuda_runtime.h>
|
||||
#include <device_launch_parameters.h>
|
||||
#include <cublas_v2.h>
|
||||
|
@ -16,8 +18,8 @@
|
|||
#define BLOCK_SIZE 256
|
||||
|
||||
// 默认显存分布
|
||||
#define GPU_SHARE_MEMORY 2816
|
||||
#define GPU_SHARE_STEP 88
|
||||
#define GPU_SHARE_MEMORY 5632
|
||||
#define GPU_SHARE_STEP 176
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -341,6 +341,140 @@ ErrorCode RFPCProcessCls::InitEchoMaskArray()
|
|||
}
|
||||
|
||||
|
||||
std::shared_ptr<SatelliteOribtNode[]> RFPCProcessCls::getSatelliteOribtNodes(double prf_time, double dt, bool antflag, long double imageStarttime)
|
||||
{
|
||||
|
||||
|
||||
std::shared_ptr<SatelliteOribtNode[]> sateOirbtNodes(new SatelliteOribtNode[this->PluseCount], delArrPtr);
|
||||
{ // 姿态计算不同
|
||||
qDebug() << "Ant position finished started !!!";
|
||||
// 计算姿态
|
||||
std::shared_ptr<double> antpos = this->EchoSimulationData->getAntPos();
|
||||
double dAt = 1e-6;
|
||||
double prf_time_dt = 0;
|
||||
Landpoint InP{ 0,0,0 }, outP{ 0,0,0 };
|
||||
for (long prf_id = 0; prf_id < this->PluseCount; prf_id++) {
|
||||
prf_time = dt * prf_id;
|
||||
prf_time_dt = prf_time + dAt;
|
||||
SatelliteOribtNode sateOirbtNode;
|
||||
SatelliteOribtNode sateOirbtNode_dAt;
|
||||
this->TaskSetting->getSatelliteOribtNode(prf_time, sateOirbtNode, antflag);
|
||||
this->TaskSetting->getSatelliteOribtNode(prf_time_dt, sateOirbtNode_dAt, antflag);
|
||||
|
||||
sateOirbtNode.AVx = (sateOirbtNode_dAt.Vx - sateOirbtNode.Vx) / dAt; // 加速度
|
||||
sateOirbtNode.AVy = (sateOirbtNode_dAt.Vy - sateOirbtNode.Vy) / dAt;
|
||||
sateOirbtNode.AVz = (sateOirbtNode_dAt.Vz - sateOirbtNode.Vz) / dAt;
|
||||
|
||||
InP.lon = sateOirbtNode.Px;
|
||||
InP.lat = sateOirbtNode.Py;
|
||||
InP.ati = sateOirbtNode.Pz;
|
||||
|
||||
outP = XYZ2LLA(InP);
|
||||
|
||||
antpos.get()[prf_id * 19 + 0] = prf_time + imageStarttime;
|
||||
antpos.get()[prf_id * 19 + 1] = sateOirbtNode.Px;
|
||||
antpos.get()[prf_id * 19 + 2] = sateOirbtNode.Py;
|
||||
antpos.get()[prf_id * 19 + 3] = sateOirbtNode.Pz;
|
||||
antpos.get()[prf_id * 19 + 4] = sateOirbtNode.Vx;
|
||||
antpos.get()[prf_id * 19 + 5] = sateOirbtNode.Vy;
|
||||
antpos.get()[prf_id * 19 + 6] = sateOirbtNode.Vz;
|
||||
antpos.get()[prf_id * 19 + 7] = sateOirbtNode.AntDirecX;
|
||||
antpos.get()[prf_id * 19 + 8] = sateOirbtNode.AntDirecY;
|
||||
antpos.get()[prf_id * 19 + 9] = sateOirbtNode.AntDirecZ;
|
||||
antpos.get()[prf_id * 19 + 10] = sateOirbtNode.AVx;
|
||||
antpos.get()[prf_id * 19 + 11] = sateOirbtNode.AVy;
|
||||
antpos.get()[prf_id * 19 + 12] = sateOirbtNode.AVz;
|
||||
antpos.get()[prf_id * 19 + 13] = sateOirbtNode.zeroDopplerDirectX;
|
||||
antpos.get()[prf_id * 19 + 14] = sateOirbtNode.zeroDopplerDirectY;
|
||||
antpos.get()[prf_id * 19 + 15] = sateOirbtNode.zeroDopplerDirectZ;
|
||||
antpos.get()[prf_id * 19 + 16] = outP.lon;
|
||||
antpos.get()[prf_id * 19 + 17] = outP.lat;
|
||||
antpos.get()[prf_id * 19 + 18] = outP.ati;
|
||||
sateOirbtNodes[prf_id] = sateOirbtNode;
|
||||
}
|
||||
this->EchoSimulationData->saveAntPos(antpos);
|
||||
antpos.reset();
|
||||
qDebug() << "Ant position finished sucessfully !!!";
|
||||
}
|
||||
|
||||
return sateOirbtNodes;
|
||||
}
|
||||
|
||||
|
||||
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);
|
||||
|
||||
if (nullptr == task)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else {
|
||||
// 打印参数
|
||||
qDebug() << "--------------Task Seting ---------------------------------------";
|
||||
qDebug() << "SARImageStartTime: " << task->getSARImageStartTime();
|
||||
qDebug() << "SARImageEndTime: " << task->getSARImageEndTime();
|
||||
qDebug() << "BandWidth: " << task->getBandWidth();
|
||||
qDebug() << "CenterFreq: " << task->getCenterFreq();
|
||||
qDebug() << "PRF: " << task->getPRF();
|
||||
qDebug() << "Lamda: " << task->getCenterLamda();
|
||||
qDebug() << "Fs: " << task->getFs();
|
||||
qDebug() << "POLAR: " << task->getPolarType();
|
||||
qDebug() << "NearRange: " << task->getNearRange();
|
||||
qDebug() << "FarRange: " << task->getFarRange();
|
||||
qDebug() << (task->getFarRange() - task->getNearRange()) * 2 / LIGHTSPEED * task->getFs();
|
||||
qDebug() << "\n\n";
|
||||
}
|
||||
// 1.2 设置天线方向图
|
||||
std::vector<RadiationPatternGainPoint> TansformPatternGainpoints = ReadGainFile(TansformPatternFilePath);
|
||||
std::shared_ptr<AbstractRadiationPattern> TansformPatternGainPtr = CreateAbstractRadiationPattern(TansformPatternGainpoints);
|
||||
|
||||
std::vector<RadiationPatternGainPoint> ReceivePatternGainpoints = ReadGainFile(ReceivePatternFilePath);
|
||||
std::shared_ptr<AbstractRadiationPattern> ReceivePatternGainPtr = CreateAbstractRadiationPattern(ReceivePatternGainpoints);
|
||||
|
||||
task->setTransformRadiationPattern(TansformPatternGainPtr);
|
||||
task->setReceiveRadiationPattern(ReceivePatternGainPtr);
|
||||
|
||||
//2. 读取GPS节点
|
||||
std::vector<SatelliteOribtNode> nodes;
|
||||
ErrorCode stateCode = ReadSateGPSPointsXML(GPSXmlPath, nodes);
|
||||
|
||||
if (stateCode != ErrorCode::SUCCESS)
|
||||
{
|
||||
qWarning() << QString::fromStdString(errorCode2errInfo(stateCode));
|
||||
return;
|
||||
}
|
||||
else {}
|
||||
|
||||
std::shared_ptr<AbstractSatelliteOribtModel> SatelliteOribtModel = CreataPolyfitSatelliteOribtModel(nodes, task->getSARImageStartTime(), 3); // 以成像开始时间作为 时间参考起点
|
||||
SatelliteOribtModel->setbeamAngle(task->getCenterLookAngle(), task->getIsRightLook()); // 设置天线方向图
|
||||
|
||||
if (nullptr == SatelliteOribtModel)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else {
|
||||
task->setSatelliteOribtModel(SatelliteOribtModel);
|
||||
}
|
||||
|
||||
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---------------------------------------";
|
||||
}
|
||||
|
||||
|
||||
ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
||||
{
|
||||
double widthSpace = LIGHTSPEED / 2 / this->TaskSetting->getFs();
|
||||
|
@ -572,10 +706,10 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
|||
double* d_demsloper_z = (double*)mallocCUDADevice(sizeof(double) * blokline * tempDemCols);
|
||||
|
||||
// 提前声明参数变量
|
||||
double* h_R = (double*)mallocCUDAHost(sizeof(double) * blokline * tempDemCols);
|
||||
double* d_R = (double*)mallocCUDADevice(sizeof(double) * blokline * tempDemCols);
|
||||
double* h_amp = (double*)mallocCUDAHost(sizeof(double) * blokline * tempDemCols);
|
||||
double* d_amp = (double*)mallocCUDADevice(sizeof(double) * blokline * tempDemCols);
|
||||
float* h_R = (float*)mallocCUDAHost(sizeof(float) * blokline * tempDemCols);
|
||||
float* d_R = (float*)mallocCUDADevice(sizeof(float) * blokline * tempDemCols);
|
||||
float* h_amp = (float*)mallocCUDAHost(sizeof(float) * blokline * tempDemCols);
|
||||
float* d_amp = (float*)mallocCUDADevice(sizeof(float) * blokline * tempDemCols);
|
||||
//double* h_phi = (double*)mallocCUDAHost(sizeof(double) * blokline * tempDemCols);
|
||||
//double* d_phi = (double*)mallocCUDADevice(sizeof(double) * blokline * tempDemCols);
|
||||
//double* h_real = (double*)mallocCUDAHost(sizeof(double) * blokline * tempDemCols);
|
||||
|
@ -664,10 +798,10 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
|||
d_demcls = (long*)mallocCUDADevice(sizeof(long) * newblokline * tempDemCols);
|
||||
|
||||
// 临时变量
|
||||
h_R = (double*)mallocCUDAHost(sizeof(double) * newblokline * tempDemCols);
|
||||
d_R = (double*)mallocCUDADevice(sizeof(double) * newblokline * tempDemCols);
|
||||
h_amp = (double*)mallocCUDAHost(sizeof(double) * newblokline * tempDemCols);
|
||||
d_amp = (double*)mallocCUDADevice(sizeof(double) * newblokline * tempDemCols);
|
||||
h_R = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
d_R = (float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
h_amp = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||
d_amp = (float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||
//h_phi = (double*)mallocCUDAHost(sizeof(double) * newblokline * tempDemCols);
|
||||
//d_phi = (double*)mallocCUDADevice(sizeof(double) * newblokline * tempDemCols);
|
||||
//h_real = (double*)mallocCUDAHost(sizeof(double) * newblokline * tempDemCols);
|
||||
|
@ -823,7 +957,7 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
|||
for (long tempprfid = 0; tempprfid < templine; tempprfid++) {
|
||||
for (long freqid = 0; freqid < PlusePoint; freqid++) {
|
||||
echotemp.get()[tempprfid * PlusePoint + freqid].real(
|
||||
echotemp.get()[tempprfid * PlusePoint + freqid].real()+h_PRFEcho_real[tempprfid * PlusePoint + freqid]);
|
||||
echotemp.get()[tempprfid * PlusePoint + freqid].real() + h_PRFEcho_real[tempprfid * PlusePoint + freqid]);
|
||||
|
||||
echotemp.get()[tempprfid * PlusePoint + freqid].imag(
|
||||
echotemp.get()[tempprfid * PlusePoint + freqid].imag() + h_PRFEcho_imag[tempprfid * PlusePoint + freqid]);
|
||||
|
@ -865,137 +999,3 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
|||
this->EchoSimulationData->saveToXml();
|
||||
return ErrorCode::SUCCESS;
|
||||
}
|
||||
|
||||
std::shared_ptr<SatelliteOribtNode[]> RFPCProcessCls::getSatelliteOribtNodes(double prf_time, double dt, bool antflag, long double imageStarttime)
|
||||
{
|
||||
|
||||
|
||||
std::shared_ptr<SatelliteOribtNode[]> sateOirbtNodes(new SatelliteOribtNode[this->PluseCount], delArrPtr);
|
||||
{ // 姿态计算不同
|
||||
qDebug() << "Ant position finished started !!!";
|
||||
// 计算姿态
|
||||
std::shared_ptr<double> antpos = this->EchoSimulationData->getAntPos();
|
||||
double dAt = 1e-6;
|
||||
double prf_time_dt = 0;
|
||||
Landpoint InP{ 0,0,0 }, outP{ 0,0,0 };
|
||||
for (long prf_id = 0; prf_id < this->PluseCount; prf_id++) {
|
||||
prf_time = dt * prf_id;
|
||||
prf_time_dt = prf_time + dAt;
|
||||
SatelliteOribtNode sateOirbtNode;
|
||||
SatelliteOribtNode sateOirbtNode_dAt;
|
||||
this->TaskSetting->getSatelliteOribtNode(prf_time, sateOirbtNode, antflag);
|
||||
this->TaskSetting->getSatelliteOribtNode(prf_time_dt, sateOirbtNode_dAt, antflag);
|
||||
|
||||
sateOirbtNode.AVx = (sateOirbtNode_dAt.Vx - sateOirbtNode.Vx) / dAt; // 加速度
|
||||
sateOirbtNode.AVy = (sateOirbtNode_dAt.Vy - sateOirbtNode.Vy) / dAt;
|
||||
sateOirbtNode.AVz = (sateOirbtNode_dAt.Vz - sateOirbtNode.Vz) / dAt;
|
||||
|
||||
InP.lon = sateOirbtNode.Px;
|
||||
InP.lat = sateOirbtNode.Py;
|
||||
InP.ati = sateOirbtNode.Pz;
|
||||
|
||||
outP = XYZ2LLA(InP);
|
||||
|
||||
antpos.get()[prf_id * 19 + 0] = prf_time + imageStarttime;
|
||||
antpos.get()[prf_id * 19 + 1] = sateOirbtNode.Px;
|
||||
antpos.get()[prf_id * 19 + 2] = sateOirbtNode.Py;
|
||||
antpos.get()[prf_id * 19 + 3] = sateOirbtNode.Pz;
|
||||
antpos.get()[prf_id * 19 + 4] = sateOirbtNode.Vx;
|
||||
antpos.get()[prf_id * 19 + 5] = sateOirbtNode.Vy;
|
||||
antpos.get()[prf_id * 19 + 6] = sateOirbtNode.Vz;
|
||||
antpos.get()[prf_id * 19 + 7] = sateOirbtNode.AntDirecX;
|
||||
antpos.get()[prf_id * 19 + 8] = sateOirbtNode.AntDirecY;
|
||||
antpos.get()[prf_id * 19 + 9] = sateOirbtNode.AntDirecZ;
|
||||
antpos.get()[prf_id * 19 + 10] = sateOirbtNode.AVx;
|
||||
antpos.get()[prf_id * 19 + 11] = sateOirbtNode.AVy;
|
||||
antpos.get()[prf_id * 19 + 12] = sateOirbtNode.AVz;
|
||||
antpos.get()[prf_id * 19 + 13] = sateOirbtNode.zeroDopplerDirectX;
|
||||
antpos.get()[prf_id * 19 + 14] = sateOirbtNode.zeroDopplerDirectY;
|
||||
antpos.get()[prf_id * 19 + 15] = sateOirbtNode.zeroDopplerDirectZ;
|
||||
antpos.get()[prf_id * 19 + 16] = outP.lon;
|
||||
antpos.get()[prf_id * 19 + 17] = outP.lat;
|
||||
antpos.get()[prf_id * 19 + 18] = outP.ati;
|
||||
sateOirbtNodes[prf_id] = sateOirbtNode;
|
||||
}
|
||||
this->EchoSimulationData->saveAntPos(antpos);
|
||||
antpos.reset();
|
||||
qDebug() << "Ant position finished sucessfully !!!";
|
||||
}
|
||||
|
||||
return sateOirbtNodes;
|
||||
}
|
||||
|
||||
|
||||
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);
|
||||
|
||||
if (nullptr == task)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else {
|
||||
// 打印参数
|
||||
qDebug() << "--------------Task Seting ---------------------------------------";
|
||||
qDebug() << "SARImageStartTime: " << task->getSARImageStartTime();
|
||||
qDebug() << "SARImageEndTime: " << task->getSARImageEndTime();
|
||||
qDebug() << "BandWidth: " << task->getBandWidth();
|
||||
qDebug() << "CenterFreq: " << task->getCenterFreq();
|
||||
qDebug() << "PRF: " << task->getPRF();
|
||||
qDebug() << "Lamda: " << task->getCenterLamda();
|
||||
qDebug() << "Fs: " << task->getFs();
|
||||
qDebug() << "POLAR: " << task->getPolarType();
|
||||
qDebug() << "NearRange: " << task->getNearRange();
|
||||
qDebug() << "FarRange: " << task->getFarRange();
|
||||
qDebug() << (task->getFarRange() - task->getNearRange()) * 2 / LIGHTSPEED * task->getFs();
|
||||
qDebug() << "\n\n";
|
||||
}
|
||||
// 1.2 设置天线方向图
|
||||
std::vector<RadiationPatternGainPoint> TansformPatternGainpoints = ReadGainFile(TansformPatternFilePath);
|
||||
std::shared_ptr<AbstractRadiationPattern> TansformPatternGainPtr = CreateAbstractRadiationPattern(TansformPatternGainpoints);
|
||||
|
||||
std::vector<RadiationPatternGainPoint> ReceivePatternGainpoints = ReadGainFile(ReceivePatternFilePath);
|
||||
std::shared_ptr<AbstractRadiationPattern> ReceivePatternGainPtr = CreateAbstractRadiationPattern(ReceivePatternGainpoints);
|
||||
|
||||
task->setTransformRadiationPattern(TansformPatternGainPtr);
|
||||
task->setReceiveRadiationPattern(ReceivePatternGainPtr);
|
||||
|
||||
//2. 读取GPS节点
|
||||
std::vector<SatelliteOribtNode> nodes;
|
||||
ErrorCode stateCode = ReadSateGPSPointsXML(GPSXmlPath, nodes);
|
||||
|
||||
if (stateCode != ErrorCode::SUCCESS)
|
||||
{
|
||||
qWarning() << QString::fromStdString(errorCode2errInfo(stateCode));
|
||||
return;
|
||||
}
|
||||
else {}
|
||||
|
||||
std::shared_ptr<AbstractSatelliteOribtModel> SatelliteOribtModel = CreataPolyfitSatelliteOribtModel(nodes, task->getSARImageStartTime(), 3); // 以成像开始时间作为 时间参考起点
|
||||
SatelliteOribtModel->setbeamAngle(task->getCenterLookAngle(), task->getIsRightLook()); // 设置天线方向图
|
||||
|
||||
if (nullptr == SatelliteOribtModel)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else {
|
||||
task->setSatelliteOribtModel(SatelliteOribtModel);
|
||||
}
|
||||
|
||||
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---------------------------------------";
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue