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>

git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@6761 19bc5d8c-e614-43d4-8b26-e1612bc8e597
This commit is contained in:
Thomas Tsou
2013-10-18 14:59:57 +00:00
parent a795f499a3
commit ece2c027a5

View File

@@ -351,6 +351,7 @@ SoftVector *Transceiver::pullRadioVector(GSM::Time &wTime,
// Update noise level
mNoiseLev = mNoises.avg();
avg = sqrt(avg);
// run the proper correlator
if (corrType==TSC) {
@@ -394,7 +395,7 @@ SoftVector *Transceiver::pullRadioVector(GSM::Time &wTime,
}
else {
channelResponse[timeslot] = NULL;
mNoises.insert(sqrt(avg));
mNoises.insert(avg);
}
}
else {
@@ -402,7 +403,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
@@ -419,7 +420,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);
}