SMICA  1.0
SMICA

Introduction

SMICA is a component separation method based on second-order statistics.
The acronym stands for Spectral Matching Independent Component Analysis because, in its basic version, the statistics are empirical power spectra and because SMICA works by matching these power spectra to a theoretical model of them. In its current version, SMICA uses a more general class of statistics.
The matching criterion is derived from the maximum likelihood principle.
We refer the reader to the companion document for a full description of theoretical aspects of SMICA.

Installation

Download the package :

1 git clone https://gitlab.in2p3.fr/smica/smica.git



Install python module as usual :

1 python setup.py install

User example

Here is a short example showing how to build a simple model matching a set of statistics.

1 from smica import *
2 
3 # stats contains input second order statistics
4 # under the form of T covariance matrices.
5 # nmodes contains the number of samples used to build each of them.
6 [n,n,T] = shape(stats)
7 [1, T] = shape(nmodes)
8 
9 # the model made of 2 independant sources, plus uncorrelated noise.
10 # X = AS+N with mixing matrix A of shape (n,2)
11 c1 = Source1D (n, T, name='source_1')
12 c2 = Source1D (n, T, name='source_2')
13 noise = NoiseDiag(n, T, name='noise')
14 model = Model(complist=[c1, c2, noise])
15 
16 # Find optimal parameters
17 model.joint_diag (stats, nmodes) # init mixing matrix with a joint diagonalization algorithm
18 model.quasi_newton (stats, nmodes) # init power spectra with direct resolution of the system
19 m0 = model.mismatch(stats, nmodes)
20 model.conjugate_gradient (stats, nmodes) # find optimal parameters under the matching criterion
21 m1 = model.mismatch(stats, nmodes)
22 print "mismatch: %2.3e %2.3e" % (m0, m1)