0001
0002
0003
0004
0005
0006
0007
0008
0009 function varargout = mltfe(varargin)
0010
0011 import utils.const.*
0012
0013
0014 X = varargin{1};
0015 f = varargin{2};
0016 r = varargin{3};
0017 m = varargin{4};
0018 L = varargin{5};
0019 fs = varargin{6};
0020 win = varargin{7};
0021 order = varargin{8};
0022 olap = varargin{9};
0023 Lmin = varargin{10};
0024 method = varargin{11};
0025
0026
0027
0028 twopi = 2.0*pi;
0029 si = size(X);
0030 nc = si(1);
0031 nf = length(f);
0032 Txy = zeros(nc,nc,nf);
0033 disp_each = round(nf/100)*10;
0034 minReached = 0;
0035
0036
0037 for fi=1:nf
0038
0039
0040 l = L(fi);
0041
0042
0043
0044 if ~minReached
0045 switch win.type
0046 case 'Kaiser'
0047 win = specwin(win.type, l, win.psll);
0048 otherwise
0049 win = specwin(win.type, l);
0050 end
0051 if l==Lmin
0052 minReached = 1;
0053 end
0054 end
0055
0056
0057 p = 1i * twopi * m(fi)/l.*[0:l-1];
0058 C = win.win .* exp(p);
0059
0060 if mod(fi,disp_each) == 0 || fi == 1 || fi == nf
0061 utils.helper.msg(msg.PROC1, 'computing frequency %04d of %04d: %f Hz', fi, nf, f(fi));
0062 end
0063
0064
0065 for j=1:nc
0066
0067 for k=1:nc
0068
0069 switch method
0070 case 'tfe'
0071 if k~=j
0072
0073
0074 [XY, XX, YY, nsegs] = ltpda_dft(X(j,:), X(k,:), l, C, olap, order);
0075 Txy(j,k,fi) = XY/XX;
0076 else
0077
0078 Txy(j,k,fi) = 1;
0079 end
0080
0081 case 'cpsd'
0082 if k~=j
0083
0084 [A, XX, YY, nsegs] = ltpda_dft(X(j,:), X(k,:), l, C, olap, order);
0085 else
0086
0087 [A, nsegs] = ltpda_dft(X(j,:), l, C, olap, order);
0088 end
0089 S1 = win.ws;
0090 S2 = win.ws2;
0091 Txy(j,k,fi) = 2.0*A/nsegs/fs/S2;
0092
0093 case 'cohere'
0094
0095 if k>j
0096
0097
0098 [XY, XX, YY, nsegs] = ltpda_dft(X(j,:), X(k,:), l, C, olap, order);
0099 Txy(j,k,fi) = (abs(XY).^2)/(XX.*YY);
0100 else
0101
0102 Txy(j,k,fi) = 1;
0103 end
0104 end
0105 end
0106 end
0107 end
0108
0109 switch method
0110 case 'cohere'
0111
0112 for j=1:nc
0113 for k=1:nc
0114 if k<j
0115 Txy(j,k,:) = Txy(k,j,:);
0116 end
0117 end
0118 end
0119 case 'tfe'
0120 case 'cpsd'
0121 end
0122
0123
0124 varargout{1} = Txy;
0125
0126 end
0127