pyACA: Documentation 0.3.1
Source Code for Audio Content Analysis
Loading...
Searching...
No Matches
Functions
pyACA.ToolMfccFb Namespace Reference

Functions

 ToolMfccFb (iFftLength, f_s)
 helper function: computes transfer functions of MFCC filter bands see function from Slaneys Auditory Toolbox (Matlab)
 

Function Documentation

◆ ToolMfccFb()

ToolMfccFb ( iFftLength,
f_s )

helper function: computes transfer functions of MFCC filter bands see function from Slaneys Auditory Toolbox (Matlab)

Parameters
iFftLengthlength of FFT
f_ssample rate of audio data
Returns
H: matrix with transfer functions

Definition at line 13 of file ToolMfccFb.py.

13def ToolMfccFb(iFftLength, f_s):
14
15 # initialization
16 f_start = 133.3333
17
18 iNumLinFilters = 13
19 iNumLogFilters = 27
20 iNumFilters = iNumLinFilters + iNumLogFilters
21
22 linearSpacing = 66.66666666
23 logSpacing = 1.0711703
24
25 # compute band frequencies
26 f = np.zeros(iNumFilters + 2)
27 f[np.arange(0, iNumLinFilters)] = f_start + np.arange(0, iNumLinFilters) * linearSpacing
28 f[np.arange(iNumLinFilters, iNumFilters + 2)] = f[iNumLinFilters - 1] * logSpacing**np.arange(1, iNumLogFilters + 3)
29
30 # sanity check
31 if f[iNumFilters - 1] >= f_s / 2:
32 f = f[f < f_s / 2]
33 iNumFilters = f.shape[0] - 2
34
35 f_l = f[np.arange(0, iNumFilters)]
36 f_c = f[np.arange(1, iNumFilters + 1)]
37 f_u = f[np.arange(2, iNumFilters + 2)]
38
39 # allocate memory for filters and set max amplitude
40 H = np.zeros([iNumFilters, iFftLength])
41 afFilterMax = 2 / (f_u - f_l)
42 f_k = np.arange(0, iFftLength) / (iFftLength - 1) * f_s / 2
43
44 # compute the transfer functions
45 for c in range(0, iNumFilters):
46 # lower filter slope
47 i_l = np.argmax(f_k > f_l[c])
48 i_u = np.max([0, np.argmin(f_k <= f_c[c]) - 1])
49 H[c, np.arange(i_l, i_u + 1)] = afFilterMax[c] * (f_k[np.arange(i_l, i_u + 1)] - f_l[c]) / (f_c[c] - f_l[c])
50 # upper filter slope
51 i_l = i_u + 1
52 i_u = np.max([0, np.argmin(f_k < f_u[c]) - 1])
53 H[c, np.arange(i_l, i_u + 1)] = afFilterMax[c] * (f_u[c] - f_k[np.arange(i_l, i_u + 1)]) / (f_u[c] - f_c[c])
54
55 return H