Theoretical {binfunest} | R Documentation |
Functions to calculate the theoretical performance of common modulation
formats. Includes the functions dB (x)
(returns 10log10(x)
), undB(x)
(reverses dB(x)
), Q_( x)
(Markum's Q function), and Q_Inv(x)
(returns the
SNR in Decibels to get probability x). Also includes mod_Inv
, which returns
the SNR required for a the function f
to reach the supplied BER (bit
error rate, or bit error probability).
is.wholenumber(x, tol = sqrt(.Machine$double.eps))
dB(x)
undB(x)
Q_(x)
Q_Inv(perr)
QPSKdB(x)
DQPSKdB(x)
DQPSKDDdB(x)
PSQPSKdB(x)
MPSKdB(x, M)
MPSKdB.8(x)
QAMdB.8.star(x)
QAMdB(x, M)
QAMdB.16(x)
mod_Inv(f, perr, guess = Q_Inv(perr))
mod_InvV(f, pv, offset = 0)
x |
a real number |
tol |
the tolerance to test x with. |
perr |
a probability of a bit error. |
M |
The integer number of symbols > 4. |
f |
a function (usually a BER function). |
guess |
a guess for the |
pv |
a vector of BERs. |
offset |
an offset in Decibels for guesses in |
The rest of the functions return the probability of a bit error given the SNR in Decibels.
QPSKdB
is Quadrature Phase shift keyed: two bits per symbol.
DQPSK
is differentially detected differentially coded QPSK.
DQPSKDDdB
is differentially detected differential QPSK (coherently
detected but differentially decoded. See DQPSK
above.
PSQPSKdB
is polarization-shifted QPSK: it is dual pole, but only
one pole is active at any one time, thus supplying three bits per
symbol. (See Agrell & Karlsson (2009, DOI:10.1109/JLT.2009.2029064)).
MPSKdB(x, M)
is generic M-ary phase shift keying of M
points in a circle.
MPSKdB.8
simply returns MPSKdB(x, 8)
QAMdB.8.star
is the optimal star configuration of 8-ary Quadrature
Amplitude Modulation (QAM), such that
the legs are at \pm1
and \pm(1+\sqrt3)
.
QAMdB(x, M)
is generic rectangular QAM constellation of M
points.
QAMdB.16
Returns the BER for the rectangular QAM constellation according to
Proakis Eq. 5-2-80.
mod_Inv
will take a function f(x)
and return the x such that
f(x)==perr
but it does this based on the log( f(x))
and the log( perr)
, so
f(x)>0
.
mod_InvV
is a vectorized version (give it a vector of BERs and it returns a
vector of SNRs).
is.wholenumber(x)
returns TRUE
if c-round(x) < tol
.
dB(x)
returns 10*log10(x)
undB(x)
returns 10^(x/10)
Q_Inv(x)
returns 2*dB( -qnorm(x))
, which is the
SNR (in Decibels) required to get a probability of error of x.
Q_Inv( Q_( undB( x/2))) = x and Q_( undB( Q_Inv( x)/2))=x
mod_Inv( f, x)
returns a list with the SNR in Decibels to
reach the BER
perr
such that f( mod_Inv( f, x)$x) = x
.
The returned list has elements
$x
as the SNR and
$fval
as the function value.
dB( 10) # == 10
undB( 20) # == 100
Q_Inv( Q_( undB( 10/2))) # = 10
Q_( undB( Q_Inv( 0.001)/2)) # = 0.001
mod_Inv( QPSKdB, QPSKdB( 7)) # yields 7
mod_InvV(QPSKdB, QPSKdB(c(6,7)))