


Space frequency SVD of input data - continuous processes
Usage: [sv,sp,fm] = spsvd(data,tapers,Fs,fpass,mdkp)
Inputs:
data (data matrix in timexchannels form)-required
tapers (tapers parameters or precalculated tapers)-required
Fs (sampling frequency)-optional. Default 1
fpass (band of frequencies to be kept)-optional. Default [0 Fs/2]
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,tapers,Fs,fpass,mdkp) 0002 % Space frequency SVD of input data - continuous processes 0003 % Usage: [sv,sp,fm] = spsvd(data,tapers,Fs,fpass,mdkp) 0004 % Inputs: 0005 % data (data matrix in timexchannels form)-required 0006 % tapers (tapers parameters or precalculated tapers)-required 0007 % Fs (sampling frequency)-optional. Default 1 0008 % fpass (band of frequencies to be kept)-optional. Default [0 Fs/2] 0009 % mdkp (number of dimensions to be kept)-optional. Default is the 0010 % maximum possible modes determined by taper parameters 0011 % 0012 % Outputs: 0013 % sv sp fm : singular values, space modes, frequency modes 0014 0015 0016 if nargin < 2; error('Need data and tapers'); end; 0017 if nargin < 3; Fs=1; end; 0018 if nargin < 4; fpass=[0 Fs/2]; end; 0019 0020 [N,NC]=size(data); 0021 tapers=dpsschk(tapers,N); 0022 [N,K]=size(tapers); 0023 if isempty(mdkp) | nargin<5; mdkp=min(K,NCHAN); 0024 elseif mdkp > min(K,NCHAN); error('mdkp has to be less than both K and NCHAN');end; 0025 0026 tvec=1:N; 0027 tvec=tvec*2*pi*i; 0028 [f,findx]=getfgrid(Fs,fpass 0029 nf=length(f); 0030 0031 sp=zeros(nwin,NCHAN,nf,mdkp); 0032 sp=sp+i*sp; 0033 fm=zeros(nwin,K,nf,mdkp); 0034 fm=fm+i*fm; 0035 sv=zeros(nwin,nf,min([K,NCHAN])); 0036 proj=zeros(N,K); 0037 for j=1:nf 0038 f0=f(j)/Fs; 0039 for k=1:K 0040 proj(:,k)=tapers(:,k).*exp(-f0*tvec'); 0041 end 0042 tmp=data'*proj; % projected data 0043 [u,s,v]= svd(tmp,0); % svd 0044 for mk=1:mdkp, 0045 sp(n,:,j,mk)=u(:,mk)'; 0046 fm(n,:,j,mk)=v(:,mk)'; 0047 end 0048 sv(n,j,:)=diag(s); 0049 end;