GSM_Types: add rxqual2ber and rxlev2dbm + ivnerse functions
Change-Id: I6293f6a9b73d5614cbb61c64617af4dd8afc1e73
This commit is contained in:
parent
7f26f5524d
commit
5377d2f730
|
@ -168,4 +168,56 @@ module GSM_Types {
|
|||
}
|
||||
}
|
||||
|
||||
/* Convert RF signal level in dBm to RxLev (TS 45.008 Chapter 8.1.4) */
|
||||
function dbm2rxlev(integer dbm) return uint6_t {
|
||||
var integer rxlev := dbm + 110;
|
||||
if (rxlev > 63) {
|
||||
rxlev := 63;
|
||||
} else if (rxlev < 0) {
|
||||
rxlev := 0;
|
||||
}
|
||||
return rxlev;
|
||||
}
|
||||
|
||||
function rxlev2dbm(uint6_t rxlev) return integer {
|
||||
return -110 + rxlev;
|
||||
}
|
||||
|
||||
/* convert BER to RxQual value (TS 45.008 Chapter 8.2.4 */
|
||||
function ber2rxqual(float ber) return uint3_t {
|
||||
if (ber < 0.2) {
|
||||
return 0;
|
||||
} else if (ber < 0.4) {
|
||||
return 1;
|
||||
} else if (ber < 0.8) {
|
||||
return 2;
|
||||
} else if (ber < 1.6) {
|
||||
return 3;
|
||||
} else if (ber < 3.2) {
|
||||
return 4;
|
||||
} else if (ber < 6.4) {
|
||||
return 5;
|
||||
} else if (ber < 12.8) {
|
||||
return 6;
|
||||
} else {
|
||||
return 7;
|
||||
}
|
||||
}
|
||||
|
||||
/* convert RxQual to BER (TS 45.008 Chapter 8.2.4 */
|
||||
function rxqual2ber(uint3_t rxqual) return float {
|
||||
select (rxqual) {
|
||||
case (0) { return 0.14 }
|
||||
case (1) { return 0.28 }
|
||||
case (2) { return 0.57 }
|
||||
case (3) { return 1.13 }
|
||||
case (4) { return 2.26 }
|
||||
case (5) { return 4.53 }
|
||||
case (6) { return 9.05 }
|
||||
case (7) { return 18.10 }
|
||||
case else { return 1000.0 }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} with { encode "RAW"; variant "FIELDORDER(msb)" }
|
||||
|
|
Loading…
Reference in New Issue