annotate functions/fe_funcs/mel_matrix.m @ 0:2fadb31a9d55 tip

Import code by Vuegen et al
author Dan Stowell <dan.stowell@elec.qmul.ac.uk>
date Fri, 11 Oct 2013 12:02:43 +0100
parents
children
rev   line source
dan@0 1 function [M,fCen,Mfull]=mel_matrix(fs,NbCh,Nfft,warp,fhigh,flow)
dan@0 2 % [M,fCen,Mfull]=mel_matrix(fs,NbCh,Nfft,warp,fhigh)
dan@0 3 % returns Nfft/2+1 - by - NbCh matrix of triangular weights
dan@0 4 % NbCh filterbanks linearly spaced on a MEL scale till fhigh
dan@0 5 % warp: default 1.0
dan@0 6 % fhigh: default=fs/2
dan@0 7 % Mfull: matrix without truncation to Nfft/2+1 points
dan@0 8
dan@0 9 if nargin<4,
dan@0 10 warp=1;
dan@0 11 end
dan@0 12 if nargin<5,
dan@0 13 fhigh=fs/2;
dan@0 14 end
dan@0 15
dan@0 16 LowMel=2595 * log10(1+flow/700);
dan@0 17 NyqMel=2595 * log10(1+fhigh/700);
dan@0 18
dan@0 19 StartMel=LowMel + (0:NbCh-1)/(NbCh+1)*(NyqMel-LowMel);
dan@0 20 fCen=warp*700*(10.^(StartMel/2595)-1);
dan@0 21 StartBin=round(Nfft/fs*fCen)+1;
dan@0 22
dan@0 23 EndMel=LowMel + (2:NbCh+1)/(NbCh+1)*(NyqMel-LowMel);
dan@0 24 EndBin=round(warp*Nfft/fs*700*(10.^(EndMel/2595)-1))+1;
dan@0 25
dan@0 26 TotLen=EndBin-StartBin+1;
dan@0 27
dan@0 28 LowLen=[StartBin(2:NbCh) EndBin(NbCh-1)]-StartBin+1;
dan@0 29 HiLen=TotLen-LowLen+1;
dan@0 30
dan@0 31 M=sparse([],[],[],ceil(warp*Nfft/2+1),NbCh,sum(TotLen));
dan@0 32 for k=1:NbCh,
dan@0 33 M(StartBin(k):StartBin(k)+LowLen(k)-1,k)=(1:LowLen(k))'/LowLen(k);
dan@0 34 M(EndBin(k)-HiLen(k)+1:EndBin(k),k)=(HiLen(k):-1:1)'/HiLen(k);
dan@0 35 end
dan@0 36 %TotWeight=sum(M,1);
dan@0 37 Mfull=M;
dan@0 38 M=M(1:Nfft/2+1,:);
dan@0 39 %WeightSum=full([sum(M,1);TotWeight]);