23def computeSpectrogram(x, f_s, afWindow=None, iBlockLength=4096, iHopLength=2048, bNormalize=True, bMagnitude=True):
25 iBlockLength = np.int_(iBlockLength)
26 iHopLength = np.int_(iHopLength)
29 x = ToolPreprocAudio(x, bNormalize)
33 afWindow = ToolComputeHann(iBlockLength)
35 assert(afWindow.shape[0] == iBlockLength),
"parameter error: invalid window dimension"
38 x_b, t = ToolBlockAudio(x, iBlockLength, iHopLength, f_s)
41 iSpecDim = np.int_([(x_b.shape[1] / 2 + 1), x_b.shape[0]])
42 X = np.zeros(iSpecDim)
46 norm = 2 / x_b.shape[1]
48 for n
in range(0, x_b.shape[0]):
50 tmp = np.fft.fft(x_b[n, :] * afWindow) * norm
54 X[:, n] = abs(tmp[range(iSpecDim[0])])
56 X[:, n] = tmp[range(iSpecDim[0])]
59 X[[0, iSpecDim[0]-1], :] = X[[0, iSpecDim[0]-1], :] / np.sqrt(2)
61 f = np.arange(0, iSpecDim[0]) * f_s / iBlockLength
68 from pyACA.ToolReadAudio
import ToolReadAudio
71 [f_s, x] = ToolReadAudio(cPath)
78 [X, f, t] = computeSpectrogram(x, f_s,
None, iBlockLength, iHopLength)