94 uint32_t tapCnt, blkCnt;
101 q31_t errorXmu, oneByEnergy;
105 uint32_t uShift = ((uint32_t) S->
postShift + 1u);
106 uint32_t lShift = 32u - uShift;
113 pStateCurnt = &(S->
pState[(numTaps - 1u)]);
119 #ifndef ARM_MATH_CM0_FAMILY 127 *pStateCurnt++ = *pSrc;
140 (((
q63_t) x0 * x0) << 1)) >> 32);
141 energy = (
q31_t) (((((
q63_t) in * in) << 1) + (energy << 32)) >> 32);
147 tapCnt = numTaps >> 2;
152 acc += ((
q63_t) (*px++)) * (*pb++);
153 acc += ((
q63_t) (*px++)) * (*pb++);
154 acc += ((
q63_t) (*px++)) * (*pb++);
155 acc += ((
q63_t) (*px++)) * (*pb++);
162 tapCnt = numTaps % 0x4u;
167 acc += ((
q63_t) (*px++)) * (*pb++);
175 acc_l = acc & 0xffffffff;
178 acc_h = (acc >> 32) & 0xffffffff;
180 acc = (uint32_t) acc_l >> lShift | acc_h << uShift;
183 *pOut++ = (
q31_t) acc;
191 postShift = arm_recip_q31(energy +
DELTA_Q31,
198 w = clip_q63_to_q31(((
q63_t) errorXmu * oneByEnergy) >> (31 - postShift));
207 tapCnt = numTaps >> 2;
215 coef = (
q31_t) (((
q63_t) w * (*px++)) >> (32));
217 *pb = clip_q63_to_q31((
q63_t) * pb + (coef << 1u));
221 coef = (
q31_t) (((
q63_t) w * (*px++)) >> (32));
222 *pb = clip_q63_to_q31((
q63_t) * pb + (coef << 1u));
225 coef = (
q31_t) (((
q63_t) w * (*px++)) >> (32));
226 *pb = clip_q63_to_q31((
q63_t) * pb + (coef << 1u));
229 coef = (
q31_t) (((
q63_t) w * (*px++)) >> (32));
230 *pb = clip_q63_to_q31((
q63_t) * pb + (coef << 1u));
238 tapCnt = numTaps % 0x4u;
243 coef = (
q31_t) (((
q63_t) w * (*px++)) >> (32));
244 *pb = clip_q63_to_q31((
q63_t) * pb + (coef << 1u));
273 tapCnt = (numTaps - 1u) >> 2u;
278 *pStateCurnt++ = *pState++;
279 *pStateCurnt++ = *pState++;
280 *pStateCurnt++ = *pState++;
281 *pStateCurnt++ = *pState++;
288 tapCnt = (numTaps - 1u) % 0x4u;
293 *pStateCurnt++ = *pState++;
307 *pStateCurnt++ = *pSrc;
321 energy = (
q31_t) (((((
q63_t) in * in) << 1) + (energy << 32)) >> 32);
332 acc += ((
q63_t) (*px++)) * (*pb++);
341 acc_l = acc & 0xffffffff;
344 acc_h = (acc >> 32) & 0xffffffff;
346 acc = (uint32_t) acc_l >> lShift | acc_h << uShift;
352 *pOut++ = (
q31_t) acc;
367 w = clip_q63_to_q31(((
q63_t) errorXmu * oneByEnergy) >> (31 - postShift));
382 coef = (
q31_t) (((
q63_t) w * (*px++)) >> (32));
384 *pb = clip_q63_to_q31((
q63_t) * pb + (coef << 1u));
414 tapCnt = (numTaps - 1u);
419 *pStateCurnt++ = *pState++;
#define DELTA_Q31
Macros required for reciprocal calculation in Normalized LMS.
int64_t q63_t
64-bit fractional data type in 1.63 format.
void arm_lms_norm_q31(arm_lms_norm_instance_q31 *S, q31_t *pSrc, q31_t *pRef, q31_t *pOut, q31_t *pErr, uint32_t blockSize)
Processing function for Q31 normalized LMS filter.
Instance structure for the Q31 normalized LMS filter.
int32_t q31_t
32-bit fractional data type in 1.31 format.