summaryrefslogtreecommitdiff
path: root/cesar/ce/rx/bitloading/doc/bitloading.rst
diff options
context:
space:
mode:
Diffstat (limited to 'cesar/ce/rx/bitloading/doc/bitloading.rst')
-rw-r--r--cesar/ce/rx/bitloading/doc/bitloading.rst87
1 files changed, 79 insertions, 8 deletions
diff --git a/cesar/ce/rx/bitloading/doc/bitloading.rst b/cesar/ce/rx/bitloading/doc/bitloading.rst
index f060041d56..5333945380 100644
--- a/cesar/ce/rx/bitloading/doc/bitloading.rst
+++ b/cesar/ce/rx/bitloading/doc/bitloading.rst
@@ -485,14 +485,85 @@ To quantify the PBER (Q16U32), the following formula is used::
pber_q16 = pb_with_crc_false * 2^16 / pb_count
-The PBER sliding mean is computed using the following algorithm (see § 2.2.13
-of the TNS specification)::
-
- pber_factor_div = 256
- pber_factor_prev = 255
- pber_mean_q16 = (pber_factor_prev * pber_mean_q16
- + (pber_factor_div – pber_factor_prev) * pber_q16)
- / pber_factor_div
+The PBER sliding mean is now computed by PB and not by frame anymore.
+To avoid wasting time, the computation will be done as if all PB's with false
+CRC are received first. So, instead of computing PBER sliding mean at each new
+PB by using a for loop, an approximation is done to compute it at each new
+frame.
+
+The following is defined: :math:`M_{t}` is the PBER sliding mean,
+:math:`M_{t-1}` is the previous PBER sliding mean, :math:`m` is the PBER mean
+of the frame, :math:`n` is the number of PB in the frame and :math:`k` is the
+number of PBs with CRC false.
+
+For a frame of one PB, we have:
+
+.. math::
+
+ M_{t} = M_{t-1} (1 - \alpha) + \alpha m \textit{ (with m = 0 or 1)}
+
+For a frame with more than one PB, we can generalize to:
+
+.. math::
+
+ M_{t} = M_{t-1} (1 - \alpha)^n + \alpha \sum_{p=0}^{n-1} (1 - \alpha)^p m_{p}
+ \textit{ (with } m_{p} \textit{ the } p^{th} \textit{ PB CRC value)}
+
+We know that:
+
+.. math::
+
+ \sum_{p=0}^{n-1} (1 - \alpha)^p = \frac{1-(1-\alpha)^n}{1-(1-\alpha)}
+
+Then:
+
+.. math::
+
+ \sum_{p=0}^{n-1} (1 - \alpha)^p m_{p} = \frac{1-(1-\alpha)^k}{1-(1-\alpha)}
+
+If we replace it, we can obtain:
+
+.. math::
+
+ M_{t} = M_{t-1} (1 - \alpha)^n + \alpha (\frac{1-(1-\alpha)^k}{1-(1-\alpha)})
+
+It can be simplified to obtain:
+
+.. math::
+
+ M_{t} = M_{t-1} (1 - \alpha)^n + (1-(1-\alpha)^k)
+
+If :math:`\alpha` is near 0, we can assume that:
+
+.. math::
+
+ (1-\alpha)^n = 1 - n \alpha
+
+We obtain:
+
+.. math::
+
+ M_{t} = (1 - n \alpha) M_{t-1} + k \alpha
+
+Let's assume:
+
+.. math::
+
+ \alpha = \frac{1}{D}
+
+We can now write:
+
+.. math::
+
+ M_{t} = (1 - \frac{n}{D}) M_{t-1} + \frac{k}{D}
+
+.. math::
+
+ M_{t} = \frac{(D - n) M_{t-1} + k}{D}
+
+:math:`D` need to fit on a 16 bits value in order to prevent overflow. TNS has
+selected 6912 as good value (see `PBER evaluation for BMU algorithm
+<http://stestephe/svn/spidcom_digital_svn/projects/DSP_GESSICA/DSP_chain/SW/Bit_Loading/Documentation/Study/PBER%20evaluation%20for%20BMU%20Algoriothm.pdf>`_).
Statistics
^^^^^^^^^^