src/lte/model/lte-common.cc
changeset 9995 32e393c01fdb
parent 8762 46d94f0ede45
child 10018 8851948132e5
--- 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