RasterProcessTool/GF3CalibrationAndOrthLib/GF3CalibrationGeoCodingFunC...

105 lines
2.7 KiB
Plaintext

#include "GF3CalibrationGeoCodingFunCUDA.cuh"
#include <cmath>
#include <complex>
#include <device_launch_parameters.h>
#include <cuda_runtime.h>
#include <cufft.h>
#include <cufftw.h>
#include <cufftXt.h>
#include <cublas_v2.h>
#include <cuComplex.h>
#include <chrono>
#include "BaseConstVariable.h"
#include "GPUTool.cuh"
__device__ __host__ float Computrer_polartionConver_rpol_f(float inangle, float alpha)
{
float tang = 0.0;
if (inangle <= 0.0) {
tang = 0.0;
}
else if (inangle > 90.0) {
tang = 90.0;
}
else {
tang = inangle;
}
tang = tang * PI / 180.0;
float tan_val = tanf(tang);
float rpol = powf((1.0 + 2.0 * tan_val * tan_val), 2) / powf((1.0 + alpha * tan_val * tan_val), 2);
return rpol;
}
__device__ __host__ double Computrer_polartionConver_rpol_d(double inangle, double alpha)
{
double tang = 0.0;
if (inangle <= 0.0) {
tang = 0.0;
}
else if (inangle > 90.0) {
tang = 90.0;
}
else {
tang = inangle;
}
tang = tang * PI / 180.0;
double tan_val = tan(tang);
double rpol = pow((1.0 + 2.0 * tan_val * tan_val), 2) / pow((1.0 + alpha * tan_val * tan_val), 2);
return rpol;
}
__host__ __device__ float polartionConver_f(float insig, float inangle, float alpha , bool isvv )
{
float rpol = Computrer_polartionConver_rpol_f(inangle, alpha);
// dB转线性
float insig_linear = powf(10.0, insig / 10.0);
float osig = 0.0;
if (isvv) { // C: VV->HH
osig = insig_linear * rpol;
// 返回线性值
return osig;
}
else { // L: HH->VV
osig = insig_linear / rpol;
// 返回dB值
return 10.0 * log10f(osig);
}
}
void GPUComputePolarizationConver_f(float* insig, float* inangle, float* alpha, bool isvv, int count, float* outsig)
{
}
void GPUComputePolarizationConver_d(double* insig, double* inangle, double* alpha, bool isvv, int count, double* outsig)
{
}
__host__ __device__ double polartionConver_d(double insig, double inangle, double alpha , bool isvv )
{
double rpol = Computrer_polartionConver_rpol_d(inangle, alpha);
// dB转线性
double insig_linear = pow(10.0, insig / 10.0);
double osig = 0.0;
if (isvv) { // C: VV->HH
osig = insig_linear * rpol;
// 返回dB值
return 10.0 * log10(osig);
} else { // L: HH->VV
osig = insig_linear / rpol;
// 返回dB值
return 10.0 * log10(osig);
}
}
/** 核函数部分 ******************************************************************************************************************************/
/** 对外调用函数部分 ******************************************************************************************************************************/