87 #ifndef ARM_MATH_CM0_FAMILY 98 q63_t acc0, acc1, acc2;
100 uint32_t j, k, count, blkCnt, blockSize1, blockSize2, blockSize3;
105 if(srcALen >= srcBLen)
116 pIn1 = (
q31_t *) pSrcB;
119 pIn2 = (
q31_t *) pSrcA;
138 blockSize1 = srcBLen - 1u;
139 blockSize2 = srcALen - (srcBLen - 1u);
140 blockSize3 = blockSize1;
168 while(blockSize1 > 0u)
181 sum += (
q63_t) * px++ * (*py--);
183 sum += (
q63_t) * px++ * (*py--);
185 sum += (
q63_t) * px++ * (*py--);
187 sum += (
q63_t) * px++ * (*py--);
200 sum += (
q63_t) * px++ * (*py--);
207 *pOut++ = (
q31_t) (sum >> 31);
234 pSrc2 = pIn2 + (srcBLen - 1u);
250 blkCnt = blockSize2 / 3;
278 acc0 += ((
q63_t) x0 * c0);
280 acc1 += ((
q63_t) x1 * c0);
282 acc2 += ((
q63_t) x2 * c0);
292 acc0 += ((
q63_t) x1 * c0);
294 acc1 += ((
q63_t) x2 * c0);
296 acc2 += ((
q63_t) x0 * c0);
306 acc0 += ((
q63_t) x2 * c0);
308 acc1 += ((
q63_t) x0 * c0);
310 acc2 += ((
q63_t) x1 * c0);
320 k = srcBLen - (3 * (srcBLen / 3));
332 acc0 += ((
q63_t) x0 * c0);
334 acc1 += ((
q63_t) x1 * c0);
336 acc2 += ((
q63_t) x2 * c0);
347 *pOut++ = (
q31_t) (acc0 >> 31);
348 *pOut++ = (
q31_t) (acc1 >> 31);
349 *pOut++ = (
q31_t) (acc2 >> 31);
364 blkCnt = blockSize2 - 3 * (blockSize2 / 3);
379 sum += (
q63_t) * px++ * (*py--);
380 sum += (
q63_t) * px++ * (*py--);
381 sum += (
q63_t) * px++ * (*py--);
382 sum += (
q63_t) * px++ * (*py--);
395 sum += (
q63_t) * px++ * (*py--);
402 *pOut++ = (
q31_t) (sum >> 31);
432 sum += (
q63_t) * px++ * (*py--);
439 *pOut++ = (
q31_t) (sum >> 31);
469 pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u);
473 pSrc2 = pIn2 + (srcBLen - 1u);
480 while(blockSize3 > 0u)
486 k = blockSize3 >> 2u;
493 sum += (
q63_t) * px++ * (*py--);
495 sum += (
q63_t) * px++ * (*py--);
497 sum += (
q63_t) * px++ * (*py--);
499 sum += (
q63_t) * px++ * (*py--);
507 k = blockSize3 % 0x4u;
512 sum += (
q63_t) * px++ * (*py--);
519 *pOut++ = (
q31_t) (sum >> 31);
539 for (i = 0; i < (srcALen + srcBLen - 1); i++)
545 for (j = 0; j <= i; j++)
548 if(((i - j) < srcBLen) && (j < srcALen))
551 sum += ((
q63_t) pIn1[j] * (pIn2[i - j]));
556 pDst[i] = (
q31_t) (sum >> 31u);
void arm_conv_q31(q31_t *pSrcA, uint32_t srcALen, q31_t *pSrcB, uint32_t srcBLen, q31_t *pDst)
Convolution of Q31 sequences.
int64_t q63_t
64-bit fractional data type in 1.63 format.
int32_t q31_t
32-bit fractional data type in 1.31 format.