0001
0002 function [H] = ToolMfccFb (iFftLength, f_s)
0003
0004
0005 f_start = 133.3333;
0006
0007 iNumLinFilters = 13;
0008 iNumLogFilters = 27;
0009 iNumFilters = iNumLinFilters + iNumLogFilters;
0010
0011 linearSpacing = 66.66666666;
0012 logSpacing = 1.0711703;
0013
0014
0015 f = f_start + (0:iNumLinFilters-1)*linearSpacing;
0016 f(iNumLinFilters+1:iNumFilters+2) = ...
0017 f(iNumLinFilters) * logSpacing.^(1:iNumLogFilters+2);
0018
0019
0020 f = f (f<f_s/2);
0021 iNumFilters = length(f)-2;
0022
0023 f_l = f(1:iNumFilters);
0024 f_c = f(2:iNumFilters+1);
0025 f_u = f(3:iNumFilters+2);
0026
0027
0028 H = zeros(iNumFilters,iFftLength);
0029 afFilterMax = 2./(f_u-f_l);
0030 f_k = (0:iFftLength-1)/(iFftLength-1)*f_s/2;
0031
0032
0033 for (c = 1:iNumFilters)
0034 H(c,:) = ...
0035 (f_k > f_l(c) & f_k <= f_c(c)).* ...
0036 afFilterMax(c).*(f_k-f_l(c))/(f_c(c)-f_l(c)) + ...
0037 (f_k > f_c(c) & f_k < f_u(c)).* ...
0038 afFilterMax(c).*(f_u(c)-f_k)/(f_u(c)-f_c(c));
0039 end
0040 end