| #include "edge-impulse-sdk/dsp/config.hpp" |
| #if EIDSP_LOAD_CMSIS_DSP_SOURCES |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #include "edge-impulse-sdk/CMSIS/DSP/Include/dsp/basic_math_functions.h" |
|
|
| |
| |
| |
|
|
|
|
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) |
|
|
| #include "edge-impulse-sdk/CMSIS/DSP/Include/arm_helium_utils.h" |
| void arm_clip_q15(const q15_t * pSrc, |
| q15_t * pDst, |
| q15_t low, |
| q15_t high, |
| uint32_t numSamples) |
| { |
| uint32_t blkCnt; |
| q15x8_t curVec0, curVec1; |
| q15x8_t vecLow, vecHigh; |
|
|
| vecLow = vdupq_n_s16(low); |
| vecHigh = vdupq_n_s16(high); |
|
|
| curVec0 = vld1q(pSrc); |
| pSrc += 8; |
| |
| |
| |
| |
| |
| blkCnt = numSamples >> 4; |
| while (blkCnt--) |
| { |
| curVec0 = vmaxq(curVec0, vecLow); |
| curVec1 = vld1q(pSrc); |
| pSrc += 8; |
| curVec0 = vminq(curVec0, vecHigh); |
| vst1q(pDst, curVec0); |
| pDst += 8; |
| curVec1 = vmaxq(curVec1, vecLow); |
| curVec0 = vld1q(pSrc); |
| pSrc += 8; |
| curVec1 = vminq(curVec1, vecHigh); |
| vst1q(pDst, curVec1); |
| pDst += 8; |
| } |
| |
| |
| |
| blkCnt = numSamples - ((numSamples >> 4) << 4); |
| if (blkCnt >= 8) |
| { |
| curVec0 = vmaxq(curVec0, vecLow); |
| curVec0 = vminq(curVec0, vecHigh); |
| vst1q(pDst, curVec0); |
| pDst += 8; |
| curVec0 = vld1q(pSrc); |
| pSrc += 8; |
| } |
|
|
| if (blkCnt > 0) |
| { |
| mve_pred16_t p0 = vctp16q(blkCnt & 7); |
| curVec0 = vmaxq(curVec0, vecLow); |
| curVec0 = vminq(curVec0, vecHigh); |
| vstrhq_p(pDst, curVec0, p0); |
| } |
| } |
|
|
| #else |
| void arm_clip_q15(const q15_t * pSrc, |
| q15_t * pDst, |
| q15_t low, |
| q15_t high, |
| uint32_t numSamples) |
| { |
| uint32_t i; |
| for (i = 0; i < numSamples; i++) |
| { |
| if (pSrc[i] > high) |
| pDst[i] = high; |
| else if (pSrc[i] < low) |
| pDst[i] = low; |
| else |
| pDst[i] = pSrc[i]; |
| } |
| } |
| #endif |
|
|
| |
| |
| |
|
|
| #endif |
|
|