Learn R Programming

JADE (version 1.1-0)

AMUSE: AMUSE Method for Blind Source Separation

Description

AMUSE method for the second order blind source separation problem. The function estimates the unmixing matrix in a second order stationary source separation model by jointly diagonalizing the covariance matrix and an autocovariance matrix at lag k.

Usage

AMUSE(x, ...)

## S3 method for class 'default':
AMUSE(x, k = 1, \dots)
## S3 method for class 'ts':
AMUSE(x, \dots)

Arguments

x
a numeric matrix or a multivariate time series object of class ts. Missing values are not allowed.
k
integer lag for the autocovariance matrix, must be larger than 0. Default is 1.
...
further arguments to be passed to or from methods.

Value

  • A list with class 'bss' containing the following components:
  • Westimated unmixing matrix.
  • EVeigenvectors of autocovariance matrix.
  • klag of the autocovariance matrix used.
  • Sestimated sources as time series objected standardized to have mean 0 and unit variances.

Details

The choosen lag k has a huge effect on the performance. It should be choosen such that the eigenvalues of autocovariance matrix are distinct. The function assumes always as many sources as there are time series.

References

Tong, L., Soon, V.C., Huang, Y.F. and Liu, R. (1990), AMUSE: a new blind identification algorithm, in Proceedings of {IEEE} International Symposium on Circuits and Systems 1990, 1784--1787. Miettinen, J., Nordhausen, K., Oja, H. and Taskinen, S. (2012), Statistical properties of a blind source separation estimator for stationary time series, submitted, ??--??.

See Also

ts

Examples

Run this code
# creating some toy data
A<- matrix(rnorm(9),3,3)
s1 <- arima.sim(list(ar=c(0.3,0.6)),1000)
s2 <- arima.sim(list(ma=c(-0.3,0.3)),1000)
s3 <- arima.sim(list(ar=c(-0.8,0.1)),1000)

S <- cbind(s1,s2,s3)
X <- S %*% t(A)

res1<-AMUSE(X)
res1
coef(res1)
plot(res1) # compare to plot.ts(S)
MD(coef(res1),A)

# input of a time series
X2<- ts(X, start=c(1961, 1), frequency=12)
plot(X2)
res2<-AMUSE(X2, k=2)
plot(res2)

Run the code above in your browser using DataLab