CrossSpecMat.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2. "http://www.w3.org/TR/REC-html40/loose.dtd">
  3. <html>
  4. <head>
  5. <title>Description of CrossSpecMat</title>
  6. <meta name="keywords" content="CrossSpecMat">
  7. <meta name="description" content="">
  8. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  9. <meta name="generator" content="m2html &copy; 2005 Guillaume Flandin">
  10. <meta name="robots" content="index, follow">
  11. <link type="text/css" rel="stylesheet" href="../../m2html.css">
  12. <script type="text/javascript">
  13. if (top.frames.length == 0) { top.location = "../../index.html"; };
  14. </script>
  15. </head>
  16. <body>
  17. <a name="_top"></a>
  18. <!-- ../menu.html chronux_2_10 --><!-- menu.html old -->
  19. <h1>CrossSpecMat
  20. </h1>
  21. <h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
  22. <div class="box"><strong></strong></div>
  23. <h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
  24. <div class="box"><strong>function [Sc,Cmat,Ctot,Cvec,Cent,f]=CrossSpecMat(data,win,params) </strong></div>
  25. <h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
  26. <div class="fragment"><pre class="comment">
  27. Multi-taper cross-spectral matrix - another routine, this one allows for multiple trials and channels
  28. but does not do confidence intervals. Also this routine always averages over trials - continuous process
  29. Usage:
  30. [Sc,Cmat,Ctot,Cvec,Cent,f]=CrossSpecMat(data,win,params)
  31. Input:
  32. Note units have to be consistent. See chronux.m for more information.
  33. data (in form samples x channels x trials)
  34. win (duration of non-overlapping window)
  35. params: structure with fields tapers, pad, Fs, fpass
  36. - optional
  37. tapers (precalculated tapers from dpss, or in the form [NW K] e.g [3 5]) -- optional.
  38. If not specified, use [NW K]=[3 5]
  39. pad (padding factor for the FFT) - optional. Defaults to 0.
  40. e.g. For N = 500, if PAD = 0, we pad the FFT
  41. to 512 points; if PAD = 2, we pad the FFT
  42. to 2048 points, etc.
  43. Fs (sampling frequency) - optional. Default 1.
  44. fpass (frequency band to be used in the calculation in the form
  45. [fmin fmax])- optional.
  46. Default all frequencies between 0 and Fs/2
  47. Output:
  48. Sc (cross spectral matrix frequency x channels x channels)
  49. Cmat Coherence matrix frequency x channels x channels
  50. Ctot Total coherence: SV(1)^2/sum(SV^2) (frequency)
  51. Cvec leading Eigenvector (frequency x channels)
  52. Cent A different measure of total coherence: GM/AM of SV^2s
  53. f (frequencies)</pre></div>
  54. <!-- crossreference -->
  55. <h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
  56. This function calls:
  57. <ul style="list-style-image:url(../../matlabicon.gif)">
  58. <li><a href="../../chronux_2_10/spectral_analysis/continuous/mtfftc.html" class="code" title="function J=mtfftc(data,tapers,nfft,Fs)">mtfftc</a> Multi-taper fourier transform - continuous data</li><li><a href="../../chronux_2_10/spectral_analysis/helper/dpsschk.html" class="code" title="function [tapers,eigs]=dpsschk(tapers,N,Fs)">dpsschk</a> Helper function to calculate tapers and, if precalculated tapers are supplied,</li><li><a href="../../chronux_2_10/spectral_analysis/helper/getfgrid.html" class="code" title="function [f,findx]=getfgrid(Fs,nfft,fpass)">getfgrid</a> Helper function that gets the frequency grid associated with a given fft based computation</li><li><a href="../../chronux_2_10/spectral_analysis/helper/getparams.html" class="code" title="function [tapers,pad,Fs,fpass,err,trialave,params]=getparams(params)">getparams</a> Helper function to convert structure params to variables used by the</li></ul>
  59. This function is called by:
  60. <ul style="list-style-image:url(../../matlabicon.gif)">
  61. </ul>
  62. <!-- crossreference -->
  63. <h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
  64. <div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function [Sc,Cmat,Ctot,Cvec,Cent,f]=CrossSpecMat(data,win,params)</a>
  65. 0002 <span class="comment">%</span>
  66. 0003 <span class="comment">%</span>
  67. 0004 <span class="comment">% Multi-taper cross-spectral matrix - another routine, this one allows for multiple trials and channels</span>
  68. 0005 <span class="comment">% but does not do confidence intervals. Also this routine always averages over trials - continuous process</span>
  69. 0006 <span class="comment">%</span>
  70. 0007 <span class="comment">% Usage:</span>
  71. 0008 <span class="comment">%</span>
  72. 0009 <span class="comment">% [Sc,Cmat,Ctot,Cvec,Cent,f]=CrossSpecMat(data,win,params)</span>
  73. 0010 <span class="comment">% Input:</span>
  74. 0011 <span class="comment">% Note units have to be consistent. See chronux.m for more information.</span>
  75. 0012 <span class="comment">% data (in form samples x channels x trials)</span>
  76. 0013 <span class="comment">% win (duration of non-overlapping window)</span>
  77. 0014 <span class="comment">% params: structure with fields tapers, pad, Fs, fpass</span>
  78. 0015 <span class="comment">% - optional</span>
  79. 0016 <span class="comment">% tapers (precalculated tapers from dpss, or in the form [NW K] e.g [3 5]) -- optional.</span>
  80. 0017 <span class="comment">% If not specified, use [NW K]=[3 5]</span>
  81. 0018 <span class="comment">% pad (padding factor for the FFT) - optional. Defaults to 0.</span>
  82. 0019 <span class="comment">% e.g. For N = 500, if PAD = 0, we pad the FFT</span>
  83. 0020 <span class="comment">% to 512 points; if PAD = 2, we pad the FFT</span>
  84. 0021 <span class="comment">% to 2048 points, etc.</span>
  85. 0022 <span class="comment">% Fs (sampling frequency) - optional. Default 1.</span>
  86. 0023 <span class="comment">% fpass (frequency band to be used in the calculation in the form</span>
  87. 0024 <span class="comment">% [fmin fmax])- optional.</span>
  88. 0025 <span class="comment">% Default all frequencies between 0 and Fs/2</span>
  89. 0026 <span class="comment">% Output:</span>
  90. 0027 <span class="comment">% Sc (cross spectral matrix frequency x channels x channels)</span>
  91. 0028 <span class="comment">% Cmat Coherence matrix frequency x channels x channels</span>
  92. 0029 <span class="comment">% Ctot Total coherence: SV(1)^2/sum(SV^2) (frequency)</span>
  93. 0030 <span class="comment">% Cvec leading Eigenvector (frequency x channels)</span>
  94. 0031 <span class="comment">% Cent A different measure of total coherence: GM/AM of SV^2s</span>
  95. 0032 <span class="comment">% f (frequencies)</span>
  96. 0033 d=ndims(data);
  97. 0034 <span class="keyword">if</span> d&lt;2, error(<span class="string">'Need multidimensional array'</span>); <span class="keyword">end</span>
  98. 0035 <span class="keyword">if</span> d==2, [N,C]=size(data); <span class="keyword">end</span>;
  99. 0036 <span class="keyword">if</span> d==3, [N,C,Ntr]=size(data); <span class="keyword">end</span>;
  100. 0037 <span class="keyword">if</span> nargin &lt; 3; params=[]; <span class="keyword">end</span>;
  101. 0038 [tapers,pad,Fs,fpass,err,trialave,params]=<a href="../../chronux_2_10/spectral_analysis/helper/getparams.html" class="code" title="function [tapers,pad,Fs,fpass,err,trialave,params]=getparams(params)">getparams</a>(params);
  102. 0039 clear err trialave params
  103. 0040 nwin=round(win*Fs); nfft=2^(nextpow2(nwin)+pad);
  104. 0041 [f,findx]=<a href="../../chronux_2_10/spectral_analysis/helper/getfgrid.html" class="code" title="function [f,findx]=getfgrid(Fs,nfft,fpass)">getfgrid</a>(Fs,nfft,fpass);
  105. 0042 tapers=<a href="../../chronux_2_10/spectral_analysis/helper/dpsschk.html" class="code" title="function [tapers,eigs]=dpsschk(tapers,N,Fs)">dpsschk</a>(tapers,nwin,Fs); <span class="comment">% check tapers</span>
  106. 0043 Sc=zeros(length(findx),C,C);
  107. 0044
  108. 0045 Nwins=floor(N/nwin);
  109. 0046
  110. 0047 <span class="keyword">if</span> d==3, <span class="comment">% If there are multiple trials</span>
  111. 0048 <span class="keyword">for</span> iwin=1:Nwins,
  112. 0049 <span class="keyword">for</span> i=1:Ntr,
  113. 0050 data1=squeeze(data(1+(iwin-1)*nwin:iwin*nwin,:,i));
  114. 0051 J1=<a href="../../chronux_2_10/spectral_analysis/continuous/mtfftc.html" class="code" title="function J=mtfftc(data,tapers,nfft,Fs)">mtfftc</a>(detrend(data1),tapers,nfft,Fs);
  115. 0052 J1=J1(findx,:,:);
  116. 0053 <span class="keyword">for</span> k=1:C,
  117. 0054 <span class="keyword">for</span> l=1:C,
  118. 0055 spec=squeeze(mean(conj(J1(:,:,k)).*J1(:,:,l),2));
  119. 0056 Sc(:,k,l)=Sc(:,k,l)+spec;
  120. 0057 <span class="keyword">end</span>
  121. 0058 <span class="keyword">end</span>
  122. 0059 <span class="keyword">end</span>
  123. 0060 <span class="keyword">end</span>
  124. 0061 Sc=Sc/(Nwins*Ntr);
  125. 0062 <span class="keyword">end</span>
  126. 0063
  127. 0064 <span class="keyword">if</span> d==2, <span class="comment">% only one trial</span>
  128. 0065 <span class="keyword">for</span> iwin=1:Nwins,
  129. 0066 data1=squeeze(data(1+(iwin-1)*nwin:iwin*nwin,:));
  130. 0067 J1=<a href="../../chronux_2_10/spectral_analysis/continuous/mtfftc.html" class="code" title="function J=mtfftc(data,tapers,nfft,Fs)">mtfftc</a>(data1,tapers,nfft,Fs);
  131. 0068 J1=J1(findx,:,:);
  132. 0069 <span class="keyword">for</span> k=1:C,
  133. 0070 <span class="keyword">for</span> l=1:C,
  134. 0071 Sc(:,k,l)=Sc(:,k,l)+squeeze(mean(conj(J1(:,:,k)).*J1(:,:,l),2));
  135. 0072 <span class="keyword">end</span>
  136. 0073 <span class="keyword">end</span>
  137. 0074 <span class="keyword">end</span>
  138. 0075 Sc=Sc/Nwins;
  139. 0076 <span class="keyword">end</span>
  140. 0077
  141. 0078 Cmat=Sc;
  142. 0079 Sdiag=zeros(length(findx),C);
  143. 0080 <span class="keyword">for</span> k=1:C,
  144. 0081 Sdiag(:,k)=squeeze(Sc(:,k,k));
  145. 0082 <span class="keyword">end</span>
  146. 0083
  147. 0084 <span class="keyword">for</span> k=1:C,
  148. 0085 <span class="keyword">for</span> l=1:C,
  149. 0086 Cmat(:,k,l)=Sc(:,k,l)./sqrt(abs(Sdiag(:,k).*Sdiag(:,l)));
  150. 0087 <span class="keyword">end</span>
  151. 0088 <span class="keyword">end</span>
  152. 0089
  153. 0090 Ctot=zeros(length(findx),1); Cent=Ctot;
  154. 0091 Cvec=zeros(length(findx),C);
  155. 0092 <span class="keyword">for</span> i=1:length(findx),
  156. 0093 [u s]=svd(squeeze(Sc(i,:,:)));s=diag(s);
  157. 0094 Ctot(i)=s(1).^2/sum(s.^2); Cent(i)=exp(mean(log(s.^2)))/mean(s.^2);
  158. 0095 Cvec(i,:)=transpose(u(:,1));
  159. 0096
  160. 0097 <span class="keyword">end</span>
  161. 0098</pre></div>
  162. <hr><address>Generated on Fri 12-Aug-2011 11:36:15 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/" target="_parent">m2html</a></strong> &copy; 2005</address>
  163. </body>
  164. </html>