86 #ifndef ARM_MATH_CM0_FAMILY 96 q63_t sum, acc0, acc1, acc2;
98 uint32_t j, k = 0u, count, blkCnt, outBlockSize, blockSize1, blockSize2, blockSize3;
115 if(srcALen >= srcBLen)
124 outBlockSize = (2u * srcALen) - 1u;
130 j = outBlockSize - (srcALen + (srcBLen - 1u));
151 pOut = pDst + ((srcALen + srcBLen) - 2u);
167 blockSize1 = srcBLen - 1u;
168 blockSize2 = srcALen - (srcBLen - 1u);
169 blockSize3 = blockSize1;
189 pSrc1 = pIn2 + (srcBLen - 1u);
197 while(blockSize1 > 0u)
210 sum += (
q63_t) * px++ * (*py++);
212 sum += (
q63_t) * px++ * (*py++);
214 sum += (
q63_t) * px++ * (*py++);
216 sum += (
q63_t) * px++ * (*py++);
230 sum += (
q63_t) * px++ * (*py++);
237 *pOut = (
q31_t) (sum >> 31);
281 blkCnt = blockSize2 / 3;
309 acc0 += ((
q63_t) x0 * c0);
311 acc1 += ((
q63_t) x1 * c0);
313 acc2 += ((
q63_t) x2 * c0);
323 acc0 += ((
q63_t) x1 * c0);
325 acc1 += ((
q63_t) x2 * c0);
327 acc2 += ((
q63_t) x0 * c0);
337 acc0 += ((
q63_t) x2 * c0);
339 acc1 += ((
q63_t) x0 * c0);
341 acc2 += ((
q63_t) x1 * c0);
351 k = srcBLen - (3 * (srcBLen / 3));
363 acc0 += ((
q63_t) x0 * c0);
365 acc1 += ((
q63_t) x1 * c0);
367 acc2 += ((
q63_t) x2 * c0);
378 *pOut = (
q31_t) (acc0 >> 31);
382 *pOut = (
q31_t) (acc1 >> 31);
385 *pOut = (
q31_t) (acc2 >> 31);
402 blkCnt = blockSize2 - 3 * (blockSize2 / 3);
417 sum += (
q63_t) * px++ * (*py++);
418 sum += (
q63_t) * px++ * (*py++);
419 sum += (
q63_t) * px++ * (*py++);
420 sum += (
q63_t) * px++ * (*py++);
433 sum += (
q63_t) * px++ * (*py++);
440 *pOut = (
q31_t) (sum >> 31);
472 sum += (
q63_t) * px++ * (*py++);
479 *pOut = (
q31_t) (sum >> 31);
508 count = srcBLen - 1u;
511 pSrc1 = pIn1 + (srcALen - (srcBLen - 1u));
521 while(blockSize3 > 0u)
535 sum += (
q63_t) * px++ * (*py++);
537 sum += (
q63_t) * px++ * (*py++);
539 sum += (
q63_t) * px++ * (*py++);
541 sum += (
q63_t) * px++ * (*py++);
554 sum += (
q63_t) * px++ * (*py++);
561 *pOut = (
q31_t) (sum >> 31);
581 q31_t *pIn2 = pSrcB + (srcBLen - 1u);
604 tot = ((srcALen + srcBLen) - 2u);
606 if(srcALen > srcBLen)
609 j = srcALen - srcBLen;
615 else if(srcALen < srcBLen)
621 pIn2 = pSrcA + (srcALen - 1u);
637 for (i = 0u; i <= tot; i++)
643 for (j = 0u; j <= i; j++)
646 if((((i - j) < srcBLen) && (j < srcALen)))
649 sum += ((
q63_t) pIn1[j] * pIn2[-((int32_t) i - j)]);
654 *pDst-- = (
q31_t) (sum >> 31u);
656 *pDst++ = (
q31_t) (sum >> 31u);
int64_t q63_t
64-bit fractional data type in 1.63 format.
void arm_correlate_q31(q31_t *pSrcA, uint32_t srcALen, q31_t *pSrcB, uint32_t srcBLen, q31_t *pDst)
Correlation of Q31 sequences.
int32_t q31_t
32-bit fractional data type in 1.31 format.