| #include "edge-impulse-sdk/dsp/config.hpp" |
| #if EIDSP_LOAD_CMSIS_DSP_SOURCES |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
|
|
| #include "edge-impulse-sdk/CMSIS/DSP/Include/dsp/transform_functions.h" |
| #include "edge-impulse-sdk/CMSIS/DSP/Include/dsp/statistics_functions.h" |
| #include "edge-impulse-sdk/CMSIS/DSP/Include/dsp/basic_math_functions.h" |
| #include "edge-impulse-sdk/CMSIS/DSP/Include/dsp/complex_math_functions.h" |
| #include "edge-impulse-sdk/CMSIS/DSP/Include/dsp/fast_math_functions.h" |
| #include "edge-impulse-sdk/CMSIS/DSP/Include/dsp/matrix_functions.h" |
|
|
| |
| |
| |
|
|
|
|
|
|
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| void arm_mfcc_f32( |
| const arm_mfcc_instance_f32 * S, |
| float32_t *pSrc, |
| float32_t *pDst, |
| float32_t *pTmp |
| ) |
| { |
| float32_t maxValue; |
| uint32_t index; |
| uint32_t i; |
| float32_t result; |
| const float32_t *coefs=S->filterCoefs; |
| arm_matrix_instance_f32 pDctMat; |
|
|
| |
| arm_absmax_f32(pSrc,S->fftLen,&maxValue,&index); |
|
|
| arm_scale_f32(pSrc,1.0f/maxValue,pSrc,S->fftLen); |
|
|
| |
| arm_mult_f32(pSrc,S->windowCoefs,pSrc,S->fftLen); |
|
|
| |
| |
| #if defined(ARM_MFCC_CFFT_BASED) |
| |
| |
| |
| |
| |
| |
| |
| |
| for(i=0; i < S->fftLen ; i++) |
| { |
| pTmp[2*i] = pSrc[i]; |
| pTmp[2*i+1] = 0.0f; |
| } |
| arm_cfft_f32(&(S->cfft),pTmp,0,1); |
| #else |
| |
| arm_rfft_fast_f32(&(S->rfft),pSrc,pTmp,0); |
| |
| pTmp[S->fftLen]=pTmp[1]; |
| pTmp[S->fftLen+1]=0.0f; |
| pTmp[1]=0.0f; |
| #endif |
| arm_cmplx_mag_f32(pTmp,pSrc,S->fftLen); |
|
|
| |
| for(i=0; i<S->nbMelFilters; i++) |
| { |
| arm_dot_prod_f32(pSrc+S->filterPos[i], |
| coefs, |
| S->filterLengths[i], |
| &result); |
|
|
| coefs += S->filterLengths[i]; |
|
|
| pTmp[i] = result; |
|
|
| } |
|
|
| |
| arm_offset_f32(pTmp,1.0e-6f,pTmp,S->nbMelFilters); |
| arm_vlog_f32(pTmp,pTmp,S->nbMelFilters); |
|
|
| |
|
|
| pDctMat.numRows=S->nbDctOutputs; |
| pDctMat.numCols=S->nbMelFilters; |
| pDctMat.pData=(float32_t*)S->dctCoefs; |
|
|
| arm_mat_vec_mult_f32(&pDctMat, pTmp, pDst); |
| |
|
|
| } |
|
|
| |
| |
| |
|
|
| #endif |
|
|