summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuraj Yerramilli2016-02-22 21:20:13 +0530
committerSuraj Yerramilli2016-02-22 21:20:13 +0530
commit31ac65cd1d832bb5e56a3e5acf530c5c9e6ec9cb (patch)
treee8c702564de9ce2a8ff672b7fac8450b10abba5e
parent9e15a697398567f90f06790440a5be4199d081d4 (diff)
parenteb6759aef6a2358e6a8d2220c1562d919b540b1b (diff)
downloadSysID-R-code-31ac65cd1d832bb5e56a3e5acf530c5c9e6ec9cb.tar.gz
SysID-R-code-31ac65cd1d832bb5e56a3e5acf530c5c9e6ec9cb.tar.bz2
SysID-R-code-31ac65cd1d832bb5e56a3e5acf530c5c9e6ec9cb.zip
Merge branch 'master' of https://github.com/surajy123/R-sysid
-rw-r--r--R/idinput.R63
-rw-r--r--R/prbs.R70
2 files changed, 133 insertions, 0 deletions
diff --git a/R/idinput.R b/R/idinput.R
index c9831b0..330ac93 100644
--- a/R/idinput.R
+++ b/R/idinput.R
@@ -30,6 +30,8 @@ idinput<-function(n,type='rgs',band=c(0,1),levels=c(-1,1)){
rgs(n,band,levels)
} else if(type=="sine"){
multisine(n,1,band,levels)
+ }else if(type=="prbs"){
+ idin.prbs(n,band,levels)
}
}
@@ -71,6 +73,67 @@ multisine <- function(N,nin=1,band,levels){
return(u)
}
+#' @export
+library(bitops)
+require(signal)
+
+idin.prbs<-function(n,band=c(0,1),levels=c(0,1)){
+ u=vector()
+ for(i in 1:18){
+ if(n / (2^i) < 1){
+ u=idin.prbs12(i,band,levels)
+ break
+ }
+ }
+ return(u[1:n])
+}
+
+idin.prbs12 <- function(N,band=c(0,1),levels=c(0,1)){
+ first=ceiling(abs(rnorm(1)*10)) #some non-zero initial state
+ x= first
+ v = vector()
+ n=2^N-1
+ i=1
+ clock=floor(1/band[2])
+ k=1
+ M=rbind(c(0,0,0,0),c(1,2,0,0),c(1,3,0,0),c(1,4,0,0),c(2,5,0,0),c(1,6,0,0),
+ c(1,7,0,0),c(1,2,7,8),c(4,9,0,0),c(3,10,0,0),c(9,11,0,0),
+ c(6,8,11,12),c(9,10,12,13),c(4,8,13,14),c(14,15,0,0),c(4,13,15,16),
+ c(14,17,0,0),c(11,18,0,0))
+ repeat{
+ a=M[N,1]
+ b=M[N,2]
+ c=M[N,3]
+ d=M[N,4]
+ four=c(8,12,13,14,16)
+ if(N %in% four){
+ e=bitwXor(bitwShiftR(x,N-a),bitwShiftR(x,N-b))
+ f=bitwXor(bitwShiftR(x,N-c),bitwShiftR(x,N-d))
+ newbit=bitwAnd(bitwXor(e,f),1)
+ }else{
+ newbit=bitwAnd(bitwXor(bitwShiftR(x,N-a),bitwShiftR(x,N-b)),1)
+ }
+ if(k>=clock || i==1){
+ v[i]=newbit
+ i=i+1
+ k=1
+ }else{
+ v[i]=v[i-1]
+ i=i+1
+ k=k+1
+ }
+ x=bitwOr(bitwShiftR(x,1),bitwShiftL(newbit,N-1))
+ if(x==first){
+ break
+ }
+ }
+
+ v=sapply(v, function(x){if (x==0) levels[1] else levels[2]})
+ return(v)
+}
+
+
+
butter_filt <- function(x,band){
filt <- T; type <- "pass"
if(band[1]<=2e-3){
diff --git a/R/prbs.R b/R/prbs.R
new file mode 100644
index 0000000..0380625
--- /dev/null
+++ b/R/prbs.R
@@ -0,0 +1,70 @@
+#' @export
+ library(bitops)
+require(signal)
+
+idin.prbs<-function(n,band=c(0,1),levels=c(0,1)){
+ u=vector()
+ for(i in 1:18){
+ if(n / (2^i) < 1){
+ u=idin.prbs12(i,band,levels)
+ break
+ }
+ }
+ return(u[1:n])
+}
+
+idin.prbs12 <- function(N,band=c(0,1),levels=c(0,1)){
+ first=ceiling(abs(rnorm(1)*10)) #some non-zero initial state
+ x= first
+ v = vector()
+ n=2^N-1
+ i=1
+ clock=floor(1/band[2])
+ k=1
+ M=rbind(c(0,0,0,0),c(1,2,0,0),c(1,3,0,0),c(1,4,0,0),c(2,5,0,0),c(1,6,0,0),
+ c(1,7,0,0),c(1,2,7,8),c(4,9,0,0),c(3,10,0,0),c(9,11,0,0),
+ c(6,8,11,12),c(9,10,12,13),c(4,8,13,14),c(14,15,0,0),c(4,13,15,16),
+ c(14,17,0,0),c(11,18,0,0))
+ repeat{
+ a=M[N,1]
+ b=M[N,2]
+ c=M[N,3]
+ d=M[N,4]
+ four=c(8,12,13,14,16)
+ if(N %in% four){
+ e=bitwXor(bitwShiftR(x,N-a),bitwShiftR(x,N-b))
+ f=bitwXor(bitwShiftR(x,N-c),bitwShiftR(x,N-d))
+ newbit=bitwAnd(bitwXor(e,f),1)
+ }else{
+ newbit=bitwAnd(bitwXor(bitwShiftR(x,N-a),bitwShiftR(x,N-b)),1)
+ }
+ if(k>=clock || i==1){
+ # newbit=bitwAnd(bitwXor(bitwShiftR(x,0),bitwShiftR(x,1)),1)
+ v[i]=newbit
+ i=i+1
+ # x=bitwOr(bitwShiftR(x,1),bitwShiftL(newbit,6))
+ k=1
+ }else{
+
+ v[i]=v[i-1]
+ i=i+1
+ k=k+1
+ }
+
+ x=bitwOr(bitwShiftR(x,1),bitwShiftL(newbit,N-1))
+
+ #checking if it exceeds the repetition period or reaches
+ #required no. of bits first
+ if(x==first){
+ cat("Repetition period is ",i-1)
+ break
+ }
+ # else if(i-1==n){
+ # break
+ # }
+
+ }
+
+ v=sapply(v, function(x){if (x==0) levels[1] else levels[2]})
+ return(v)
+} \ No newline at end of file