---
title: "BER_Functions"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{BER_Functions}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
log10Tck <- function(side, type){
lim <- switch(side,
x = par('usr')[1:2],
y = par('usr')[3:4],
stop("side argument must be 'x' or 'y'"))
at <- floor(lim[1]) : ceiling(lim[2])
return(switch(type,
minor = outer(1:9, 10^(min(at):max(at))),
major = 10^at,
stop("type argument must be 'major' or 'minor'")
))
}
```
```{r setup}
library( binfunest)
#set.seed( 31394)
```
The `binfunest` package includes a number of common bit error rate functions. The function take a Signal to Noise ratio (SNR) expressed as the energy in a single bit ($E_b/N_0$) in Decibels and return the probability of error. Most of the functions were taken from Proakis.
```{r figure, fig.height=8, fig.width=5}
plot( QPSKdB, 0, 20, log="y", ylim=c( 1e-6, 0.5), axes=F,
main="Modulation Performance Curves", xlab="SNR in dB",
ylab="BER")
axis(2, at=log10Tck('y','major'), tck=1, lty=3) # left
axis(4, at=log10Tck('y','major'), tcl= 0.2, labels=NA) # right
axis(2, at=log10Tck('y','minor'), tcl= 0.1, labels=NA) # left
axis(4, at=log10Tck('y','minor'), tcl= 0.1, labels=NA) # right
axis(1, at=seq( from=0, to=20, by=2), tck=1, lty=3) # normal x axis
#axis(3) # normal x axis on top side of plot
box()
curve( DBPSKdB, 0, 20, col="cyan", add=TRUE)
curve( DQPSKdB, 0, 20, col="magenta", add=TRUE)
curve( QAMdB.8.star, 0, 20, col="blue", add=TRUE)
curve( PSQPSKdB, 0, 20, col="red", add=TRUE)
curve( QAMdB.16, 0, 20, col="green", add=TRUE)
legend( "bottomleft", legend=c( "QPSKdB", "DBPSK", "DQPSKdB", "QAMdB.8.star", "PSQPSKdB",
"QAMdB.16"),
lty=c( 1, 1, 1, 1, 1, 1),
col=c("black", "cyan", "magenta", "blue", "red", "green"))
```