tongbuxiugai
parent
cb9012e750
commit
96eb60bbec
|
|
@ -510,50 +510,39 @@ __global__ void CUDA_Kernel_RFPC(
|
||||||
|
|
||||||
cuComplex echo = make_cuComplex(0, 0);
|
cuComplex echo = make_cuComplex(0, 0);
|
||||||
|
|
||||||
for (long startid = 0; startid < demLen; startid = startid + SHAREMEMORY_DEM_STEP)
|
|
||||||
{
|
|
||||||
__syncthreads(); // 确定所有待处理数据都已经进入程序中
|
for (long tid = 0;tid < demLen;tid++) {
|
||||||
for (long i = 0; i < 3; i++) {
|
GoalState p = goallist[tid];
|
||||||
long ttid = startid + threadid + i * blockDim.x;
|
Tx = p.Tx;
|
||||||
long stid = threadid + i * blockDim.x;
|
Ty = p.Ty;
|
||||||
if ((stid < SHAREMEMORY_DEM_STEP) && (ttid < demLen)) {
|
Tz = p.Tz;
|
||||||
Ts[stid] = goallist[ttid];
|
|
||||||
|
Tx = antPos.Px - Tx; // T->P
|
||||||
|
Ty = antPos.Py - Ty;
|
||||||
|
Tz = antPos.Pz - Tz;
|
||||||
|
|
||||||
|
R = sqrt(Tx * Tx + Ty * Ty + Tz * Tz);
|
||||||
|
bool isNearFar = (R < NearR || R > FarR) && ((abs(p.TsX) > 1000) || (abs(p.TsY) > 1000) || (abs(p.TsZ) > 1000));
|
||||||
|
|
||||||
|
|
||||||
|
incAngle = sqrt(p.TsX * p.TsX + p.TsY * p.TsY + p.TsZ * p.TsZ);
|
||||||
|
incAngle = acos((Tx * p.TsX + Ty * p.TsY + Tz * p.TsZ) / (R * incAngle));
|
||||||
|
incAngle = GPU_getSigma0dB_params(clsSigma0.p1, clsSigma0.p2, clsSigma0.p3, clsSigma0.p4, clsSigma0.p5, clsSigma0.p6, incAngle); // sigma
|
||||||
|
incAngle = pow(10.0, incAngle / 10.0); // amp
|
||||||
|
incAngle = incAngle / (powf(4 * LAMP_CUDA_PI, 2) * powf(R, 4)); //
|
||||||
|
|
||||||
|
R = (R - refPhaseRange);
|
||||||
|
R = factorjTemp * R;
|
||||||
|
|
||||||
|
echo_real = incAngle * cos(R) * isNearFar;
|
||||||
|
echo_imag = incAngle * sin(R) * isNearFar;
|
||||||
|
echo.x = echo.x + echo_real;
|
||||||
|
echo.y = echo.y + echo_imag;
|
||||||
|
|
||||||
|
if (idx == 0 && tid % (10 * SHAREMEMORY_DEM_STEP) == 0) {
|
||||||
|
printf("Idx:%d , TsID: %d, TSCOUNT: %d \n", idx, tid, demLen);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
__syncthreads(); // 确定所有待处理数据都已经进入程序中
|
|
||||||
|
|
||||||
for (long tid = 0; tid < SHAREMEMORY_DEM_STEP; tid++)
|
|
||||||
{
|
|
||||||
if ((tid + startid) < demLen)
|
|
||||||
{
|
|
||||||
GoalState p = Ts[tid];
|
|
||||||
Tx = p.Tx;
|
|
||||||
Ty = p.Ty;
|
|
||||||
Tz = p.Tz;
|
|
||||||
|
|
||||||
Tx = antPos.Px - Tx; // T->P
|
|
||||||
Ty = antPos.Py - Ty;
|
|
||||||
Tz = antPos.Pz - Tz;
|
|
||||||
|
|
||||||
R = sqrt(Tx * Tx + Ty * Ty + Tz * Tz);
|
|
||||||
bool isNearFar = (R < NearR || R > FarR);
|
|
||||||
|
|
||||||
|
|
||||||
incAngle = sqrt(p.TsX * p.TsX + p.TsY * p.TsY + p.TsZ * p.TsZ);
|
|
||||||
incAngle = acos((Tx * p.TsX + Ty * p.TsY + Tz * p.TsZ) / (R * incAngle));
|
|
||||||
incAngle = GPU_getSigma0dB_params(clsSigma0.p1, clsSigma0.p2, clsSigma0.p3, clsSigma0.p4, clsSigma0.p5, clsSigma0.p6, incAngle); // sigma
|
|
||||||
incAngle = pow(10.0, incAngle / 10.0); // amp
|
|
||||||
incAngle = incAngle / (powf(4 * LAMP_CUDA_PI, 2) * powf(R, 4)); //
|
|
||||||
|
|
||||||
R = (R - refPhaseRange);
|
|
||||||
R = factorjTemp * R;
|
|
||||||
|
|
||||||
echo_real = incAngle * cos(R)* isNearFar;
|
|
||||||
echo_imag = incAngle * sin(R)* isNearFar;
|
|
||||||
echo.x = echo.x + echo_real;
|
|
||||||
echo.y = echo.y + echo_imag;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
echodata[idx] = cuCaddf(echodata[idx], echo);
|
echodata[idx] = cuCaddf(echodata[idx], echo);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue