How to calculate $E_b/N_0$ for a 8PSK? My BER is given. But I don't understand how to calculate $E_b/N_0$ as it is inside a Q function.
2 Answers
Assuming that you have the correct formula for the BER (which is probably based on the assumption that a Gray code is used), then - as mentioned by MBaz in a comment - you would have to invert the $Q$ function, which is a problem for which no analytic solution exists. You can use numerical methods implemented in Matlab and probably in other software packages, but you can also just estimate the required value of $E_b/N_0$ from a graph of the bit error rate. I would assume that the latter is what you're supposed to do if that's a homework problem.
Simple approximations (actually bounds) of the $Q$ functions exist, but inverting them will very likely result in very inaccurate estimates of $E_b/N_0$.
-
$\begingroup$ Thanks for the reply, but I am not sure how to invert the Q function? $\endgroup$– CynthiaNov 19, 2018 at 16:29
-
$\begingroup$ @Cynthia: That's what I tried to explain in my answer, you can't do it analytically. You can use some package (such as Matlab) that does it numerically, or you just estimate it from the graph. $\endgroup$– Matt L.Nov 19, 2018 at 16:30
The Q function is simply the tail probability for a standard normal distribution (i.e. zero-mean, unit variance Gaussian), defined as: $$ Q(x) = 1 - \Phi(x), $$ where $\Phi(x)$ is the cumulative distribution function (CDF) for a standard normal.
The function $1 - \text{CDF}$, for any distribution, is sometimes referred to as the "complementary cumulative distribution function" (CCDF) or the "survival function" (SF). What we are trying to find is a way of evaluating $Q^{-1}(x)$, the inverse survival function (ISF) for the standard normal distribution.
If you don't have access to MATLAB but have a copy of Python/SciPy installed (free), you can use the function norm.isf
in the scipy.stats
module, documentation found here. This function is the inverse survival function for the normal distribution.
EDIT: Try It Online!
qfuncinv
(or similar in other packages). $\endgroup$