Theoretical {binfunest} R Documentation

## Theoretical error rate functions

### Description

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)  ### Arguments  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 perr (the default usually works). pv a vector of BERs. offset an offset in Decibels for guesses in mod_InvV. ### Details 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). ### Value 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.

pracma::fzero()

### Examples

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)))



[Package binfunest version 0.1.0 Index]