检查错误
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* ReceiveAntpattern, double Receivestarttheta, double Receivestartphi, double Receivedtheta, double Receivedphi, int Receivethetapoints, int Receivephipoints,//接收天线方向图
|
||||||
double NearR, double FarR, // 距离范围
|
double NearR, double FarR, // 距离范围
|
||||||
CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen,// 插值图
|
CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen,// 插值图
|
||||||
double* outR, // 输出距离
|
float* outR, // 输出距离
|
||||||
double* outAmp
|
float* outAmp
|
||||||
) {
|
) {
|
||||||
long idx = blockIdx.x * blockDim.x + threadIdx.x;
|
long idx = blockIdx.x * blockDim.x + threadIdx.x;
|
||||||
if (idx < len) {
|
if (idx < len) {
|
||||||
|
|
@ -628,8 +628,8 @@ __global__ void CUDAKernel_RFPC_Computer_R_Gain(
|
||||||
|
|
||||||
ampGain = TansantPatternGain * antPatternGain;
|
ampGain = TansantPatternGain * antPatternGain;
|
||||||
ampGain = ampGain / (powf(4 * LAMP_CUDA_PI, 2) * powf(RstR, 4)); // 反射强度
|
ampGain = ampGain / (powf(4 * LAMP_CUDA_PI, 2) * powf(RstR, 4)); // 反射强度
|
||||||
outAmp[idx] = ampGain * Pt * sigma0;
|
outAmp[idx] = float(ampGain * Pt * sigma0);
|
||||||
outR[idx] = RstR - refPhaseRange;
|
outR[idx] = float(RstR - refPhaseRange);
|
||||||
}
|
}
|
||||||
else {
|
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
|
double nearR, double farR, double* echo_real, double* echo_imag, long prfid) //11
|
||||||
{
|
{
|
||||||
//// 假定共享内存大小为49152 byte
|
//// 假定共享内存大小为49152 byte
|
||||||
//// 假定每个Block 线程数大小为 32
|
//// 假定每个Block 线程数大小为 32
|
||||||
__shared__ double s_R[GPU_SHARE_MEMORY]; // 距离 32*12 * 8= 49.2kb
|
__shared__ float 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_Amp[GPU_SHARE_MEMORY]; // 振幅 3072 * 8= 49.2kb 49.2*2 = 98.4 < 100 KB
|
||||||
|
|
||||||
const int bid = blockIdx.x; // 获取 grid网格编号ID
|
const int bid = blockIdx.x; // 获取 grid网格编号ID
|
||||||
const int tid = threadIdx.x;// 获取 单个 block 中的线程ID
|
const int tid = threadIdx.x;// 获取 单个 block 中的线程ID
|
||||||
|
|
@ -956,7 +956,7 @@ extern "C" void CUDA_RFPC_MainBlock(
|
||||||
double NearR, double FarR, // 距离范围
|
double NearR, double FarR, // 距离范围
|
||||||
CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen,// 插值图
|
CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen,// 插值图
|
||||||
double* out_echoReal, double* out_echoImag,// 输出回波
|
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// 临时变量
|
//, double* temp_phi, double* temp_real, double* temp_imag// 临时变量
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
|
@ -992,9 +992,9 @@ extern "C" void CUDA_RFPC_MainBlock(
|
||||||
);
|
);
|
||||||
cudaDeviceSynchronize();
|
cudaDeviceSynchronize();
|
||||||
|
|
||||||
blocknum = pixelcount / GPU_SHARE_MEMORY + 1;
|
blocknum = (pixelcount+ GPU_SHARE_STEP-1) / GPU_SHARE_STEP ;
|
||||||
blockSize = 32; // 每个块的线程数
|
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,
|
CUDAKernel_PRF_GeneratorEcho << <numBlocks, blockSize >> > (temp_R, temp_amp, blocknum, pixelcount,
|
||||||
factorj, freqnum,
|
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);
|
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, // 距离范围
|
double NearR, double FarR, // 距离范围
|
||||||
CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen,// 插值图
|
CUDASigmaParam* sigma0Paramslist, long sigmaparamslistlen,// 插值图
|
||||||
double* out_echoReal,double* out_echoImag,// 输出回波
|
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// 临时变量
|
//,double* temp_phi ,double* temp_real, double* tmep_imag// 临时变量
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
#ifndef _GPUTOOL_H_
|
#ifndef _GPUTOOL_H_
|
||||||
#define _GPUTOOL_H_
|
#define _GPUTOOL_H_
|
||||||
#ifdef __CUDANVCC___
|
|
||||||
#include "BaseConstVariable.h"
|
#include "BaseConstVariable.h"
|
||||||
|
|
||||||
|
#ifdef __CUDANVCC___
|
||||||
#include <cuda_runtime.h>
|
#include <cuda_runtime.h>
|
||||||
#include <device_launch_parameters.h>
|
#include <device_launch_parameters.h>
|
||||||
#include <cublas_v2.h>
|
#include <cublas_v2.h>
|
||||||
|
|
@ -16,8 +18,8 @@
|
||||||
#define BLOCK_SIZE 256
|
#define BLOCK_SIZE 256
|
||||||
|
|
||||||
// 默认显存分布
|
// 默认显存分布
|
||||||
#define GPU_SHARE_MEMORY 2816
|
#define GPU_SHARE_MEMORY 5632
|
||||||
#define GPU_SHARE_STEP 88
|
#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()
|
ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
||||||
{
|
{
|
||||||
double widthSpace = LIGHTSPEED / 2 / this->TaskSetting->getFs();
|
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* d_demsloper_z = (double*)mallocCUDADevice(sizeof(double) * blokline * tempDemCols);
|
||||||
|
|
||||||
// 提前声明参数变量
|
// 提前声明参数变量
|
||||||
double* h_R = (double*)mallocCUDAHost(sizeof(double) * blokline * tempDemCols);
|
float* h_R = (float*)mallocCUDAHost(sizeof(float) * blokline * tempDemCols);
|
||||||
double* d_R = (double*)mallocCUDADevice(sizeof(double) * blokline * tempDemCols);
|
float* d_R = (float*)mallocCUDADevice(sizeof(float) * blokline * tempDemCols);
|
||||||
double* h_amp = (double*)mallocCUDAHost(sizeof(double) * blokline * tempDemCols);
|
float* h_amp = (float*)mallocCUDAHost(sizeof(float) * blokline * tempDemCols);
|
||||||
double* d_amp = (double*)mallocCUDADevice(sizeof(double) * blokline * tempDemCols);
|
float* d_amp = (float*)mallocCUDADevice(sizeof(float) * blokline * tempDemCols);
|
||||||
//double* h_phi = (double*)mallocCUDAHost(sizeof(double) * blokline * tempDemCols);
|
//double* h_phi = (double*)mallocCUDAHost(sizeof(double) * blokline * tempDemCols);
|
||||||
//double* d_phi = (double*)mallocCUDADevice(sizeof(double) * blokline * tempDemCols);
|
//double* d_phi = (double*)mallocCUDADevice(sizeof(double) * blokline * tempDemCols);
|
||||||
//double* h_real = (double*)mallocCUDAHost(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);
|
d_demcls = (long*)mallocCUDADevice(sizeof(long) * newblokline * tempDemCols);
|
||||||
|
|
||||||
// 临时变量
|
// 临时变量
|
||||||
h_R = (double*)mallocCUDAHost(sizeof(double) * newblokline * tempDemCols);
|
h_R = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||||
d_R = (double*)mallocCUDADevice(sizeof(double) * newblokline * tempDemCols);
|
d_R = (float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||||
h_amp = (double*)mallocCUDAHost(sizeof(double) * newblokline * tempDemCols);
|
h_amp = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
||||||
d_amp = (double*)mallocCUDADevice(sizeof(double) * newblokline * tempDemCols);
|
d_amp = (float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
||||||
//h_phi = (double*)mallocCUDAHost(sizeof(double) * newblokline * tempDemCols);
|
//h_phi = (double*)mallocCUDAHost(sizeof(double) * newblokline * tempDemCols);
|
||||||
//d_phi = (double*)mallocCUDADevice(sizeof(double) * newblokline * tempDemCols);
|
//d_phi = (double*)mallocCUDADevice(sizeof(double) * newblokline * tempDemCols);
|
||||||
//h_real = (double*)mallocCUDAHost(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 tempprfid = 0; tempprfid < templine; tempprfid++) {
|
||||||
for (long freqid = 0; freqid < PlusePoint; freqid++) {
|
for (long freqid = 0; freqid < PlusePoint; freqid++) {
|
||||||
echotemp.get()[tempprfid * PlusePoint + freqid].real(
|
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(
|
||||||
echotemp.get()[tempprfid * PlusePoint + freqid].imag() + h_PRFEcho_imag[tempprfid * PlusePoint + freqid]);
|
echotemp.get()[tempprfid * PlusePoint + freqid].imag() + h_PRFEcho_imag[tempprfid * PlusePoint + freqid]);
|
||||||
|
|
@ -865,137 +999,3 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
||||||
this->EchoSimulationData->saveToXml();
|
this->EchoSimulationData->saveToXml();
|
||||||
return ErrorCode::SUCCESS;
|
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