MFCC.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. ###########################################
  2. # Project: CMSIS DSP Library
  3. # Title: MFCC.py
  4. # Description: Node for CMSIS-DSP MFCC
  5. #
  6. # $Date: 30 July 2021
  7. # $Revision: V1.10.0
  8. #
  9. # Target Processor: Cortex-M and Cortex-A cores
  10. # -------------------------------------------------------------------- */
  11. #
  12. # Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved.
  13. #
  14. # SPDX-License-Identifier: Apache-2.0
  15. #
  16. # Licensed under the Apache License, Version 2.0 (the License); you may
  17. # not use this file except in compliance with the License.
  18. # You may obtain a copy of the License at
  19. #
  20. # www.apache.org/licenses/LICENSE-2.0
  21. #
  22. # Unless required by applicable law or agreed to in writing, software
  23. # distributed under the License is distributed on an AS IS BASIS, WITHOUT
  24. # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  25. # See the License for the specific language governing permissions and
  26. # limitations under the License.
  27. ############################################
  28. from .simu import *
  29. import cmsisdsp as dsp
  30. # The CMSIS-DSP MFCC
  31. class MFCC(GenericNode):
  32. def __init__(self,inputSize,outSize,fifoin,fifoout,mfccConfig):
  33. GenericNode.__init__(self,inputSize,outSize,fifoin,fifoout)
  34. self._config=mfccConfig
  35. if self._src.type == np.dtype(np.float32):
  36. self._tmp=np.zeros(2*inputSize,dtype=np.float32)
  37. else:
  38. self._tmp=np.zeros(2*inputSize,dtype=np.int32)
  39. def run(self):
  40. a=self.getReadBuffer()
  41. b=self.getWriteBuffer()
  42. if self._src.type == np.dtype(np.float32):
  43. res=dsp.arm_mfcc_f32(self._config,a,self._tmp)
  44. errorStatus = 0
  45. if self._src.type == np.dtype(np.int32):
  46. errorStatus,res=dsp.arm_mfcc_q31(self._config,a,self._tmp)
  47. if self._src.type == np.dtype(np.int16):
  48. errorStatus,res=dsp.arm_mfcc_q15(self._config,a,self._tmp)
  49. b[:] = res[:]
  50. return(errorStatus)