78 q31_t *pb = pScratchIn;
82 uint32_t delaySize = S->
maxDelay + blockSize;
85 uint32_t tapCnt, blkCnt;
86 q31_t coeff = *pCoeffs++;
92 arm_circularWrite_f32((int32_t *) py, delaySize, &S->
stateIndex, 1,
93 (int32_t *) pSrc, 1, blockSize);
96 readIndex = (int32_t) (S->
stateIndex - blockSize) - *pTapDelay++;
101 readIndex += (int32_t) delaySize;
108 arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1,
109 (int32_t *) pb, (int32_t *) pb, blockSize, 1,
119 #ifndef ARM_MATH_CM0_FAMILY 125 blkCnt = blockSize >> 2;
130 *pOut++ = (
q31_t) (((
q63_t) * px++ * coeff) >> 32);
131 *pOut++ = (
q31_t) (((
q63_t) * px++ * coeff) >> 32);
132 *pOut++ = (
q31_t) (((
q63_t) * px++ * coeff) >> 32);
133 *pOut++ = (
q31_t) (((
q63_t) * px++ * coeff) >> 32);
141 blkCnt = blockSize % 0x4u;
146 *pOut++ = (
q31_t) (((
q63_t) * px++ * coeff) >> 32);
157 readIndex = (int32_t) (S->
stateIndex - blockSize) - *pTapDelay++;
162 readIndex += (int32_t) delaySize;
166 tapCnt = (uint32_t) numTaps - 2u;
174 arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1,
175 (int32_t *) pb, (int32_t *) pb, blockSize, 1,
186 blkCnt = blockSize >> 2;
191 out += ((
q63_t) * px++ * coeff) >> 32;
192 *pOut++ = (
q31_t) (out);
195 out += ((
q63_t) * px++ * coeff) >> 32;
196 *pOut++ = (
q31_t) (out);
199 out += ((
q63_t) * px++ * coeff) >> 32;
200 *pOut++ = (
q31_t) (out);
203 out += ((
q63_t) * px++ * coeff) >> 32;
204 *pOut++ = (
q31_t) (out);
212 blkCnt = blockSize % 0x4u;
218 out += ((
q63_t) * px++ * coeff) >> 32;
219 *pOut++ = (
q31_t) (out);
230 readIndex = (int32_t) (S->
stateIndex - blockSize) - *pTapDelay++;
235 readIndex += (int32_t) delaySize;
248 arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1,
249 (int32_t *) pb, (int32_t *) pb, blockSize, 1,
260 blkCnt = blockSize >> 2;
265 out += ((
q63_t) * px++ * coeff) >> 32;
266 *pOut++ = (
q31_t) (out);
269 out += ((
q63_t) * px++ * coeff) >> 32;
270 *pOut++ = (
q31_t) (out);
273 out += ((
q63_t) * px++ * coeff) >> 32;
274 *pOut++ = (
q31_t) (out);
277 out += ((
q63_t) * px++ * coeff) >> 32;
278 *pOut++ = (
q31_t) (out);
286 blkCnt = blockSize % 0x4u;
292 out += ((
q63_t) * px++ * coeff) >> 32;
293 *pOut++ = (
q31_t) (out);
305 blkCnt = blockSize >> 2;
324 blkCnt = blockSize % 0x4u;
343 *pOut++ = (
q31_t) (((
q63_t) * px++ * coeff) >> 32);
354 readIndex = (int32_t) (S->
stateIndex - blockSize) - *pTapDelay++;
359 readIndex += (int32_t) delaySize;
363 tapCnt = (uint32_t) numTaps - 2u;
371 arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1,
372 (int32_t *) pb, (int32_t *) pb, blockSize, 1,
387 out += ((
q63_t) * px++ * coeff) >> 32;
388 *pOut++ = (
q31_t) (out);
399 readIndex = (int32_t) (S->
stateIndex - blockSize) - *pTapDelay++;
404 readIndex += (int32_t) delaySize;
417 arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1,
418 (int32_t *) pb, (int32_t *) pb, blockSize, 1,
433 out += ((
q63_t) * px++ * coeff) >> 32;
434 *pOut++ = (
q31_t) (out);
int64_t q63_t
64-bit fractional data type in 1.63 format.
Instance structure for the Q31 sparse FIR filter.
int32_t q31_t
32-bit fractional data type in 1.31 format.
void arm_fir_sparse_q31(arm_fir_sparse_instance_q31 *S, q31_t *pSrc, q31_t *pDst, q31_t *pScratchIn, uint32_t blockSize)
Processing function for the Q31 sparse FIR filter.