1import cmsisdsp as dsp
2import numpy as np
3import cmsisdsp.fixedpoint as f
4import cmsisdsp.mfcc as mfcc
5import scipy.signal as sig
6from mfccdebugdata import *
7from cmsisdsp.datatype import Q15
8import cmsisdsp.datatype as dt
9
10mfccq15=dsp.arm_mfcc_instance_q15()
11
12sample_rate = 16000
13FFTSize = 256
14numOfDctOutputs = 13
15
16freq_min = 64
17freq_high = sample_rate / 2
18numOfMelFilters = 20
19
20windowQ15 = dt.convert(sig.windows.hamming(FFTSize, sym=False),Q15)
21filtLen,filtPos,packedFiltersQ15 = mfcc.melFilterMatrix(Q15,freq_min, freq_high, numOfMelFilters,sample_rate,FFTSize)
22dctMatrixFiltersQ15 = mfcc.dctMatrix(Q15,numOfDctOutputs, numOfMelFilters)
23
24
25status=dsp.arm_mfcc_init_q15(mfccq15,FFTSize,numOfMelFilters,numOfDctOutputs,
26    dctMatrixFiltersQ15,
27    filtPos,filtLen,packedFiltersQ15,windowQ15)
28print("Init status = %d" % status)
29
30tmp=np.zeros(2*FFTSize,dtype=np.int32)
31
32debugQ15 = f.toQ15(debug)
33errorStatus,resQ15=dsp.arm_mfcc_q15(mfccq15,debugQ15,tmp)
34print("MFCC status = %d" % errorStatus)
35res=(1<<8)*f.Q15toF32(resQ15)
36
37print(res)
38
39print(ref)
40
41print("FFT Length = %d" % mfccq15.fftLen())
42print("Nb MEL Filters = %d" % mfccq15.nbMelFilters())
43print("Nb DCT Outputs = %d" % mfccq15.nbDctOutputs())
44