binVector <- function(n, min.length) {

  result <- integer()
  i <- 0
  while (n != 0) {
    result <- c(n %% 2, result)
    n = n %/% 2
    i <- i + 1
  }

  zeros <- rep(0, times = min.length)

  result <- c(zeros, result)

  return(paste(tail(result,min.length), collapse = ""))
}

decToBin <- function(x) { if (all(x<2)) x else paste(decToBin(x%/%2), x%%2, sep="") }

octalToDec <- function(x) {
  res <- numeric()
  for(j in 1:length(x)) {
  dec <- 0
  i <- 0
    while (x[j] > 0) {
      dec <- dec + (x[j] %% 10) * (8^i)
      i <- i + 1
      x[j] <- x[j] %/% 10
    }
  res[j] <- dec
  }

  return(res)
}

gcd <- function(n, m) {
  if (n == 0 && m == 0) return(0)

  n <- abs(n); m <- abs(m)
  if (m > n) {
    t <- n; n <- m; m <- t
  }
  while (m > 0) {
    t <- n
    n <- m
    m <- t %% m
  }
  return(n)
}
node.short <- 20
node.long <- 45
dots <- function (v, node) if(length(v) > node) ", ..." else ""

if (params$encoder$rsc == TRUE) {
  art.coder <- "Rekursiver"
} else {
  art.coder <- "Nicht-Rekursiver"
}

if (params$encoder$rsc == FALSE) {
  generator.matrix <- 
    paste0(decToBin(octalToDec(params$encoder$generators)), " \\\\ ", collapse = "")
  generator.print <- paste0("(", paste(params$encoder$generators, collapse=","), 
                           ")_8 = \\begin{pmatrix}", generator.matrix, "\\end{pmatrix}")

} else {
  generator.print <- 
    paste0("\\left(1,", 
           paste0("\\frac{", 
              head(params$encoder$generators, length(params$encoder$generators) - 1), "}{",
                        tail(params$encoder$generators, 1), "}", collapse = ","), "\\right)")
}


punctuation.print <- if(!is.null(params$punctuation)) paste0(apply(params$punctuation, 1, function(x) {paste0(x, collapse=" & ")}), collapse = " \\\\ ")

Kodierer Information

Kodierer Information

if (is.null(params$punctuation)) {
  if (params$turbo) {
    code.rate <- "$$\\frac{1}{3}$$"
  } else {
    code.rate <- paste0("$$\\frac{1}{",params$encoder$N,"}$$")
  }
} else {
  factor <- 3
  if (!params$turbo) {
    factor <- params$encoder$N
  }

  gcd.value <- gcd(length(params$punctuation), sum(params$punctuation) * factor)

  code.rate <- paste0("$$\\frac{",length(params$punctuation) / gcd.value,"}{",sum(params$punctuation) * factor / gcd.value,"}$$")
}

Simulationsdaten

Plot

df <- params$dataframe
if (max(df$ber) == 0) {
  ggplot2::ggplot(df,ggplot2::aes(db))+ggplot2::geom_line(ggplot2::aes(y = ber))+ggplot2::xlab("Signal Rausch Verh\u00e4ltnis [dB]")+ggplot2::ylab("Bitfehlerrate")
} else {
  ggplot2::ggplot(df,ggplot2::aes(db))+ggplot2::geom_line(ggplot2::aes(y = ber))+ggplot2::scale_y_log10(limits = c(min(df$ber) / 2, max(df$ber) * 2))+ggplot2::xlab("Signal Rausch Verh\u00e4ltnis [dB]")+ggplot2::ylab("Bitfehlerrate")
}

Statistik

Bitefehlerrate:

summary(df$ber)


DaniWi/Channelcoding documentation built on May 6, 2019, 1:23 p.m.