Documentation of Calssicoef


Index of all files: short | long | this subdirectory only: short | long


Function Synopsis

[ ssi ] = Calssicoef(SAIPhsCmp,NAPparam,MIparam)

Help text

   CalMICoef
   SAI ->  Mellin Image Coefficient Direct
   IRINO T.
   18 Jan 01
   27 Jun 01 (modified to MFCC type, Not on LogFrq)
   11 Jan 02 (NAPparam, MIparam)

   Modified for the size shape image
   Marc A. Al-Hames
   April 2003

   function [ MICoef ] = CalMellinCoef(SAIPhsCmp,NAPparam,MIparam)
   INPUT:  SAIPhsCmp : SAI val with Phase Compensation
	    NAPparam:
	           fs       : Sampling Frequency
	           Frs      : Channel frequencies
	    MIparam:
	           RangeAudFig:   Range of Auditory Figure 
                         [ZERO, Boundary] in sampling-point
	           TFval    : TFval   == Hval          (--> abscissa of MI)
	           c_2pi    : Kernel spatial frequeny  (--> ordinate of MI)
	           Mu       : Kernel spatial weighting
   OUTPUT: MICoef   : MI value

Cross-Reference Information

This function calls This function is called by

Listing of function Calssicoef



function [ ssi ] = Calssicoef(SAIPhsCmp,NAPparam,MIparam)

fs    = NAPparam.fs;
Frs   = NAPparam.Frs;
RangeAudFig =  MIparam.RangeAudFig;
TFval = MIparam.TFval;
c_2pi = MIparam.c_2pi;
Mu    = MIparam.Mu;

[NumCh LenSAI] = size(SAIPhsCmp);
LenAF =  diff(RangeAudFig)+1;
LenTaper = round(0.5*NAPparam.fs/1000); % 0.5 ms taper
WinAF = TaperWindow(LenAF+LenTaper,'han',LenTaper);
WinAF = ones(NumCh,1)*WinAF(LenTaper+(1:LenAF)); 



AFval = WinAF .* SAIPhsCmp(:,RangeAudFig(1):RangeAudFig(2));
[NumCh,LenAF] = size(AFval);
%MICoef=AFval; %added line
%%%%%%%%%%
%% LogFrs = log10(Frs(:)/min(Frs))/log10(6000/100); % normalized in [100 6000]
%% NormFrq = LogFrs;
%% Change to MFCC type, DCT on ERB domain  on 27 Jun 2001
NormFreq = ( (0:NumCh-1) + 0.5 )/NumCh;
c_pi = 2*c_2pi;

amp = exp((Mu-0.5)*0.5)*sqrt(2/NumCh); 	% mag. norm. when NormFreq == 0.5
					% when using ERB --> Frs~=760 Hz
Kernel = amp*exp( ( i*pi*c_pi(:) - (Mu-0.5)) * NormFreq(:)');
Kernel(1,1:NumCh) = Kernel(1,1:NumCh)/sqrt(2);
%
% for confirmation (15 Jan 2002)
% Kernel1 = Kernel;
% Kernel2 = DCTWarpFreq(0,length(NormFreq),length(c_pi),0);
% plot(real(Kernel1(7,:)))
% hold on
% plot(1:NumCh,real(Kernel(4,:)),'r--', 1:NumCh,abs(Kernel(4,:)))
% sum(Kernel1(3,:)-Kernel2(2,:))
% hold off
% pause
%
% 	Kernel 	Mag at 100Hz	Mag at 6000Hz
% Mu = 2:	2.1170    	0.4724  % lowpass
% Mu = 1:	1.2840    	0.7788  % lowpass
% Mu = 0.5:	1.0		1.0	% flat
% Mu = 0:	0.7788    	1.2840  % high pass
%
% clf
% plot(LogFrs,Kernel); 
% amp*exp((-Mu+0.5)*[0 1])

%%%%%%%%%%

TFmargin = 0.1;
AFave = zeros(NumCh,length(TFval));
MICoef = zeros(length(c_2pi),length(TFval));

ValNorm = 1;

% It's worth notin what's going on here, becuase it's not completely
% obvious. AFval contains the 
for cntTF = 1:length(TFval);
   cntCh = 0;
   for nch = 1:NumCh
	nSAImin = max(1,fix((TFval(cntTF)-TFmargin)/Frs(nch)*fs));
	nSAImax = min(ceil((TFval(cntTF)+TFmargin)/Frs(nch)*fs), LenAF);
	% aaa(nch,1:5) = [cntTF, nch, Frs(nch), nSAImin nSAImax];
	if nSAImin <= nSAImax,
	  AFave(nch,cntTF) = mean(AFval(nch,nSAImin:nSAImax))/ValNorm;
	  cntCh = cntCh +1;
        end;
   end;
   % NumValidCh(cntTF) = cntCh;
%   ChNorm = NumCh/cntCh;  % 10 Oct 01 --> Too much normalization 
   % ChNorm = 1;	 	  % it seems the best at 15 Jan 02   
   % MICoef(1:length(c_2pi),cntTF) = ( Kernel*AFave(:,cntTF) )*ChNorm;
end;

ssi = AFave;

% Normalization by Number of channels within one AF,
% which depends on h values.

% ValRatio = sum(NumValidCh)/(length(TFval)*NumCh);
% MICoef = MICoef*ValRatio;

return

% Do not apply this. (12 Mar. 2001)
% if length(SAIval) > 1,
%	ValNorm = max(mean(SAIval));  % Mag. of strobing point
%	if ValNorm < 0.01, ValNorm = 1; end;
% end;

Produced by mtree2html by Hartmut Pohlheim