


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,phierr,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. Defaults to 0.
e.g. For N = 500, if PAD = 0, we pad the FFT
to 512 points; if PAD = 2, we pad the FFT
to 2048 points, etc.
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
phierr - standard deviation for phi (note that the routine gives phierr as phierr(1,...) and phierr(2,...)
in order to incorporate Jackknife (eventually). Currently phierr(1,...)=phierr(2,...). Note that
phi + 2 phierr(1,...) and phi -2 phierr(2,...) 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,phierr,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,phierr,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. Defaults to 0. 0020 % e.g. For N = 500, if PAD = 0, we pad the FFT 0021 % to 512 points; if PAD = 2, we pad the FFT 0022 % to 2048 points, etc. 0023 % Fs (sampling frequency) - optional. Default 1. 0024 % fpass (frequency band to be used in the calculation in the form 0025 % [fmin fmax])- optional. 0026 % Default all frequencies between 0 and Fs/2 0027 % err (error calculation [1 p] - Theoretical error bars; [2 p] - Jackknife error bars 0028 % [0 p] or 0 - no error bars) - optional. Default 0. 0029 % trialave (average over trials when 1, don't average when 0) - 0030 % optional. Default 0 0031 % fscorr (finite size corrections, 0 (don't use finite size corrections) or 1 (use finite size corrections) - optional 0032 % (available only for spikes). Defaults 0. 0033 % Output: 0034 % C (magnitude of coherency time x frequencies x trials for trialave=0; time x frequency for trialave=1) 0035 % phi (phase of coherency time x frequencies x trials for no trial averaging; time x frequency for trialave=1) 0036 % S12 (cross spectrum - time x frequencies x trials for no trial averaging; time x frequency for trialave=1) 0037 % S1 (spectrum 1 - time x frequencies x trials for no trial averaging; time x frequency for trialave=1) 0038 % S2 (spectrum 2 - time x frequencies x trials for no trial averaging; time x frequency for trialave=1) 0039 % t (time) 0040 % f (frequencies) 0041 % zerosp (1 for windows and trials where spikes were absent (in either channel),zero otherwise) 0042 % confC (confidence level for C at 1-p %) - only for err(1)>=1 0043 % phierr - standard deviation for phi (note that the routine gives phierr as phierr(1,...) and phierr(2,...) 0044 % in order to incorporate Jackknife (eventually). Currently phierr(1,...)=phierr(2,...). Note that 0045 % phi + 2 phierr(1,...) and phi -2 phierr(2,...) will give 95% confidence bands for phi - only for err(1)>=1 0046 % Cerr (Jackknife error bars for C - use only for Jackknife - err(1)=2) 0047 0048 if nargin < 3; error('Need data1 and data2 and window parameters'); end; 0049 if nargin < 4; params=[]; end; 0050 [tapers,pad,Fs,fpass,err,trialave,params]=getparams(params); 0051 if nargin < 5 || isempty(fscorr); fscorr=0; end; 0052 0053 if nargout > 8 && err(1)==0; 0054 error('When errors are desired, err(1) has to be non-zero.'); 0055 end; 0056 if nargout > 10 && err(1)~=2; 0057 error('Cerr computed only for Jackknife. Correct inputs and run again'); 0058 end; 0059 [N,Ch]=check_consistency(data1,data2); 0060 0061 Nwin=round(Fs*movingwin(1)); % number of samples in window 0062 Nstep=round(movingwin(2)*Fs); % number of samples to step through 0063 nfft=2^(nextpow2(Nwin)+pad); 0064 f=getfgrid(Fs,nfft,fpass); 0065 Nf=length(f); 0066 params.tapers=dpsschk(tapers,Nwin,Fs); % check tapers 0067 0068 winstart=1:Nstep:N-Nwin+1; 0069 nw=length(winstart); 0070 if trialave; 0071 C=zeros(nw,Nf); 0072 S12=zeros(nw,Nf); 0073 S1=zeros(nw,Nf); 0074 S2=zeros(nw,Nf); 0075 phi=zeros(nw,Nf); 0076 Cerr=zeros(2,nw,Nf); 0077 phierr=zeros(2,nw,Nf); 0078 else; 0079 C=zeros(nw,Nf,Ch); 0080 S12=zeros(nw,Nf,Ch); 0081 S1=zeros(nw,Nf,Ch); 0082 S2=zeros(nw,Nf,Ch); 0083 phi=zeros(nw,Nf,Ch); 0084 Cerr=zeros(2,nw,Nf,Ch); 0085 phierr=zeros(2,nw,Nf,Ch); 0086 end; 0087 zerosp=zeros(nw,Ch); 0088 0089 for n=1:nw; 0090 indx=winstart(n):winstart(n)+Nwin-1; 0091 datawin1=data1(indx,:);datawin2=data2(indx,:); 0092 if nargout==11; 0093 [c,ph,s12,s1,s2,f,zsp,confc,phie,cerr]=coherencypb(datawin1,datawin2,params,fscorr); 0094 phierr(1,n,:,:)=squeeze(phie(1,:,:)); 0095 phierr(2,n,:,:)=squeeze(phie(2,:,:)); 0096 Cerr(1,n,:,:)=squeeze(cerr(1,:,:)); 0097 Cerr(2,n,:,:)=squeeze(cerr(2,:,:)); 0098 elseif nargout==10; 0099 [c,ph,s12,s1,s2,f,zsp,confc,phie]=coherencypb(datawin1,datawin2,params,fscorr); 0100 phierr(1,n,:,:)=squeeze(phie(1,:,:)); 0101 phierr(2,n,:,:)=squeeze(phie(2,:,:)); 0102 else 0103 [c,ph,s12,s1,s2,f,zsp]=coherencycpb(datawin1,datawin2,params,fscorr); 0104 end; 0105 C(n,:,:)=c; 0106 phi(n,:,:)=ph; 0107 S12(n,:,:)=s12; 0108 S1(n,:,:)=s1; 0109 S2(n,:,:)=s2; 0110 zerosp(n,:)=zsp; 0111 end; 0112 C=squeeze(C); phi=squeeze(phi);S12=squeeze(S12); S1=squeeze(S1); S2=squeeze(S2);zerosp=squeeze(zerosp); 0113 if nargout > 9; confC=confc; end; 0114 if nargout==11;Cerr=squeeze(Cerr);end; 0115 if nargout==10; phierr=squeeze(phierr);end 0116 winmid=winstart+round(Nwin/2); 0117 t=winmid/Fs;