Home > chronux_1_50 > continuous > spsvd.m

spsvd

PURPOSE ^

Space frequency SVD of input data - continuous processes

SYNOPSIS ^

function [sv,sp,fm] = spsvd(data,params,mdkp)

DESCRIPTION ^

 Space frequency SVD of input data - continuous processes
 Usage: [sv,sp,fm] = spsvd(data,params,mdkp)
 Inputs:
 data       (data matrix in timexchannels form)-required
       params      structure containing parameters - params has the
       following fields: tapers, Fs, fpass, pad
            tapers         (parameters for calculating tapers [NW,K]) - optional. Defaults to [3 5]
            Fs             (sampling frequency) -- optional. Defaults to 1.
           fpass       (frequency band to be used in the calculation in the form
                                   [fmin fmax])- optional. 
                                   Default all frequencies between 0 and Fs/2
            pad            (padding factor for the FFT) - optional (can take values -1,0,1,2...). 
                    -1 corresponds to no padding, 0 corresponds to padding
                    to the next highest power of 2 etc.
                       e.g. For N = 500, if PAD = -1, we do not pad; if PAD = 0, we pad the FFT
                       to 512 points, if pad=1, we pad to 1024 points etc.
                       Defaults to 0.
 mdkp       (number of dimensions to be kept)-optional. Default is the
               maximum possible modes determined by taper parameters

 Outputs:
 sv sp fm  : singular values, space modes, frequency modes

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [sv,sp,fm] = spsvd(data,params,mdkp)
0002 % Space frequency SVD of input data - continuous processes
0003 % Usage: [sv,sp,fm] = spsvd(data,params,mdkp)
0004 % Inputs:
0005 % data       (data matrix in timexchannels form)-required
0006 %       params      structure containing parameters - params has the
0007 %       following fields: tapers, Fs, fpass, pad
0008 %            tapers         (parameters for calculating tapers [NW,K]) - optional. Defaults to [3 5]
0009 %            Fs             (sampling frequency) -- optional. Defaults to 1.
0010 %           fpass       (frequency band to be used in the calculation in the form
0011 %                                   [fmin fmax])- optional.
0012 %                                   Default all frequencies between 0 and Fs/2
0013 %            pad            (padding factor for the FFT) - optional (can take values -1,0,1,2...).
0014 %                    -1 corresponds to no padding, 0 corresponds to padding
0015 %                    to the next highest power of 2 etc.
0016 %                       e.g. For N = 500, if PAD = -1, we do not pad; if PAD = 0, we pad the FFT
0017 %                       to 512 points, if pad=1, we pad to 1024 points etc.
0018 %                       Defaults to 0.
0019 % mdkp       (number of dimensions to be kept)-optional. Default is the
0020 %               maximum possible modes determined by taper parameters
0021 %
0022 % Outputs:
0023 % sv sp fm  : singular values, space modes, frequency modes
0024 
0025 
0026 if nargin < 1; error('Need data'); end;
0027 if nargin < 2 || isempty(params); params=[]; end;
0028 [tapers,pad,Fs,fpass,err,trialave,params]=getparams(params);
0029 clear err trialave params
0030 [N,NCHAN]=size(data);
0031 tapers=dpsschk(tapers,N,Fs);
0032 nfft=max(2^(nextpow2(N)+pad),N);% number of points in fft
0033 [N,K]=size(tapers);
0034 if nargin<3 || isempty(mdkp); mdkp=min(K,NCHAN);
0035 elseif mdkp > min(K,NCHAN); error('mdkp has to be less than both K and NCHAN');end;
0036 
0037 tvec=(1:N)';
0038 tvec=repmat(tvec,[1 K]);
0039 tvec=tvec*2*pi*i;
0040 f=getfgrid(Fs,nfft,fpass);
0041 nf=length(f);
0042 sp=zeros(NCHAN,nf,mdkp);
0043 sp=sp+i*sp;
0044 fm=zeros(K,nf,mdkp);
0045 fm=fm+i*fm;
0046 sv=zeros(nf,min([K,NCHAN]));
0047 for j=1:nf 
0048 %     for k=1:K
0049 %       proj(:,k)=tapers(:,k).*exp(-f0*tvec');
0050 %     end
0051     proj=tapers.*exp(-f(j)*tvec);
0052     tmp=data'*proj; % projected data
0053     [u,s,v]= svd(tmp,0); % svd
0054     for mk=1:mdkp, 
0055       sp(:,j,mk)=u(:,mk)';
0056       fm(:,j,mk)=v(:,mk)';
0057     end  
0058     sv(j,:)=diag(s);
0059 end;

Generated on Mon 09-Oct-2006 00:54:52 by m2html © 2003