| #include "edge-impulse-sdk/dsp/config.hpp" |
| #if EIDSP_LOAD_CMSIS_DSP_SOURCES |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| #include "edge-impulse-sdk/CMSIS/DSP/Include/dsp/transform_functions_f16.h" |
| #include "edge-impulse-sdk/CMSIS/DSP/Include/dsp/statistics_functions_f16.h" |
| #include "edge-impulse-sdk/CMSIS/DSP/Include/dsp/basic_math_functions_f16.h" |
| #include "edge-impulse-sdk/CMSIS/DSP/Include/dsp/complex_math_functions_f16.h" |
| #include "edge-impulse-sdk/CMSIS/DSP/Include/dsp/fast_math_functions_f16.h" |
| #include "edge-impulse-sdk/CMSIS/DSP/Include/dsp/matrix_functions_f16.h" |
|
|
| #if defined(ARM_FLOAT16_SUPPORTED) |
|
|
| |
| |
| |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
|
|
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| void arm_mfcc_f16( |
| const arm_mfcc_instance_f16 * S, |
| float16_t *pSrc, |
| float16_t *pDst, |
| float16_t *pTmp |
| ) |
| { |
| float16_t maxValue; |
| uint32_t index; |
| uint32_t i; |
| float16_t result; |
| const float16_t *coefs=S->filterCoefs; |
| arm_matrix_instance_f16 pDctMat; |
|
|
| |
| arm_absmax_f16(pSrc,S->fftLen,&maxValue,&index); |
|
|
| arm_scale_f16(pSrc,1.0f16/(_Float16)maxValue,pSrc,S->fftLen); |
|
|
| |
| arm_mult_f16(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.0f16; |
| } |
| arm_cfft_f16(&(S->cfft),pTmp,0,1); |
| #else |
| |
| arm_rfft_fast_f16(&(S->rfft),pSrc,pTmp,0); |
| |
| pTmp[S->fftLen]=pTmp[1]; |
| pTmp[S->fftLen+1]=0.0f16; |
| pTmp[1]=0.0f; |
| #endif |
| arm_cmplx_mag_f16(pTmp,pSrc,S->fftLen); |
|
|
| |
| for(i=0; i<S->nbMelFilters; i++) |
| { |
| arm_dot_prod_f16(pSrc+S->filterPos[i], |
| coefs, |
| S->filterLengths[i], |
| &result); |
|
|
| coefs += S->filterLengths[i]; |
|
|
| pTmp[i] = result; |
|
|
| } |
|
|
| |
| arm_offset_f16(pTmp,1.0e-4f16,pTmp,S->nbMelFilters); |
| arm_vlog_f16(pTmp,pTmp,S->nbMelFilters); |
|
|
| |
|
|
| pDctMat.numRows=S->nbDctOutputs; |
| pDctMat.numCols=S->nbMelFilters; |
| pDctMat.pData=(float16_t*)S->dctCoefs; |
|
|
| arm_mat_vec_mult_f16(&pDctMat, pTmp, pDst); |
| |
|
|
| } |
|
|
| #endif |
| |
| |
| |
|
|
| #endif |
|
|