Home > classes > @ao > mltfe.m

mltfe

PURPOSE ^

MLTFE compute log-frequency space TF

SYNOPSIS ^

function varargout = mltfe(varargin)

DESCRIPTION ^

 MLTFE compute log-frequency space TF

 Txy = mltfe(X,f,r,m,L,fs,win,order,olap,Lmin,method)

 M Hewitson 19-05-07

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 % MLTFE compute log-frequency space TF
0002 %
0003 % Txy = mltfe(X,f,r,m,L,fs,win,order,olap,Lmin,method)
0004 %
0005 % M Hewitson 19-05-07
0006 %
0007 %
0008 
0009 function varargout = mltfe(varargin)
0010 
0011   import utils.const.*
0012   
0013   % Get inputs
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   % --- Prepare some variables
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   % ----- Loop over Frequency
0037   for fi=1:nf
0038 
0039     % compute DFT exponent and window
0040     l = L(fi);
0041 
0042     % Check if we need to update the window values
0043     % - once we reach Lmin, the window values don't change.
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     % Compute DFT coefficients
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     % Loop over input channels
0065     for j=1:nc
0066       % loop over output channels
0067       for k=1:nc
0068 
0069         switch method
0070           case 'tfe'
0071             if k~=j
0072               % Core cross-DFT part in C-mex file
0073               % We need cross-spectrum and Power spectrum
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               % Trivial case of equal input and output
0078               Txy(j,k,fi)  = 1;
0079             end
0080 
0081           case 'cpsd'
0082             if k~=j
0083               % Core cross-DFT part in C-mex file
0084               [A, XX, YY, nsegs] = ltpda_dft(X(j,:), X(k,:), l, C, olap, order);
0085             else
0086               % Core DFT part in C-mex file
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               % Core cross-DFT part in C-mex file
0097               % We need cross-spectrum and Power spectrum
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               % Trivial case of equal input and output
0102               Txy(j,k,fi)  = 1;
0103             end
0104         end
0105       end % End loop over output channels
0106     end % End loop over input channels
0107   end % End loop over frequencies
0108 
0109   switch method
0110     case 'cohere'
0111       % Fill other elements
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   % Set output
0124   varargout{1} = Txy;
0125 
0126 end
0127

Generated on Mon 08-Sep-2008 13:18:47 by m2html © 2003