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