Kernel code for computing log-likelihood ratios of data bits is contained in the file softdemod_kernel.cpp. Processing is divided into a sequence of 8 loops which perform the following computations:
| Loop Number | Loop Computation |
|---|---|
| 1 | Compute difference between received symbols and constellation points. |
| 2 | Compute squared magnitude of Loop 1 differences. |
| 3, 4, 5 | Compute estimate of exponential function of Loop 2 squared magnitudes weighted by negative inverse of noise variance. A trick based on IEEE 754 floating-point format is utilized. |
| 6 | Perform summing operation on exponentials for numerator and denominator of LLR equation. |
| 7 | Compute ratio of two sums computed by Loop 6, which is bit likelihood ratio. |
| 8 | Compute $log()$ function of Loop 7 outputs. To reduce unnecessary complexity for these labs, the $log()$ function is not implemented here, so this loop simply sends likelihood ratios to output. |