123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- #include "../../includes/includes.h"
- #include "./lct_public.h"
- void lct_toa_cal_bts_first_path_index_offset(uint8 byFirstPathFlag, LCT_FIRSTPATH_LIST_T *pstFirstPathList, LCT_COORDSEL_MEAN_COORD_T *pstMeanLctCoordList, uint32 dwAheadOffset, uint32 *pdwBtsFirstPahtOffset)
- {
- uint8 byMeanCoordNum = pstMeanLctCoordList->byListLen;
- COORD_T *pstAheadCoord = NULL;
- uint8 byFirstPathNum = pstFirstPathList->byBtsNum;
- LCT_FIRSTPATH_T *pstFirstPathData = NULL;
- COORD_T stBtsCoord = {0};
- uint32 dwFirstPahtIndexDistance = 0;
- uint32 dwOffset = 0;
- uint32 dwOffsetGap = 0;
- uint32 dwOffsetSum = 0;
- uint32 dwAvarageOffset = 0;
- uint8 byCounter = 0;
-
- if (byMeanCoordNum <= 0 || byFirstPathNum <= 0)
- {
- return;
- }
- pstAheadCoord = &pstMeanLctCoordList->astCoordList[byMeanCoordNum - 1];
-
- for (uint8 i = 0; i < byFirstPathNum; i++)
- {
- pstFirstPathData = &pstFirstPathList->astFirstPath[i];
-
- stBtsCoord.dwX = pstFirstPathData->dwCoordX;
- stBtsCoord.dwY = pstFirstPathData->dwCoordY;
- stBtsCoord.dwZ = pstFirstPathData->dwCoordZ;
- dwFirstPahtIndexDistance = lct_toa_cal_one_bts_first_path_value(&stBtsCoord, pstAheadCoord);
-
- if (byFirstPathFlag == CAL_PATH)
- {
- dwOffset = pstFirstPathData->dwCalPathIndex - dwFirstPahtIndexDistance;
- }
- else
- {
- dwOffset = pstFirstPathData->dwTrackPathIndex - dwFirstPahtIndexDistance;
- }
-
- if (dwAheadOffset != 0)
- {
- dwOffsetGap = abs(dwOffset - dwAheadOffset);
- if (dwOffsetGap <= PUB_LCT_FP_OFFSET_VALID_THRES)
- {
- dwOffsetSum += dwOffset;
- byCounter++;
- }
- }
- else
- {
- dwOffsetSum += dwOffset;
- byCounter++;
- }
- }
-
- if (byCounter <= 0)
- {
- dwAvarageOffset = dwAheadOffset;
- }
- else
- {
- dwAvarageOffset = dwOffsetSum / byCounter;
- }
-
- if (byMeanCoordNum >= LCT_COORDSEL_MEAN_COORD_LIST_LEN)
- {
-
- if (pstMeanLctCoordList->adwFirstPathOffset[byMeanCoordNum - 1] <= 0)
- {
- pstMeanLctCoordList->adwFirstPathOffset[byMeanCoordNum - 1] = dwAvarageOffset;
- }
- else
- {
- memcpy(pstMeanLctCoordList->adwFirstPathOffset, &pstMeanLctCoordList->adwFirstPathOffset[1], sizeof(uint32) * (byMeanCoordNum - 1));
- pstMeanLctCoordList->adwFirstPathOffset[byMeanCoordNum - 1] = dwAvarageOffset;
- }
- }
- else
- {
- pstMeanLctCoordList->adwFirstPathOffset[byMeanCoordNum - 1] = dwAvarageOffset;
- }
-
- dwOffsetSum = 0;
- for (uint8 j = 0; j < byMeanCoordNum; j++)
- {
- dwOffsetSum += pstMeanLctCoordList->adwFirstPathOffset[j];
- }
- dwAvarageOffset = dwOffsetSum / byMeanCoordNum;
- *pdwBtsFirstPahtOffset = dwAvarageOffset;
-
- return;
- }
- uint32 lct_toa_cal_one_bts_first_path_value(COORD_T *pstBtsCoord, COORD_T *pstAheadCoord)
- {
- uint32 dwFirstPathIndex = 0;
- flt32 fDistance = 0;
- uint32 dwXX = (pstBtsCoord->dwX - pstAheadCoord->dwX) * (pstBtsCoord->dwX - pstAheadCoord->dwX);
- uint32 dwYY = (pstBtsCoord->dwY - pstAheadCoord->dwY) * (pstBtsCoord->dwY - pstAheadCoord->dwY);
- uint32 dwZZ = (pstBtsCoord->dwZ - pstAheadCoord->dwZ) * (pstBtsCoord->dwZ - pstAheadCoord->dwZ);
- uint32 dwSum = dwXX + dwYY + dwZZ;
- fDistance = sqrt((flt64)dwSum) / 100;
- dwFirstPathIndex = (uint32)(fDistance * PUB_SIGNAL_SAMPLE_RATIO / PUB_AUDIO_SPEED);
- return dwFirstPathIndex;
- }
|