请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:AWR1642 TI 团队、
AWR1642高精度演示中有一段代码、特别是 RADARDEMO_highAccuRangeProc_rangeEst 函数中的 RADARDEMO_highAccuRangeProc 文件中的代码、该文件保留在源代码中、但已注释掉。 我尝试理解这背后的底层算法、因为当我取消注释代码时、精度会显著下降、我不确定这是正在发生的情况的副作用、还是源代码中存在错误。 是否有适用于此算法的相关白皮书?
if (highAccuRangeHandle->enablePhaseEst){ float phaseCoarseEst1、phaseCoarseEst2、phaseInitial; 双倍 PI = 3.14159265358979323846f; double Real、imag、denom、initReal、initImag、 dtemp1、dtemp2、dtemp; 浮点相位估算、totalPhase = 0.f、相位校正、rangePhaseCorrection; __float2_t demodSig,corrSig; inputPtr =(__float2_t *) AccuhighRangeHandle->inputSig; phaseCoarseEst1 = 2 *(float) PI * AccuhighRangeHandle->fc *(divsp (2 *(*奇怪)、(float) 3e8)+ highAccuRangeHandle->adcStartTimeConst); phaseCoarseEst2 =(浮点) PI * highAccuRangeHandle->chirpSlope *(divsp (2 *(*奇怪)、(float) 3e8)+ highAccuRangeHandle->adcStartTimeConst) *(divsp (2 *(*奇怪)、(float) 3e8)+ highAccuRangeHandle->adcStartTimeConst); phaseInitial=phaseCoarseEst1-phaseCoarseEst2; denom = divdp (1.0、(双) highAccuRangeHandle->fft1DSize); #if 0 dtemp1 = cos (double) phaseInitialal; dtemp2 = sin (-(double) phaseInitialal); initReal = cos (2.0 * pi * highAccuRangeHandle->chirpRampTime *(double) freqFineEst * denom); initImag = sin (-2.0 * PI * highAccuRangeHandle->chirpRampTime *(double) freqFineEst * denom); #else dtemp1 = cosdp_i ((double) phaseInitialal); dtemp2 = sindp_i (-(double) phaseInitialal); initReal = cosdp_i (2.0 * PI * highAccuRangeHandle->chirpRampTime *(double) freqFineEst * denom); initImag = sindp_i (-2.0 * PI * highAccuRangeHandle->chirpRampTime *(double) freqFineEst * denom); #endif //样本@ t = 0; corrSig =_ftof2 ((float) dtemp1、(float) dtemp2); demodSig =_complex_mpysp (_amem8_f2 (inputPtr++)、corrSig); RADARDEMO_atan ((cplxf_t *)&dmodSig、PhaseEst); totalPhase += phaseEst; if ((highAccuRangeHandle->enableFilter =0)&&(highAccuRangeHandle->enableLinearFit =0)){ //样本@ t = 1; dtemp = dtemp1 * initReal - dtemp2 * initImag; Imag = dtemp1 * initImag + dtemp2 * initReal; 实数= dtemp; corrsig =_ftof2 ((float) Real、(float) imag); demodSig =_complex_mpysp (_amem8_f2 (inputPtr++)、corrSig); RADARDEMO_atan ((cplxf_t *)&dmodSig、PhaseEst); totalPhase += phaseEst; 对于(j = 2;j <(int32_t) AccuRangeHandle->fft1DSize;j++){ dtemp = Real * initReal - imag * initImag; Imag = Real * initImag + imag * initReal; 实数= dtemp; corrsig =_ftof2 ((float) Real、(float) imag); demodSig =_complex_mpysp (_amem8_f2 (inputPtr++)、corrSig); RADARDEMO_atan ((cplxf_t *)&dmodSig、PhaseEst); totalPhase += phaseEst; } phaseCorrection = totalPhase *(float) denom; rangePhaseCorrection = divsp ((phaseCorrection *(float) 3e8)、 (4.f *(float) PI * highAccuRangeHandle->fc)); *eh奇怪+= rangePhaseCorrection; } 否则{ //not implemented y} }