105 lines
2.7 KiB
Plaintext
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);
|
|
}
|
|
}
|
|
|
|
/** 核函数部分 ******************************************************************************************************************************/
|
|
|
|
|
|
|
|
|
|
/** 对外调用函数部分 ******************************************************************************************************************************/
|
|
|