Mercurial > hg > dcase2013_ed_vuegenetal
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/functions/fe_funcs/mel_matrix.m Fri Oct 11 12:02:43 2013 +0100 @@ -0,0 +1,39 @@ +function [M,fCen,Mfull]=mel_matrix(fs,NbCh,Nfft,warp,fhigh,flow) +% [M,fCen,Mfull]=mel_matrix(fs,NbCh,Nfft,warp,fhigh) +% returns Nfft/2+1 - by - NbCh matrix of triangular weights +% NbCh filterbanks linearly spaced on a MEL scale till fhigh +% warp: default 1.0 +% fhigh: default=fs/2 +% Mfull: matrix without truncation to Nfft/2+1 points + +if nargin<4, + warp=1; +end +if nargin<5, + fhigh=fs/2; +end + +LowMel=2595 * log10(1+flow/700); +NyqMel=2595 * log10(1+fhigh/700); + +StartMel=LowMel + (0:NbCh-1)/(NbCh+1)*(NyqMel-LowMel); +fCen=warp*700*(10.^(StartMel/2595)-1); +StartBin=round(Nfft/fs*fCen)+1; + +EndMel=LowMel + (2:NbCh+1)/(NbCh+1)*(NyqMel-LowMel); +EndBin=round(warp*Nfft/fs*700*(10.^(EndMel/2595)-1))+1; + +TotLen=EndBin-StartBin+1; + +LowLen=[StartBin(2:NbCh) EndBin(NbCh-1)]-StartBin+1; +HiLen=TotLen-LowLen+1; + +M=sparse([],[],[],ceil(warp*Nfft/2+1),NbCh,sum(TotLen)); +for k=1:NbCh, + M(StartBin(k):StartBin(k)+LowLen(k)-1,k)=(1:LowLen(k))'/LowLen(k); + M(EndBin(k)-HiLen(k)+1:EndBin(k),k)=(HiLen(k):-1:1)'/HiLen(k); +end +%TotWeight=sum(M,1); +Mfull=M; +M=M(1:Nfft/2+1,:); +%WeightSum=full([sum(M,1);TotWeight]); \ No newline at end of file