runica() - Perform Independent Component Analysis (ICA) decomposition
            of psychophysiological data using the infomax ICA algorithm of 
            Bell & Sejnowski (1995) with the natural gradient feature of Amari, 
            Cichocki & Yang, the extended-ICA algorithm of Lee, Girolami & 
            Sejnowski, PCA dimension reduction, and/or specgram() preprocessing 
            suggested by M. Zibulevsky. Note: The equivalent binica() is faster.
      simply >> [weights,sphere] = runica(data);
        else >> [weights,sphere,activations,bias,signs,lrates] ...
                                 = runica(data,'Key1',Value1',...);

 data        = input data (chans,frames*epochs). 
               Note: If data consists of multiple discontinuous epochs, 
               each epoch should be separately baseline-zero'd using:
                  >> data = rmbase(data,frames,basevector);

 Optional_Keywords       Keyword_Values                  Default_Values

 'ncomps'    = [N] number of ICA components to compute (default -> chans)
               using rectangular ICA decomposition
 'pca'       = [N] decompose a principal component     (default -> 0=off)
               subspace of the data. Value is the number of PCs to retain.
 'sphering'  = ['on'/'off'] flag sphering of data      (default -> 'on')
 'weights'   = [W] initial weight matrix               (default -> eye())
                            (Note: if 'sphering' 'off', default -> spher())
 'lrate'     = [rate] initial ICA learning rate (<< 1) (default -> heuristic)
 'block'     = [N] ICA block size (<< datalength)      (default -> heuristic)
 'anneal'    = annealing constant (0,1] (defaults -> 0.90, or 0.98, extended)
                         controls speed of convergence
 'annealdeg' = [N] degrees weight change for annealing (default -> 70)
 'stop'      = [f] stop training when weight-change < this (default -> 1e-6)
 'maxsteps'  = [N] max number of ICA training steps    (default -> 512)
 'bias'      = ['on'/'off'] perform bias adjustment    (default -> 'on')
 'momentum'  = [0<f<1] training momentum               (default -> 0)
 'extended'  = [N] perform tanh() "extended-ICA" with sign estimation 
               every N training blocks. If N < 0, fix number of sub-Gaussian
               components to -N [faster than N>0]      (default|0 -> off)
 'specgram'  = [srate loHz hiHz frames winframes] decompose a complex time/frequency
               transform of the data. (Note: winframes must divide frames) 
                   (defaults [srate 0 srate/2 size(data,2) size(data,2)])
 'posact'    = make all component activations net-positive(default 'on'}
 'verbose'   = give ascii messages ('on'/'off')        (default -> 'on')

 Output_Variables [RO = output in reverse order of projected mean variance 
                        unless starting weight matrix passed ('weights' above)]

 weights     = ICA weight matrix (comps,chans)     [RO]
 sphere      = data sphering matrix (chans,chans) = spher(data)
               Note: unmixing_matrix = weights*sphere {sphering off -> eye(chans)}
 activations = activation time courses of the output components (ncomps,frames*epochs)
 bias        = vector of final (ncomps) online bias [RO]    (default = zeros())
 signs       = extended-ICA signs for components    [RO]    (default = ones())
                   [-1 = sub-Gaussian; 1 = super-Gaussian]
 lrates      = vector of learning rates used at each training step

                                                       Toolbox function list