summaryrefslogtreecommitdiff
path: root/cesar/ce/rx/bitloading/src/bitloading.c
diff options
context:
space:
mode:
authorjutteau2010-11-10 11:13:15 +0100
committerjutteau2010-11-10 16:57:04 +0100
commit88024d4693650f644226c88e52b6cfd7b3f6f458 (patch)
treeb63ae425e7a69c408629b257f900dce55cffb6fd /cesar/ce/rx/bitloading/src/bitloading.c
parent0229bfa0e120ef249dbed4c80e43e0a80c109c7a (diff)
cesar/ce/rx/bl: handle the case when we have zero bits per symbol, closes #2002
Diffstat (limited to 'cesar/ce/rx/bitloading/src/bitloading.c')
-rw-r--r--cesar/ce/rx/bitloading/src/bitloading.c33
1 files changed, 25 insertions, 8 deletions
diff --git a/cesar/ce/rx/bitloading/src/bitloading.c b/cesar/ce/rx/bitloading/src/bitloading.c
index 1e8107d434..683f5936a7 100644
--- a/cesar/ce/rx/bitloading/src/bitloading.c
+++ b/cesar/ce/rx/bitloading/src/bitloading.c
@@ -266,14 +266,25 @@ ce_rx_bl_compute_tone_map_iterative (const u64 bpt_initial[PHY_FEC_RATE_NB],
&tone_en);
/* Store previous BER consign. */
ber_prev[fec_rate] = ber_cur;
- /* Store BER target reached. */
- ber_reached[fec_rate] = ber_weighted_sum
- / tm[fec_rate]->bits_per_symbol;
- /* Get new BER consign. */
- ber_cur = ce_rx_bl_ber_pt_bpt
- (fec_rate, tonemask->carrier_nb,
- (tm[fec_rate]->bits_per_symbol *
- CE_RX_BL_BPT_QUANT_FACTOR) / tone_en);
+ /* We may have zero bit per symbol (when NSR is high for example).
+ * */
+ if (tm[fec_rate]->bits_per_symbol != 0)
+ {
+ /* Store BER target reached. */
+ ber_reached[fec_rate] =
+ ber_weighted_sum / tm[fec_rate]->bits_per_symbol;
+ /* Get new BER consign. */
+ ber_cur =
+ ce_rx_bl_ber_pt_bpt (fec_rate,
+ tonemask->carrier_nb,
+ (tm[fec_rate]->bits_per_symbol *
+ CE_RX_BL_BPT_QUANT_FACTOR) / tone_en);
+ }
+ else
+ {
+ ber_reached[fec_rate] = 0;
+ ber_cur = 0;
+ }
/* Apply BER target margin. */
if (ber_cur > ce_rx_bl_ber_margin_[fec_rate])
ber_cur = ber_cur - ce_rx_bl_ber_margin_[fec_rate];
@@ -304,6 +315,12 @@ ce_rx_bl_compute_tone_map_iterative (const u64 bpt_initial[PHY_FEC_RATE_NB],
}
/* Remove worst tone map. */
tonemap_free (tm[bad]);
+ /* Remove the "good one" because not usable. */
+ if (tm[good]->bits_per_symbol == 0)
+ {
+ tonemap_free (tm[good]);
+ return NULL;
+ }
/* Configure generated tone map. */
tm[good]->fecrate = good;
/* Update pre-computed parameters. */