%function [cl]=cohconf(v,level,unbias,c); % %inputs: v - degrees of freedom % level - confidence level, i.e. 0.95 gives the 95% c.l. (.95=default). % bias - are coherence estimates bias corrected (use cohbias.m), 0=no (default), 1=yes. % c - true coherence, 0 <= c < 1 (0=default). % % %outputs: % cl - coherence value for selected confidence level % % % %Peter Huybers %phuybers@mit.edu %MIT, 2003 function [cl]=cohconf(n,level,unbias,c); if nargin<1, help cohconf; return; end; if nargin<2, level=.95; end; if nargin<3, unbias=0; end; if nargin<4, c=0; end; if n<2, disp('Warning: degress of freedom must be greater or equal to two.'); return; end; if level<=0 | level>=1, disp('Warning: confidence level should be between zero and one.'); return; end; %Calculated according to: Amos and Koopmans, "Tables of the distribution of the %coefficient of coherence for stationary bivariate Gaussian processes", Sandia %Corporation, 1963 %Also see Priestly, 1981 z=0:.0005:1; for i1=1:length(z), A(1)=1; for k=1:n-1; A(k+1)=A(k)*(n-k)*(2*k-1)/((2*n-(2*k+1))*k)*((1-c*z(i1))/(1+c*z(i1)))^2; end; f(i1)=2*(n-1)*(1-c^2)^n*z(i1)*(1-z(i1)^2)^(n-2)/((1+c*z(i1))*(1-c*z(i1))^(2*n-1))... *gamma(n-.5)/(sqrt(pi)*gamma(n))*sum(A); end; %Use a quadratic Newton-Cotes methods to determine the cumulative sum for i1 = 2:length(f)/2; F(i1) = f(2*(i1-1)+1) + 4*f(2*i1) + f(2*i1+1); end F = F/(6*length(F)); F=[fliplr(1-cumsum(fliplr(F))/sum(F)) 1]; Fz=[z(1:2:end-2) 1]; pl=find(diff(F)>0); pl=[1 pl+1]; cl=interp1(F(pl),Fz(pl),level); if unbias==1, cl=cohbias(n,cl); end;