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 Q31 8import cmsisdsp.datatype as dt 9 10mfccq31=dsp.arm_mfcc_instance_q31() 11 12sample_rate = 16000 13FFTSize = 256 14numOfDctOutputs = 13 15 16freq_min = 64 17freq_high = sample_rate / 2 18numOfMelFilters = 20 19 20windowQ31 = dt.convert(sig.windows.hamming(FFTSize, sym=False),Q31) 21filtLen,filtPos,packedFiltersQ31 = mfcc.melFilterMatrix(Q31,freq_min, freq_high, numOfMelFilters,sample_rate,FFTSize) 22dctMatrixFiltersQ31 = mfcc.dctMatrix(Q31,numOfDctOutputs, numOfMelFilters) 23 24 25status=dsp.arm_mfcc_init_q31(mfccq31,FFTSize,numOfMelFilters,numOfDctOutputs, 26 dctMatrixFiltersQ31, 27 filtPos,filtLen,packedFiltersQ31,windowQ31) 28print("Init status = %d" % status) 29 30tmp=np.zeros(2*FFTSize,dtype=np.int32) 31 32debugQ31 = f.toQ31(debug) 33errorStatus,resQ31=dsp.arm_mfcc_q31(mfccq31,debugQ31,tmp) 34print("MFCC status = %d" % errorStatus) 35res=(1<<8)*f.Q31toF32(resQ31) 36 37print(res) 38 39print(ref) 40 41print("FFT Length = %d" % mfccq31.fftLen()) 42print("Nb MEL Filters = %d" % mfccq31.nbMelFilters()) 43print("Nb DCT Outputs = %d" % mfccq31.nbDctOutputs()) 44