


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

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;