123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- #include "../../includes/includes.h"
- extern flt32 gg_afOneFrameLocationData[PUB_SLOT_FRAME_LEN];
- void bts_ampl_main(PUB_LOCATION_DATA_T *pstLocationDataList, BTS_AMPL_MIRROR_DATA_T *pstBtsAmplMirrorDataList, BTS_MAX_AMPL_DATA_T *pstBtsMaxAmplDataList)
- {
- PUB_LOCATION_DATA_T *pstLocationData = NULL;
- BTS_AMPL_MIRROR_DATA_T *pstBtsAmplMirrorData = NULL;
- BTS_MAX_AMPL_DATA_T *pstBtsMaxAmplData = NULL;
- uint32 dwFrameNo = 0;
- uint8 byRemainder = 0;
- uint8 bySlotIndex = 0;
- uint32 dwStartIndex = 0;
- flt32 *pfOneDataHead = NULL;
- flt32 *pfMultiDataHead = NULL;
- flt32 *pfDataHead = NULL;
- uint32 dwTmpIndex = 0;
- flt32 fMaxValue = 0;
- uint16 wMaxValueIndex = 0;
- flt32 fSnr = 0;
-
- for (uint8 i = 0; i < PUB_SYS_CARRIER_NUM; i++)
- {
- pstLocationData = &pstLocationDataList[i];
- pstBtsAmplMirrorData = &pstBtsAmplMirrorDataList[i];
-
- dwFrameNo = pstLocationData->dwFrameNo - 1;
- if (dwFrameNo > 0)
- {
-
- byRemainder = dwFrameNo % PUB_SYS_SLOT_NUM;
- if (byRemainder == 1)
- {
- memset(pstBtsAmplMirrorData->afOneSecondData, 0, sizeof(flt32) * PUB_SIGNAL_SAMPLE_RATIO);
- }
-
- byRemainder = dwFrameNo % BTS_AMPL_MIRROR_FRAMES;
- if (byRemainder == 1)
- {
- memset(pstBtsAmplMirrorData->afMultiSecondData, 0, sizeof(flt32) * PUB_SIGNAL_SAMPLE_RATIO);
- pstBtsAmplMirrorData->byAmplValidTimes = 0;
- }
-
- util_looplist_get_flt32(pstLocationData->afData, PUB_LCT_DATA_LIST_LEN, pstLocationData->dwFourthLocationIndex, gg_afOneFrameLocationData, PUB_SLOT_FRAME_LEN, &dwTmpIndex);
- pfDataHead = gg_afOneFrameLocationData;
-
- bySlotIndex = (pstLocationData->dwFrameNo - 2) % PUB_SYS_SLOT_NUM;
- dwStartIndex = bySlotIndex * PUB_SLOT_FRAME_LEN;
- pfOneDataHead = &pstBtsAmplMirrorData->afOneSecondData[dwStartIndex];
- pfMultiDataHead = &pstBtsAmplMirrorData->afMultiSecondData[dwStartIndex];
- for (uint16 j = 0; j < PUB_SLOT_FRAME_LEN; j++)
- {
- *pfOneDataHead = *pfDataHead;
- *pfMultiDataHead += *pfDataHead / BTS_AMPL_MIRROR_SECONDS;
- pfDataHead++;
- pfOneDataHead++;
- pfMultiDataHead++;
- }
-
- if ((bySlotIndex % PUB_SYS_SLOT_NUM) == 3)
- {
-
- bts_ampl_check_freq_valid(pstLocationData, pstBtsAmplMirrorData);
- }
-
- byRemainder = dwFrameNo % BTS_AMPL_MIRROR_FRAMES;
- if (byRemainder == 0)
- {
- wMaxValueIndex = util_looplist_find_max_value_index_flt32(pstBtsAmplMirrorData->afMultiSecondData, PUB_SIGNAL_SAMPLE_RATIO);
- fMaxValue = pstBtsAmplMirrorData->afMultiSecondData[wMaxValueIndex];
-
- pstBtsMaxAmplData = &pstBtsMaxAmplDataList[i];
- pstBtsMaxAmplData->byFreqIndex = i;
- pstBtsMaxAmplData->fMaxValue = fMaxValue;
- pstBtsMaxAmplData->wMaxValueIndex = wMaxValueIndex;
-
- pstLocationData->byBtsValidFlag = 0;
- if (pstBtsAmplMirrorData->byAmplValidTimes > 1)
- {
- pstLocationData->byBtsValidFlag = 1;
- }
- }
- }
- }
-
- byRemainder = dwFrameNo % BTS_AMPL_MIRROR_FRAMES;
- if (byRemainder == 0)
- {
-
- bts_ampl_sort_max_ampl_list(pstBtsMaxAmplDataList);
- }
- return;
- }
- void bts_ampl_check_freq_valid(PUB_LOCATION_DATA_T *pstLocationData, BTS_AMPL_MIRROR_DATA_T *pstBtsAmplMirrorData)
- {
- uint16 wStartIndex = 0;
- uint16 wMeanStartIndex = 0;
- flt32 fTmpValue = 0;
- flt32 *pfOneSecondData = NULL;
- flt32 fMaxValue = FLT_MIN;
- uint16 wMaxValueIndex = 0;
- int16 wIndexOffset = 0;
- flt32 fMinValue = FLT_MAX;
- uint16 wMinValueIndex = 0;
- flt32 fMeanValue = 0;
- flt32 afDataNoiseList[1500] = {0};
- flt32 fMiddleValue = 0;
- flt32 fFrameNoise = 0;
- flt32 fSnr = 0;
- flt32 fAheadAmpl = pstLocationData->fCurrentMaxAmpl;
-
- pfOneSecondData = pstBtsAmplMirrorData->afOneSecondData;
- wMaxValueIndex = util_looplist_find_max_value_index_flt32(pfOneSecondData, PUB_SIGNAL_SAMPLE_RATIO);
- fMaxValue = pfOneSecondData[wMaxValueIndex];
- pstBtsAmplMirrorData->fOneSecondMaxValue = fMaxValue;
- pstBtsAmplMirrorData->wOneSecondMaxValueIndex = wMaxValueIndex;
-
-
- wIndexOffset = wMaxValueIndex - PUB_SYNC_INDEX_OFFSET_NUM;
- if (wIndexOffset >= 0)
- {
- wStartIndex = wIndexOffset;
- }
- else
- {
- wStartIndex = PUB_SIGNAL_SAMPLE_RATIO + wIndexOffset;
- }
-
- for (uint16 j = 0; j < PUB_SYNC_INDEX_OFFSET_NUM; j++)
- {
- if (wStartIndex >= PUB_SIGNAL_SAMPLE_RATIO)
- {
- wStartIndex = 0;
- }
- fTmpValue = pstBtsAmplMirrorData->afOneSecondData[wStartIndex];
- if (fTmpValue < fMinValue)
- {
- fMinValue = fTmpValue;
- wMinValueIndex = wStartIndex;
- }
- wStartIndex++;
- }
- fMinValue *= 5;
-
-
- wIndexOffset = wMinValueIndex - 1000;
- if (wIndexOffset >= 0)
- {
- wStartIndex = wIndexOffset;
- }
- else
- {
- wStartIndex = PUB_SIGNAL_SAMPLE_RATIO + wIndexOffset;
- }
-
- fFrameNoise = 0;
- for (int16 k = 0; k < 1500; k++)
- {
- if (wStartIndex >= PUB_SIGNAL_SAMPLE_RATIO)
- {
- wStartIndex = 0;
- }
-
- fTmpValue = pstBtsAmplMirrorData->afOneSecondData[wStartIndex];
- fMeanValue += fTmpValue / 1500;
- wStartIndex++;
-
- afDataNoiseList[k] = fTmpValue;
- }
-
- util_sort_flt32_asc(afDataNoiseList, 1500);
- fMiddleValue = afDataNoiseList[900];
-
- fFrameNoise = fMeanValue > fMinValue ? fMeanValue : fMinValue;
- fFrameNoise = fFrameNoise > fMiddleValue ? fFrameNoise : fMiddleValue;
- fSnr = fMaxValue / fFrameNoise;
-
-
- if (pstLocationData->byCurrentAmplValidFlag)
- {
- if (fMaxValue > BTS_AMPL_BTS_AMPL_VALID_THRESHOLD && fMaxValue > (0.10 * fAheadAmpl) && fSnr > BTS_AMPL_BTS_SNR_VALID_THRESHOLD)
- {
- pstLocationData->byCurrentAmplValidFlag = 1;
- pstBtsAmplMirrorData->byAmplValidTimes++;
- }
- else
- {
- pstLocationData->byCurrentAmplValidFlag = 0;
- }
- }
-
- else
- {
-
- if (fMaxValue > BTS_AMPL_BTS_AMPL_VALID_THRESHOLD && fSnr > BTS_AMPL_BTS_SNR_VALID_THRESHOLD)
- {
- pstLocationData->byCurrentAmplValidFlag = 1;
- pstBtsAmplMirrorData->byAmplValidTimes++;
- }
- else
- {
- pstLocationData->byCurrentAmplValidFlag = 0;
- }
- }
-
- pstLocationData->fCurrentMaxAmpl = fMaxValue;
- return;
- }
- void bts_ampl_sort_max_ampl_list(BTS_MAX_AMPL_DATA_T *pstBtsMaxAmplDataList)
- {
- BTS_MAX_AMPL_DATA_T stTmp = {0};
-
- for (uint8 i = 0; i < PUB_SYS_CARRIER_NUM; i++)
- {
- for (uint8 j = (i + 1); j < PUB_SYS_CARRIER_NUM; j++)
- {
- if (pstBtsMaxAmplDataList[i].fMaxValue < pstBtsMaxAmplDataList[j].fMaxValue)
- {
- stTmp = pstBtsMaxAmplDataList[i];
- pstBtsMaxAmplDataList[i] = pstBtsMaxAmplDataList[j];
- pstBtsMaxAmplDataList[j] = stTmp;
- }
- }
- }
- return;
- }
|