Last data update: 2014.03.03

R: NSS.SD Method for Nonstationary Blind Source Separation
NSS.SDR Documentation

NSS.SD Method for Nonstationary Blind Source Separation

Description

The NSS.SD method for nonstationary blind source separation. The function estimates the unmixing matrix in a nonstationary source separation model by simultaneously diagonalizing two covariance matrices computed for different time intervals.

Usage

NSS.SD(X, ...)

## Default S3 method:
NSS.SD(X, n.cut=NULL, ...)
## S3 method for class 'ts'
NSS.SD(X, ...)

Arguments

X

a numeric matrix or a multivariate time series object of class ts. Missing values are not allowed.

n.cut

either an integer between 1 and nrow(X) or an vector of length 3 of the form c(1,n.cut,nrow(X)) to specify where to split the time series. If NULL, then c(1,floor(nrow(X)/2),nrow(X)) is used.

...

further arguments to be passed to or from methods.

Details

The model assumes that the mean of the p-variate time series is constant but the variances change over time.

Value

A list with class 'bss' containing the following components:

W

estimated unmixing matrix.

EV

eigenvalues from the eigenvalue-eigenvector decomposition.

n.cut

specifying the intervals where data is split

S

estimated sources as time series objected standardized to have mean 0 and that the sources in the first interval are 1.

Author(s)

Klaus Nordhausen

References

Choi S. and Cichocki A. (2000), Blind separation of nonstationary sources in noisy mixtures, Electronics Letters, 36, 848–849.

Choi S. and Cichocki A. (2000), Blind separation of nonstationary and temporally correlated sources from noisy mixtures, Proceedings of the 2000 IEEE Signal Processing Society Workshop Neural Networks for Signal Processing X, 1, 405–414.

Nordhausen K. (2013), On robustifying some second order blind source separation methods for nonstationary time series, to appear in Statistical Papers, ??, ???–???.

See Also

ts, NSS.JD, NSS.TD.JD

Examples

n <- 1000
s1 <- rnorm(n)
s2 <- 2*sin(pi/200*1:n)* rnorm(n)
s3 <- c(rnorm(n/2), rnorm(100,0,2), rnorm(n/2-100,0,1.5))
S <- cbind(s1,s2,s3)
plot.ts(S)
A<-matrix(rnorm(9),3,3)
X<- S%*%t(A)

NSS1 <- NSS.SD(X)
NSS1
MD(coef(NSS1),A)
plot(NSS1)
cor(NSS1$S,S)

NSS1b <- NSS.SD(X, n.cut=400)
MD(coef(NSS1b),A)

NSS1c <- NSS.SD(X, n.cut=c(1,600,1000))
MD(coef(NSS1c),A)

Results


R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library(JADE)
> png(filename="/home/ddbj/snapshot/RGM3/R_CC/result/JADE/NSS.SD.Rd_%03d_medium.png", width=480, height=480)
> ### Name: NSS.SD
> ### Title: NSS.SD Method for Nonstationary Blind Source Separation
> ### Aliases: NSS.SD NSS.SD.default NSS.SD.ts
> ### Keywords: multivariate ts
> 
> ### ** Examples
> 
> n <- 1000
> s1 <- rnorm(n)
> s2 <- 2*sin(pi/200*1:n)* rnorm(n)
> s3 <- c(rnorm(n/2), rnorm(100,0,2), rnorm(n/2-100,0,1.5))
> S <- cbind(s1,s2,s3)
> plot.ts(S)
> A<-matrix(rnorm(9),3,3)
> X<- S%*%t(A)
> 
> NSS1 <- NSS.SD(X)
> NSS1
W :
          [,1]       [,2]      [,3]
[1,]  9.028452 -11.234410 0.7320843
[2,] -1.285608   1.905341 0.9609667
[3,]  3.665248  -3.761051 0.5757521

EV :
[1] 2.4247280 1.0173283 0.9633907

n.cut :
[1]    1  500 1000

> MD(coef(NSS1),A)
[1] 0.5264549
> plot(NSS1)
> cor(NSS1$S,S)
                  s1          s2          s3
Series 1 -0.02638863  0.06195451  0.99641281
Series 2  0.50362794  0.87120726 -0.07860346
Series 3  0.86377990 -0.48654497  0.03278846
> 
> NSS1b <- NSS.SD(X, n.cut=400)
> MD(coef(NSS1b),A)
[1] 0.4390988
> 
> NSS1c <- NSS.SD(X, n.cut=c(1,600,1000))
> MD(coef(NSS1c),A)
[1] 0.3280087
> 
> 
> 
> 
> 
> dev.off()
null device 
          1 
>