2024-12-24 02:50:25 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#ifndef BASECONSTVARIABLE_H
|
|
|
|
|
#define BASECONSTVARIABLE_H
|
2025-01-02 10:53:33 +00:00
|
|
|
|
//#define EIGEN_USE_MKL_ALL
|
2024-12-24 02:50:25 +00:00
|
|
|
|
//#define EIGEN_NO_DEBUG
|
|
|
|
|
|
2025-02-02 14:06:45 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef BASECONSTVARIABLE_API
|
|
|
|
|
#define BASECONSTVARIABLEAPI __declspec(dllexport)
|
|
|
|
|
#else
|
|
|
|
|
#define BASECONSTVARIABLEAPI __declspec(dllimport)
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-04-06 06:29:35 +00:00
|
|
|
|
/** 定义常见文件格式*********/
|
|
|
|
|
#define ENVI_FILE_FORMAT_FILTER u8"ALL File(*.*);;ENVI Bin(*.bin);;ENVI Data(*.dat);;ENVI Data(*.data);;tiff影像(*.tif);;tiff影像(*.tiff)"
|
|
|
|
|
#define XML_FILE_FORMAT_FILTER u8"ALL File(*.*);;XML File(*.xml);;tiff影像(*.tiff)"
|
2025-02-02 14:06:45 +00:00
|
|
|
|
|
|
|
|
|
|
2025-03-21 10:14:29 +00:00
|
|
|
|
//
|
|
|
|
|
//#define EIGEN_USE_BLAS
|
|
|
|
|
//#define EIGEN_USE_LAPACK
|
|
|
|
|
//#define EIGEN_VECTORIZE_SSE2
|
2024-12-24 02:50:25 +00:00
|
|
|
|
|
|
|
|
|
//#define DEBUGSHOWDIALOG
|
|
|
|
|
|
|
|
|
|
#define __CUDANVCC___ // 定义CUDA函数
|
|
|
|
|
|
2025-01-15 03:35:48 +00:00
|
|
|
|
#define __PRFDEBUG__
|
2025-01-27 03:37:46 +00:00
|
|
|
|
//#define __PRFDEBUG_PRFINF__
|
2025-01-06 04:03:14 +00:00
|
|
|
|
//#define __ECHOTIMEDEBUG__
|
2024-12-24 02:50:25 +00:00
|
|
|
|
|
2024-12-29 04:05:41 +00:00
|
|
|
|
#define __TBPIMAGEDEBUG__
|
2024-12-24 02:50:25 +00:00
|
|
|
|
|
|
|
|
|
//#include <mkl.h>
|
|
|
|
|
#include <complex>
|
|
|
|
|
#include <math.h>
|
|
|
|
|
#include <complex>
|
2025-01-15 03:35:48 +00:00
|
|
|
|
#include <time.h>
|
2024-12-24 02:50:25 +00:00
|
|
|
|
|
2025-01-20 07:49:54 +00:00
|
|
|
|
/** 打印时间 ***************************************************************/
|
2025-03-25 09:36:07 +00:00
|
|
|
|
inline char* get_cur_time() {
|
|
|
|
|
static char s[20];
|
|
|
|
|
time_t t;
|
|
|
|
|
struct tm* ltime;
|
|
|
|
|
time(&t);
|
|
|
|
|
ltime = localtime(&t);
|
|
|
|
|
strftime(s, 20, "%Y-%m-%d %H:%M:%S", ltime);
|
|
|
|
|
return s;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define PRINT(fmt, ...) printf("%s " fmt, get_cur_time(), ##__VA_ARGS__);
|
2025-01-20 07:49:54 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-12-24 02:50:25 +00:00
|
|
|
|
#define MATPLOTDRAWIMAGE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define r2d 180/3.141592653589793238462643383279
|
|
|
|
|
#define d2r 3.141592653589793238462643383279/180
|
|
|
|
|
#define LIGHTSPEED 299792458
|
|
|
|
|
#define PRECISIONTOLERANCE 1e-6
|
|
|
|
|
#define Radians2Degrees(Radians) Radians*PI_180
|
|
|
|
|
#define Degrees2Radians(Degrees) Degrees*T180_PI
|
|
|
|
|
#define EARTHWE 0.000072292115
|
|
|
|
|
#define PI 3.141592653589793238462643383279
|
|
|
|
|
|
2025-02-28 16:47:58 +00:00
|
|
|
|
#define WGS84_A 6378137.0 // 长半轴 (m)
|
|
|
|
|
#define WGS84_F (1.0/298.257223563)
|
|
|
|
|
#define WGS84_B (WGS84_A*(1-WGS84_F)) // 短半轴 (m)
|
2024-12-24 02:50:25 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define earthRoute 0.000072292115
|
|
|
|
|
#define Memory1GB 1073741824
|
|
|
|
|
#define Memory1MB 1048576
|
|
|
|
|
#define Memory1KB 1024
|
|
|
|
|
|
|
|
|
|
const std::complex<double> imagI(0, 1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const double epsilon = 0.000000000000001;
|
|
|
|
|
const double pi = 3.14159265358979323846;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const double a = 6378137.0; //椭球长半轴
|
|
|
|
|
const double ae = 6378137.0; //椭球长半轴
|
|
|
|
|
const double ee = 0.0818191910428;// 第一偏心率
|
|
|
|
|
const double f_inverse = 298.257223563; //扁率倒数
|
|
|
|
|
const double b = a - a / f_inverse;
|
|
|
|
|
const double eSquare = (a * a - b * b) / (a * a);
|
|
|
|
|
const double e = sqrt(eSquare);
|
|
|
|
|
const double earth_Re = 6378136.49;
|
|
|
|
|
const double earth_Rp = (1 - 1 / f_inverse) * earth_Re;
|
|
|
|
|
const double earth_We = 0.000072292115;
|
|
|
|
|
|
|
|
|
|
/*********************************************** openMap参数 ********************************************************************/
|
|
|
|
|
static long Paral_num_thread = 14;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*********************************************** 基础枚举 ********************************************************************/
|
|
|
|
|
|
|
|
|
|
enum POLARTYPEENUM { // 极化类型
|
|
|
|
|
POLARHH,
|
|
|
|
|
POLARHV,
|
|
|
|
|
POLARVH,
|
|
|
|
|
POLARVV,
|
|
|
|
|
POLARUNKOWN
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*********************************************** 基础结构体区域 ********************************************************************/
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 地理坐标点
|
|
|
|
|
/// </summary>
|
|
|
|
|
struct Landpoint // 点 SAR影像的像素坐标;
|
|
|
|
|
{
|
|
|
|
|
double lon; // 经度x lon pixel_col
|
|
|
|
|
double lat; // 纬度y lat pixel_row
|
|
|
|
|
double ati; // 高程z ati pixel_time
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct Point2 {
|
|
|
|
|
double x = 0;
|
|
|
|
|
double y = 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct Point3 {
|
|
|
|
|
double x = 0;
|
|
|
|
|
double y = 0;
|
|
|
|
|
double z = 0;
|
2025-02-14 02:18:48 +00:00
|
|
|
|
void setX(double ix) { x = ix; }
|
|
|
|
|
void setY(double iy) { y = iy; }
|
|
|
|
|
void setZ(double iz) { z = iz; }
|
2024-12-24 02:50:25 +00:00
|
|
|
|
};
|
|
|
|
|
|
2025-04-07 13:46:53 +00:00
|
|
|
|
struct Point_3d {
|
|
|
|
|
double x;
|
|
|
|
|
double y;
|
|
|
|
|
double z;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-12-24 02:50:25 +00:00
|
|
|
|
struct DemBox {
|
|
|
|
|
double min_lon;
|
|
|
|
|
double max_lon;
|
|
|
|
|
double min_lat;
|
|
|
|
|
double max_lat;
|
|
|
|
|
};
|
|
|
|
|
|
2025-02-28 16:47:58 +00:00
|
|
|
|
struct Vector3 {
|
|
|
|
|
double x, y, z;
|
|
|
|
|
};
|
2025-02-26 04:36:06 +00:00
|
|
|
|
|
2024-12-24 02:50:25 +00:00
|
|
|
|
|
2025-03-06 09:58:40 +00:00
|
|
|
|
struct Vector3_single {
|
|
|
|
|
float x, y, z;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
2024-12-24 02:50:25 +00:00
|
|
|
|
/*********************************************** FEKO仿真参数 ********************************************************************/
|
2025-04-05 04:16:22 +00:00
|
|
|
|
extern "C" struct SatellitePos {
|
2024-12-24 02:50:25 +00:00
|
|
|
|
double time;
|
2025-02-12 01:34:03 +00:00
|
|
|
|
double Px ;
|
|
|
|
|
double Py ;
|
|
|
|
|
double Pz ;
|
|
|
|
|
double Vx ;
|
|
|
|
|
double Vy ;
|
|
|
|
|
double Vz ;
|
2024-12-24 02:50:25 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
2025-04-05 04:16:22 +00:00
|
|
|
|
extern "C" struct SatelliteAntPos {
|
2024-12-24 02:50:25 +00:00
|
|
|
|
double time; // 0
|
|
|
|
|
double Px;
|
|
|
|
|
double Py;
|
|
|
|
|
double Pz;
|
|
|
|
|
double Vx;
|
|
|
|
|
double Vy;
|
|
|
|
|
double Vz; //7
|
|
|
|
|
double AntDirectX;
|
|
|
|
|
double AntDirectY;
|
|
|
|
|
double AntDirectZ;
|
|
|
|
|
double AVx;
|
|
|
|
|
double AVy;
|
|
|
|
|
double AVz;//13
|
|
|
|
|
double ZeroAntDiectX;
|
|
|
|
|
double ZeroAntDiectY;
|
|
|
|
|
double ZeroAntDiectZ;
|
|
|
|
|
double lon;
|
|
|
|
|
double lat;
|
|
|
|
|
double ati; // 19
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
2025-04-05 04:16:22 +00:00
|
|
|
|
extern "C" struct PatternImageDesc {
|
2025-01-15 12:47:38 +00:00
|
|
|
|
long phinum;
|
|
|
|
|
long thetanum;
|
|
|
|
|
double startTheta;
|
|
|
|
|
double startPhi;
|
|
|
|
|
double dtheta;
|
|
|
|
|
double dphi;
|
|
|
|
|
};
|
2024-12-24 02:50:25 +00:00
|
|
|
|
|
|
|
|
|
|
2025-01-27 03:37:46 +00:00
|
|
|
|
struct CUDA_AntSate_PtrList {
|
|
|
|
|
long PRF_len = 0;
|
|
|
|
|
double* h_antpx = nullptr, * d_antpx = nullptr;
|
|
|
|
|
double* h_antpy = nullptr, * d_antpy = nullptr;
|
|
|
|
|
double* h_antpz = nullptr, * d_antpz = nullptr;
|
|
|
|
|
double* h_antvx = nullptr, * d_antvx = nullptr;
|
|
|
|
|
double* h_antvy = nullptr, * d_antvy = nullptr;
|
|
|
|
|
double* h_antvz = nullptr, * d_antvz = nullptr;
|
|
|
|
|
double* h_antdirectx = nullptr, * d_antdirectx = nullptr;
|
|
|
|
|
double* h_antdirecty = nullptr, * d_antdirecty = nullptr;
|
|
|
|
|
double* h_antdirectz = nullptr, * d_antdirectz = nullptr;
|
|
|
|
|
double* h_antXaxisX = nullptr, * d_antXaxisX = nullptr;
|
|
|
|
|
double* h_antXaxisY = nullptr, * d_antXaxisY = nullptr;
|
|
|
|
|
double* h_antXaxisZ = nullptr, * d_antXaxisZ = nullptr;
|
|
|
|
|
double* h_antYaxisX = nullptr, * d_antYaxisX = nullptr;
|
|
|
|
|
double* h_antYaxisY = nullptr, * d_antYaxisY = nullptr;
|
|
|
|
|
double* h_antYaxisZ = nullptr, * d_antYaxisZ = nullptr;
|
|
|
|
|
double* h_antZaxisX = nullptr, * d_antZaxisX = nullptr;
|
|
|
|
|
double* h_antZaxisY = nullptr, * d_antZaxisY = nullptr;
|
|
|
|
|
double* h_antZaxisZ = nullptr, * d_antZaxisZ = nullptr;
|
|
|
|
|
};
|
|
|
|
|
|
2025-02-06 13:18:25 +00:00
|
|
|
|
/*********************************************** 卫星轨道坐标 ********************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 轨道节点,坐标系统为WGS84
|
|
|
|
|
/// </summary>
|
|
|
|
|
struct SatelliteOribtNode {
|
|
|
|
|
double time;
|
|
|
|
|
|
|
|
|
|
double Px;// 位置
|
|
|
|
|
double Py;
|
|
|
|
|
double Pz;
|
|
|
|
|
|
|
|
|
|
double Vx;// 速度
|
|
|
|
|
double Vy;
|
|
|
|
|
double Vz;
|
|
|
|
|
|
|
|
|
|
double AVx; // 加速度
|
|
|
|
|
double AVy;
|
|
|
|
|
double AVz;
|
|
|
|
|
|
|
|
|
|
double AntXaxisX; // X天线指向,对应翻滚角等参数
|
|
|
|
|
double AntXaxisY; //
|
|
|
|
|
double AntXaxisZ; //
|
|
|
|
|
|
|
|
|
|
double AntYaxisX; // Y天线指向,对应翻滚角等参数
|
|
|
|
|
double AntYaxisY; //
|
|
|
|
|
double AntYaxisZ; //
|
|
|
|
|
|
|
|
|
|
double AntZaxisX; // Z天线指向,对应翻滚角等参数
|
|
|
|
|
double AntZaxisY; //
|
|
|
|
|
double AntZaxisZ; //
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double AntDirecX; // 天线指向,对应翻滚角等参数
|
|
|
|
|
double AntDirecY;
|
|
|
|
|
double AntDirecZ;
|
|
|
|
|
|
|
|
|
|
double zeroDopplerDirectX; // 0 多普勒方向
|
|
|
|
|
double zeroDopplerDirectY;
|
|
|
|
|
double zeroDopplerDirectZ;
|
|
|
|
|
|
|
|
|
|
double beamAngle; // 波位角
|
|
|
|
|
double AzAngle;// 摆动角
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct SatelliteAntDirect {
|
|
|
|
|
double Xst; // 地面-->卫星矢量
|
|
|
|
|
double Yst;
|
|
|
|
|
double Zst;
|
|
|
|
|
double Vxs; // 卫星速度
|
|
|
|
|
double Vys;
|
|
|
|
|
double Vzs;
|
|
|
|
|
|
|
|
|
|
double Xant; // 天线坐标系下的 矢量坐标
|
|
|
|
|
double Yant;
|
|
|
|
|
double Zant;
|
|
|
|
|
|
|
|
|
|
double Norm;
|
|
|
|
|
|
|
|
|
|
double ThetaAnt; // 天线坐标系下的 theta 坐标系
|
|
|
|
|
double PhiAnt;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct RadiationPatternGainPoint {
|
|
|
|
|
double theta;
|
|
|
|
|
double phi;
|
|
|
|
|
double GainValue;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
2025-01-27 03:37:46 +00:00
|
|
|
|
|
|
|
|
|
|
2024-12-24 02:50:25 +00:00
|
|
|
|
/*********************************************** 指针回收区域 ********************************************************************/
|
|
|
|
|
|
|
|
|
|
inline void delArrPtr(void* p)
|
|
|
|
|
{
|
2025-03-03 09:50:28 +00:00
|
|
|
|
if (nullptr == p || NULL == p) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
2024-12-24 02:50:25 +00:00
|
|
|
|
delete[] p;
|
|
|
|
|
p = nullptr;
|
2025-03-25 06:31:04 +00:00
|
|
|
|
};
|
2024-12-24 02:50:25 +00:00
|
|
|
|
|
|
|
|
|
inline void delPointer(void* p)
|
|
|
|
|
{
|
2025-03-03 09:50:28 +00:00
|
|
|
|
if (nullptr == p || NULL == p) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
2024-12-24 02:50:25 +00:00
|
|
|
|
delete p;
|
|
|
|
|
p = nullptr;
|
2025-03-25 06:31:04 +00:00
|
|
|
|
};
|
2024-12-24 02:50:25 +00:00
|
|
|
|
|
2025-01-15 03:35:48 +00:00
|
|
|
|
inline void PrintTime() {
|
|
|
|
|
time_t current_time;
|
|
|
|
|
time(¤t_time);
|
|
|
|
|
printf("Current timestamp in seconds: %ld\n", (long)current_time);
|
2025-03-25 06:31:04 +00:00
|
|
|
|
};
|
2025-01-15 03:35:48 +00:00
|
|
|
|
|
2025-01-20 07:49:54 +00:00
|
|
|
|
/** 计算分块 ******************************************************************/
|
|
|
|
|
|
2025-03-25 06:31:04 +00:00
|
|
|
|
inline long getBlockRows(long sizeMB, long cols, long sizeMeta, long maxRows) {
|
|
|
|
|
long rownum = (round(Memory1MB * 1.0 / sizeMeta / cols * sizeMB) + cols - 1);
|
2025-01-27 03:37:46 +00:00
|
|
|
|
rownum = rownum < 0 ? 1 : rownum;
|
2025-03-25 06:31:04 +00:00
|
|
|
|
rownum = rownum < maxRows ? rownum : maxRows;
|
2025-01-27 03:37:46 +00:00
|
|
|
|
return rownum;
|
2025-03-25 06:31:04 +00:00
|
|
|
|
};
|
2025-01-20 07:49:54 +00:00
|
|
|
|
|
|
|
|
|
|
2025-02-25 05:18:19 +00:00
|
|
|
|
inline long nextpow2(long n) {
|
|
|
|
|
long en = ceil(log2(n));
|
2025-03-25 06:31:04 +00:00
|
|
|
|
return pow(2, en);
|
|
|
|
|
};
|
2025-02-25 05:18:19 +00:00
|
|
|
|
|
2025-03-23 08:01:28 +00:00
|
|
|
|
inline void releaseVoidArray(void* a)
|
|
|
|
|
{
|
|
|
|
|
free(a);
|
|
|
|
|
a = NULL;
|
2025-03-25 06:31:04 +00:00
|
|
|
|
};
|
2025-03-23 08:01:28 +00:00
|
|
|
|
|
2025-02-25 05:18:19 +00:00
|
|
|
|
|
2024-12-24 02:50:25 +00:00
|
|
|
|
|
|
|
|
|
#endif
|