summaryrefslogtreecommitdiff
path: root/cesar/ce/rx/bitloading/src/ber.c
diff options
context:
space:
mode:
authorJalil Chemseddine2012-10-11 16:56:01 +0200
committerJalil Chemseddine2013-01-11 11:22:32 +0100
commitd4fdaf44e909e612f284730f796c21f848a8db12 (patch)
treeea1b05b2d5b213626897d823231a928712c08a4a /cesar/ce/rx/bitloading/src/ber.c
parent090a54f477186a47a537d0faa96429fc0cbf8945 (diff)
cesar/ce/rx/bl: create structure for ber configuration, refs #3251
Diffstat (limited to 'cesar/ce/rx/bitloading/src/ber.c')
-rw-r--r--cesar/ce/rx/bitloading/src/ber.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/cesar/ce/rx/bitloading/src/ber.c b/cesar/ce/rx/bitloading/src/ber.c
index bdb74ee0cd..2397aa1d68 100644
--- a/cesar/ce/rx/bitloading/src/ber.c
+++ b/cesar/ce/rx/bitloading/src/ber.c
@@ -20,6 +20,11 @@
#include "ce/rx/ce_rx_param.h"
/**
+ * The configuration of the BER module.
+ */
+ce_rx_bl_ber_conf_t ce_rx_bl_ber_conf;
+
+/**
* Default value of margin to apply to BER target.
* This value is apparently quantified on 53 bits.
*
@@ -59,12 +64,6 @@ static const u8 ce_rx_bl_ber_consign_degrees_eoc[PHY_FEC_RATE_NB] =
CE_RX_BL_BER_CONSIGN_DEGREES_EOC
};
-static const u16
-ce_rx_bl_ber_sliding_mean_factor[CE_RX_BL_BER_SLIDING_MEAN_NB] = {
- CE_RX_BL_BER_SLIDING_MEAN_FAST_FACTOR,
- CE_RX_BL_BER_SLIDING_MEAN_SLOW_FACTOR
-};
-
const u64 ce_rx_bl_initial_bpt[PHY_FEC_RATE_NB] = {
10 * CE_RX_BL_BPT_QUANT_FACTOR,
10 * CE_RX_BL_BPT_QUANT_FACTOR
@@ -206,6 +205,7 @@ ce_rx_bl_ber_sliding_mean_update (ce_rx_bitloading_t *bl, u64 ber)
dbg_assert (bl);
uint i;
+
/* First value? */
if (bl->ber_sliding_mean[CE_RX_BL_BER_SLIDING_MEAN_FAST] == -1)
{
@@ -217,17 +217,22 @@ ce_rx_bl_ber_sliding_mean_update (ce_rx_bitloading_t *bl, u64 ber)
}
else
{
- for (i = 0; i < CE_RX_BL_BER_SLIDING_MEAN_NB; i++)
- {
- /* Update sliding means. */
- bl->ber_sliding_mean[i]
- = ((u64) ce_rx_bl_ber_sliding_mean_factor[i]
- * bl->ber_sliding_mean[i]
+ /* Update fast sliding mean. */
+ bl->ber_sliding_mean[CE_RX_BL_BER_SLIDING_MEAN_FAST]
+ = ((u64) ce_rx_bl_ber_conf.sliding_mean_fast_factor
+ * bl->ber_sliding_mean[CE_RX_BL_BER_SLIDING_MEAN_FAST]
+ (CE_RX_BL_BER_SLIDING_MEAN_FACTOR_DIV
- - ce_rx_bl_ber_sliding_mean_factor[i])
- * ber)
- / CE_RX_BL_BER_SLIDING_MEAN_FACTOR_DIV;
- }
+ - ce_rx_bl_ber_conf.sliding_mean_fast_factor) * ber)
+ / CE_RX_BL_BER_SLIDING_MEAN_FACTOR_DIV;
+
+ /* Update slow sliding mean. */
+ bl->ber_sliding_mean[CE_RX_BL_BER_SLIDING_MEAN_SLOW]
+ = ((u64) ce_rx_bl_ber_conf.sliding_mean_slow_factor
+ * bl->ber_sliding_mean[CE_RX_BL_BER_SLIDING_MEAN_SLOW]
+ + (CE_RX_BL_BER_SLIDING_MEAN_FACTOR_DIV
+ - ce_rx_bl_ber_conf.sliding_mean_slow_factor) * ber)
+ / CE_RX_BL_BER_SLIDING_MEAN_FACTOR_DIV;
+
}
}