testmfccq31.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import cmsisdsp as dsp
  2. import numpy as np
  3. import cmsisdsp.fixedpoint as f
  4. import cmsisdsp.mfcc as mfcc
  5. import scipy.signal as sig
  6. from mfccdebugdata import *
  7. from cmsisdsp.datatype import Q31
  8. import cmsisdsp.datatype as dt
  9. mfccq31=dsp.arm_mfcc_instance_q31()
  10. sample_rate = 16000
  11. FFTSize = 256
  12. numOfDctOutputs = 13
  13. freq_min = 64
  14. freq_high = sample_rate / 2
  15. numOfMelFilters = 20
  16. windowQ31 = dt.convert(sig.hamming(FFTSize, sym=False),Q31)
  17. filtLen,filtPos,packedFiltersQ31 = mfcc.melFilterMatrix(Q31,freq_min, freq_high, numOfMelFilters,sample_rate,FFTSize)
  18. dctMatrixFiltersQ31 = mfcc.dctMatrix(Q31,numOfDctOutputs, numOfMelFilters)
  19. status=dsp.arm_mfcc_init_q31(mfccq31,FFTSize,numOfMelFilters,numOfDctOutputs,
  20. dctMatrixFiltersQ31,
  21. filtPos,filtLen,packedFiltersQ31,windowQ31)
  22. print("Init status = %d" % status)
  23. tmp=np.zeros(2*FFTSize,dtype=np.int32)
  24. debugQ31 = f.toQ31(debug)
  25. errorStatus,resQ31=dsp.arm_mfcc_q31(mfccq31,debugQ31,tmp)
  26. print("MFCC status = %d" % errorStatus)
  27. res=(1<<8)*f.Q31toF32(resQ31)
  28. print(res)
  29. print(ref)
  30. print("FFT Length = %d" % mfccq31.fftLen())
  31. print("Nb MEL Filters = %d" % mfccq31.nbMelFilters())
  32. print("Nb DCT Outputs = %d" % mfccq31.nbDctOutputs())