Transceiver52M: Update RSSI calculation

Use the same measurement method for RSSI as the noise level. Previous
method was to use the peak correlation amplitude relative to the
expected value. This created two very different amplitude approaches
between the noise measurement and RSSI measurement, which would
throw off the upper layer MS power control loop.

Signed-off-by: Thomas Tsou <tom@tsou.cc>
This commit is contained in:
Thomas Tsou 2013-10-18 10:50:52 -04:00
parent fa3a787ccb
commit a1a3ab4bab
1 changed files with 4 additions and 3 deletions

View File

@ -329,6 +329,7 @@ SoftVector *Transceiver::pullRadioVector(GSM::Time &wTime,
// Update noise level
mNoiseLev = mNoises.avg();
avg = sqrt(avg);
// run the proper correlator
if (corrType==TSC) {
@ -372,7 +373,7 @@ SoftVector *Transceiver::pullRadioVector(GSM::Time &wTime,
}
else {
channelResponse[timeslot] = NULL;
mNoises.insert(sqrt(avg));
mNoises.insert(avg);
}
}
else {
@ -380,7 +381,7 @@ SoftVector *Transceiver::pullRadioVector(GSM::Time &wTime,
if (success = detectRACHBurst(*vectorBurst, 6.0, mSPSRx, &amplitude, &TOA))
channelResponse[timeslot] = NULL;
else
mNoises.insert(sqrt(avg));
mNoises.insert(avg);
}
// demodulate burst
@ -397,7 +398,7 @@ SoftVector *Transceiver::pullRadioVector(GSM::Time &wTime,
*DFEFeedback[timeslot]);
}
wTime = rxBurst->getTime();
RSSI = (int) floor(20.0*log10(rxFullScale/amplitude.abs()));
RSSI = (int) floor(20.0*log10(rxFullScale/avg));
LOG(DEBUG) << "RSSI: " << RSSI;
timingOffset = (int) round(TOA * 256.0 / mSPSRx);
}