


Multi-taper time-frequency coherence,cross-spectrum and individual spectra - two binned point processes
process
Usage:
[C,phi,S12,S1,S2,t,f,zerosp,confC,phistd,Cerr]=cohgrampb(data1,data2,movingwin,params,fscorr)
Input:
Note units have to be consistent. Thus, if movingwin is in seconds, Fs
has to be in Hz. see chronux.m for more information.
data1 (binned point process data in form samples x trials) -- required
data2 (binned point process data in form samples x trials) -- required
movingwin (in the form [window winstep] -- required
params: structure with fields tapers, pad, Fs, fpass, err, trialave
- optional
tapers (precalculated tapers from dpss, or in the form [NW K] e.g [3 5]) -- optional. If not
specified, use [NW K]=[3 5]
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.
Fs (sampling frequency) - optional. Default 1.
fpass (frequency band to be used in the calculation in the form
[fmin fmax])- optional.
Default all frequencies between 0 and Fs/2
err (error calculation [1 p] - Theoretical error bars; [2 p] - Jackknife error bars
[0 p] or 0 - no error bars) - optional. Default 0.
trialave (average over trials when 1, don't average when 0) -
optional. Default 0
fscorr (finite size corrections, 0 (don't use finite size corrections) or 1 (use finite size corrections) - optional
(available only for spikes). Defaults 0.
Output:
C (magnitude of coherency time x frequencies x trials for trialave=0; time x frequency for trialave=1)
phi (phase of coherency time x frequencies x trials for no trial averaging; time x frequency for trialave=1)
S12 (cross spectrum - time x frequencies x trials for no trial averaging; time x frequency for trialave=1)
S1 (spectrum 1 - time x frequencies x trials for no trial averaging; time x frequency for trialave=1)
S2 (spectrum 2 - time x frequencies x trials for no trial averaging; time x frequency for trialave=1)
t (time)
f (frequencies)
zerosp (1 for windows and trials where spikes were absent (in either channel),zero otherwise)
confC (confidence level for C at 1-p %) - only for err(1)>=1
phistd - jackknife/theoretical standard deviation for phi - Note that
phi + 2 phistd and phi -2 phistd will give 95% confidence bands for phi - only for err(1)>=1
Cerr (Jackknife error bars for C - use only for Jackknife - err(1)=2)

0001 function [C,phi,S12,S1,S2,t,f,zerosp,confC,phistd,Cerr]=cohgrampb(data1,data2,movingwin,params,fscorr) 0002 % Multi-taper time-frequency coherence,cross-spectrum and individual spectra - two binned point processes 0003 % process 0004 % 0005 % Usage: 0006 % 0007 % [C,phi,S12,S1,S2,t,f,zerosp,confC,phistd,Cerr]=cohgrampb(data1,data2,movingwin,params,fscorr) 0008 % Input: 0009 % Note units have to be consistent. Thus, if movingwin is in seconds, Fs 0010 % has to be in Hz. see chronux.m for more information. 0011 % 0012 % data1 (binned point process data in form samples x trials) -- required 0013 % data2 (binned point process data in form samples x trials) -- required 0014 % movingwin (in the form [window winstep] -- required 0015 % params: structure with fields tapers, pad, Fs, fpass, err, trialave 0016 % - optional 0017 % tapers (precalculated tapers from dpss, or in the form [NW K] e.g [3 5]) -- optional. If not 0018 % specified, use [NW K]=[3 5] 0019 % pad (padding factor for the FFT) - optional (can take values -1,0,1,2...). 0020 % -1 corresponds to no padding, 0 corresponds to padding 0021 % to the next highest power of 2 etc. 0022 % e.g. For N = 500, if PAD = -1, we do not pad; if PAD = 0, we pad the FFT 0023 % to 512 points, if pad=1, we pad to 1024 points etc. 0024 % Defaults to 0. 0025 % Fs (sampling frequency) - optional. Default 1. 0026 % fpass (frequency band to be used in the calculation in the form 0027 % [fmin fmax])- optional. 0028 % Default all frequencies between 0 and Fs/2 0029 % err (error calculation [1 p] - Theoretical error bars; [2 p] - Jackknife error bars 0030 % [0 p] or 0 - no error bars) - optional. Default 0. 0031 % trialave (average over trials when 1, don't average when 0) - 0032 % optional. Default 0 0033 % fscorr (finite size corrections, 0 (don't use finite size corrections) or 1 (use finite size corrections) - optional 0034 % (available only for spikes). Defaults 0. 0035 % Output: 0036 % C (magnitude of coherency time x frequencies x trials for trialave=0; time x frequency for trialave=1) 0037 % phi (phase of coherency time x frequencies x trials for no trial averaging; time x frequency for trialave=1) 0038 % S12 (cross spectrum - time x frequencies x trials for no trial averaging; time x frequency for trialave=1) 0039 % S1 (spectrum 1 - time x frequencies x trials for no trial averaging; time x frequency for trialave=1) 0040 % S2 (spectrum 2 - time x frequencies x trials for no trial averaging; time x frequency for trialave=1) 0041 % t (time) 0042 % f (frequencies) 0043 % zerosp (1 for windows and trials where spikes were absent (in either channel),zero otherwise) 0044 % confC (confidence level for C at 1-p %) - only for err(1)>=1 0045 % phistd - jackknife/theoretical standard deviation for phi - Note that 0046 % phi + 2 phistd and phi -2 phistd will give 95% confidence bands for phi - only for err(1)>=1 0047 % Cerr (Jackknife error bars for C - use only for Jackknife - err(1)=2) 0048 0049 if nargin < 3; error('Need data1 and data2 and window parameters'); end; 0050 if nargin < 4; params=[]; end; 0051 [tapers,pad,Fs,fpass,err,trialave,params]=getparams(params); 0052 if nargin < 5 || isempty(fscorr); fscorr=0; end; 0053 0054 if nargout > 8 && err(1)==0; 0055 error('When errors are desired, err(1) has to be non-zero.'); 0056 end; 0057 if nargout > 10 && err(1)~=2; 0058 error('Cerr computed only for Jackknife. Correct inputs and run again'); 0059 end; 0060 [N,Ch]=check_consistency(data1,data2); 0061 0062 Nwin=round(Fs*movingwin(1)); % number of samples in window 0063 Nstep=round(movingwin(2)*Fs); % number of samples to step through 0064 nfft=max(2^(nextpow2(Nwin)+pad),Nwin); 0065 f=getfgrid(Fs,nfft,fpass); 0066 Nf=length(f); 0067 params.tapers=dpsschk(tapers,Nwin,Fs); % check tapers 0068 0069 winstart=1:Nstep:N-Nwin+1; 0070 nw=length(winstart); 0071 if trialave; 0072 C=zeros(nw,Nf); 0073 S12=zeros(nw,Nf); 0074 S1=zeros(nw,Nf); 0075 S2=zeros(nw,Nf); 0076 phi=zeros(nw,Nf); 0077 Cerr=zeros(2,nw,Nf); 0078 % phierr=zeros(2,nw,Nf); 0079 phistd=zeros(nw,Nf); 0080 else 0081 C=zeros(nw,Nf,Ch); 0082 S12=zeros(nw,Nf,Ch); 0083 S1=zeros(nw,Nf,Ch); 0084 S2=zeros(nw,Nf,Ch); 0085 phi=zeros(nw,Nf,Ch); 0086 Cerr=zeros(2,nw,Nf,Ch); 0087 % phierr=zeros(2,nw,Nf,Ch); 0088 phistd=zeros(nw,Nf,Ch); 0089 end; 0090 zerosp=zeros(nw,Ch); 0091 0092 for n=1:nw; 0093 indx=winstart(n):winstart(n)+Nwin-1; 0094 datawin1=data1(indx,:);datawin2=data2(indx,:); 0095 if nargout==11; 0096 [c,ph,s12,s1,s2,f,zsp,confc,phie,cerr]=coherencypb(datawin1,datawin2,params,fscorr); 0097 % phierr(1,n,:,:)=squeeze(phie(1,:,:)); 0098 % phierr(2,n,:,:)=squeeze(phie(2,:,:)); 0099 phistd(n,:,:)=phie; 0100 Cerr(1,n,:,:)=squeeze(cerr(1,:,:)); 0101 Cerr(2,n,:,:)=squeeze(cerr(2,:,:)); 0102 elseif nargout==10; 0103 [c,ph,s12,s1,s2,f,zsp,confc,phie]=coherencypb(datawin1,datawin2,params,fscorr); 0104 % phierr(1,n,:,:)=squeeze(phie(1,:,:)); 0105 % phierr(2,n,:,:)=squeeze(phie(2,:,:)); 0106 phistd(n,:,:)=phie; 0107 else 0108 [c,ph,s12,s1,s2,f,zsp]=coherencycpb(datawin1,datawin2,params,fscorr); 0109 end; 0110 C(n,:,:)=c; 0111 phi(n,:,:)=ph; 0112 S12(n,:,:)=s12; 0113 S1(n,:,:)=s1; 0114 S2(n,:,:)=s2; 0115 zerosp(n,:)=zsp; 0116 end; 0117 C=squeeze(C); phi=squeeze(phi);S12=squeeze(S12); S1=squeeze(S1); S2=squeeze(S2);zerosp=squeeze(zerosp); 0118 if nargout > 9; confC=confc; end; 0119 if nargout==11;Cerr=squeeze(Cerr);end; 0120 % if nargout==10; phierr=squeeze(phierr);end 0121 if nargout==10; phistd=squeeze(phistd);end 0122 winmid=winstart+round(Nwin/2); 0123 t=winmid/Fs;