cdma encoding
This commit is contained in:
50
cdma.Rmd
50
cdma.Rmd
@@ -20,21 +20,61 @@ on the receiving side.
|
|||||||
knitr::opts_chunk$set(echo = TRUE)
|
knitr::opts_chunk$set(echo = TRUE)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Getting Input
|
## Input and binary interpretation
|
||||||
We first get input by reading a file `input.txt`, where each line (0-3) is one communication channel.
|
We first get input by reading a file `input.txt`, where each line (0-3) is one communication channel.
|
||||||
Because UTF8 maintains compatibility with ASCII, the UTF8 conversion can be used assuming that the input is only ASCII.
|
Because UTF8 maintains compatibility with ASCII, the UTF8 conversion can be used assuming that the input is only ASCII.
|
||||||
ASCII characters require 7 bits of information per character.
|
ASCII characters require 7 bits of information per character.
|
||||||
```{r input}
|
```{r input}
|
||||||
lines <- readLines('./input.txt')
|
lines <- readLines('./input.txt',encoding = 'ASCII')
|
||||||
lines_bin <- unlist(lapply(lines, utf8ToInt))
|
strToBin <- function(s){
|
||||||
|
# FIXME for strings longer than 1
|
||||||
|
r <- as.integer(intToBits(utf8ToInt(s)))
|
||||||
|
r <- r[1:7]
|
||||||
|
return(r)
|
||||||
|
}
|
||||||
|
lines_bin <- do.call(rbind, lapply(lines, strToBin))
|
||||||
```
|
```
|
||||||
|
|
||||||
```{r input-demo, echo=FALSE}
|
```{r input-demo, echo=FALSE}
|
||||||
print(lines)
|
print(lines)
|
||||||
print(lines_bin)
|
print(lines_bin[1])
|
||||||
|
print(lines_bin[2])
|
||||||
|
print(lines_bin[3])
|
||||||
|
print(lines_bin[4])
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Orthogonal Code
|
## Orthogonal Code
|
||||||
For an orthogonal code, we are looking for vectors $(a,b,...n)$ in that satisfy pairwise orthogonality $a \perp b$.
|
For an orthogonal code, we are looking for vectors $(a,b,...n)$ that satisfy pairwise orthogonality $a \perp b$.
|
||||||
|
```{r orth}
|
||||||
|
o1 <- c( 1, 1, 1, 1, 1)
|
||||||
|
o2 <- c(-1,-1, 1, 1, 1)
|
||||||
|
o3 <- c( 1,-1, 1,-1,-1)
|
||||||
|
o4 <- c(-1, 1, 1,-1,-1)
|
||||||
|
orthogonals <- do.call(rbind,list(o1,o2,o3,o4))
|
||||||
|
```
|
||||||
|
|
||||||
|
```{r orth-demo, include=FALSE}
|
||||||
|
perms <- combn(x = orthogonals,m = 2, simplify = FALSE)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Encode
|
||||||
|
|
||||||
|
|
||||||
|
```{r encode}
|
||||||
|
output = c()
|
||||||
|
for (j in 1:ncol(lines_bin)){
|
||||||
|
col <- lines_bin[,j]
|
||||||
|
output_symbol <- 0
|
||||||
|
for (i in 1:length(col)){
|
||||||
|
symbol <- col[i] # the symbol to be encoded
|
||||||
|
code <- orthogonals[i,] # the code vector
|
||||||
|
|
||||||
|
single_symbol <- (-1)^(1+symbol) * code # the resulting encoded vector
|
||||||
|
output_symbol <- output_symbol + single_symbol # the sum of all encoded vectors
|
||||||
|
}
|
||||||
|
output <-append(output, output_symbol)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user