--- a/src/lte/model/lte-common.cc Fri Mar 01 09:33:18 2013 +0100
+++ b/src/lte/model/lte-common.cc Fri Mar 01 20:53:54 2013 +0100
@@ -198,5 +198,49 @@
}
+double
+EutranMeasurementMapping::RsrpRange2Dbm (uint8_t range)
+{
+ // 3GPP TS 36.133 section 9.1.4 RSRP Measurement Report Mapping
+ NS_ASSERT_MSG (range <= 97, "value " << range << " is out of range");
+ return (double) range - 141.0;
+}
+
+uint8_t
+EutranMeasurementMapping::Dbm2RsrpRange (double dbm)
+{
+ // 3GPP TS 36.133 section 9.1.4 RSRP Measurement Report Mapping
+ double range = std::min( std::max (std::floor(dbm + 141), 0.0), 97.0);
+ return (uint8_t) range;
+}
+
+double
+EutranMeasurementMapping::RsrqRange2Db (uint8_t range)
+{
+ // 3GPP TS 36.133 section 9.1.7 RSRQ Measurement Report Mapping
+ NS_ASSERT_MSG (range <= 34, "value " << range << " is out of range");
+ return ((double) range - 40.0)*0.5;
+}
+
+uint8_t
+EutranMeasurementMapping::Db2RsrqRange (double db)
+{
+ // 3GPP TS 36.133 section 9.1.7 RSRQ Measurement Report Mapping
+ double range = std::min (std::max (std::floor (db*2 + 40), 0.0), 34.0);
+ return (uint8_t) range;
+}
+
+double
+EutranMeasurementMapping::QuantizeRsrp (double v)
+{
+ return RsrpRange2Dbm (Dbm2RsrpRange (v));
+}
+
+double
+EutranMeasurementMapping::QuantizeRsrq (double v)
+{
+ return RsrqRange2Db (Db2RsrqRange (v));
+}
+
}; // namespace ns3