main.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import sched as s
  2. import matplotlib.pyplot as plt
  3. from matplotlib import cm
  4. import matplotlib.animation as animation
  5. import cmsisdsp as dsp
  6. import numpy as np
  7. import cmsisdsp.fixedpoint as f
  8. import cmsisdsp.mfcc as mfcc
  9. import scipy.signal as sig
  10. from cmsisdsp.datatype import F32,Q31,Q15
  11. from sharedconfig import *
  12. import cmsisdsp.datatype as dt
  13. mfccq15=dsp.arm_mfcc_instance_q15()
  14. windowQ15 = dt.convert(sig.hamming(FFTSize, sym=False),Q15)
  15. filtLen,filtPos,packedFiltersQ15 = mfcc.melFilterMatrix(Q15,freq_min, freq_high, numOfMelFilters,sample_rate,FFTSize)
  16. dctMatrixFiltersQ15 = mfcc.dctMatrix(Q15,numOfDctOutputs, numOfMelFilters)
  17. status=dsp.arm_mfcc_init_q15(mfccq15,FFTSize,numOfMelFilters,numOfDctOutputs,
  18. dctMatrixFiltersQ15,
  19. filtPos,filtLen,packedFiltersQ15,windowQ15)
  20. #DISPBUF = np.zeros(nbMFCCOutputs*numOfDctOutputs)
  21. DISPBUF=[]
  22. print("Start")
  23. nb,error = s.scheduler(mfccq15,DISPBUF)
  24. print("Nb sched = %d" % nb)
  25. fig, ax = plt.subplots()
  26. # The test signal is 5 second long
  27. # MFCC are slided by 0.5 second by the last window
  28. # Each sink entry is a one second of MFCC
  29. ims = []
  30. for i in range(10):
  31. mfccdata = (1<<8)*f.Q15toF32(DISPBUF[i])
  32. mfccdata=mfccdata.reshape((nbMFCCOutputs,numOfDctOutputs))
  33. mfccdata= np.swapaxes(mfccdata, 0 ,1)
  34. if i==0:
  35. ax.imshow(mfccdata, vmin=-10, vmax=10,interpolation='nearest',cmap=cm.coolwarm ,origin='lower')
  36. im=ax.imshow(mfccdata, vmin=-10, vmax=10,interpolation='nearest', animated=True,cmap=cm.coolwarm ,origin='lower')
  37. ims.append([im])
  38. ani = animation.ArtistAnimation(fig, ims, interval=500, blit=True,
  39. repeat_delay=500)
  40. #ani.save("mfcc.mp4")
  41. plt.show()