85 #ifndef ARM_MATH_CM0_FAMILY 95 q31_t sum, acc0, acc1, acc2, acc3;
98 q7_t x0, x1, x2, x3, c0, c1;
99 uint32_t j, k = 0u, count, blkCnt, outBlockSize, blockSize1, blockSize2, blockSize3;
116 if(srcALen >= srcBLen)
125 outBlockSize = (2u * srcALen) - 1u;
131 j = outBlockSize - (srcALen + (srcBLen - 1u));
152 pOut = pDst + ((srcALen + srcBLen) - 2u);
168 blockSize1 = srcBLen - 1u;
169 blockSize2 = srcALen - (srcBLen - 1u);
170 blockSize3 = blockSize1;
190 pSrc1 = pIn2 + (srcBLen - 1u);
198 while(blockSize1 > 0u)
211 in1 = (
q15_t) * px++;
212 in2 = (
q15_t) * px++;
213 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
216 in1 = (
q15_t) * py++;
217 in2 = (
q15_t) * py++;
218 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
222 sum = __SMLAD(input1, input2, sum);
225 in1 = (
q15_t) * px++;
226 in2 = (
q15_t) * px++;
227 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
230 in1 = (
q15_t) * py++;
231 in2 = (
q15_t) * py++;
232 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
236 sum = __SMLAD(input1, input2, sum);
258 *pOut = (
q7_t) (__SSAT(sum >> 7, 8));
302 blkCnt = blockSize2 >> 2u;
336 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
342 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
345 acc0 = __SMLAD(input1, input2, acc0);
351 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
354 acc1 = __SMLAD(input1, input2, acc1);
360 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
363 acc2 = __SMLAD(input1, input2, acc2);
372 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
375 acc3 = __SMLAD(input1, input2, acc3);
389 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
395 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
398 acc0 = __SMLAD(input1, input2, acc0);
404 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
407 acc1 = __SMLAD(input1, input2, acc1);
413 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
416 acc2 = __SMLAD(input1, input2, acc2);
425 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
428 acc3 = __SMLAD(input1, input2, acc3);
446 acc0 += ((
q15_t) x0 * c0);
448 acc1 += ((
q15_t) x1 * c0);
450 acc2 += ((
q15_t) x2 * c0);
452 acc3 += ((
q15_t) x3 * c0);
464 *pOut = (
q7_t) (__SSAT(acc0 >> 7, 8));
468 *pOut = (
q7_t) (__SSAT(acc1 >> 7, 8));
471 *pOut = (
q7_t) (__SSAT(acc2 >> 7, 8));
474 *pOut = (
q7_t) (__SSAT(acc3 >> 7, 8));
488 blkCnt = blockSize2 % 0x4u;
503 in1 = (
q15_t) * px++;
504 in2 = (
q15_t) * px++;
505 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
508 in1 = (
q15_t) * py++;
509 in2 = (
q15_t) * py++;
510 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
513 sum = __SMLAD(input1, input2, sum);
516 in1 = (
q15_t) * px++;
517 in2 = (
q15_t) * px++;
518 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
521 in1 = (
q15_t) * py++;
522 in2 = (
q15_t) * py++;
523 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
526 sum = __SMLAD(input1, input2, sum);
539 sum += ((
q15_t) * px++ * *py++);
546 *pOut = (
q7_t) (__SSAT(sum >> 7, 8));
578 sum += ((
q15_t) * px++ * *py++);
585 *pOut = (
q7_t) (__SSAT(sum >> 7, 8));
615 count = srcBLen - 1u;
618 pSrc1 = pIn1 + (srcALen - (srcBLen - 1u));
628 while(blockSize3 > 0u)
641 in1 = (
q15_t) * px++;
642 in2 = (
q15_t) * px++;
643 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
646 in1 = (
q15_t) * py++;
647 in2 = (
q15_t) * py++;
648 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
652 sum = __SMLAD(input1, input2, sum);
655 in1 = (
q15_t) * px++;
656 in2 = (
q15_t) * px++;
657 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
660 in1 = (
q15_t) * py++;
661 in2 = (
q15_t) * py++;
662 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
666 sum = __SMLAD(input1, input2, sum);
679 sum += ((
q15_t) * px++ * *py++);
686 *pOut = (
q7_t) (__SSAT(sum >> 7, 8));
706 q7_t *pIn2 = pSrcB + (srcBLen - 1u);
729 tot = ((srcALen + srcBLen) - 2u);
731 if(srcALen > srcBLen)
734 j = srcALen - srcBLen;
740 else if(srcALen < srcBLen)
746 pIn2 = pSrcA + (srcALen - 1u);
762 for (i = 0u; i <= tot; i++)
768 for (j = 0u; j <= i; j++)
771 if((((i - j) < srcBLen) && (j < srcALen)))
774 sum += ((
q15_t) pIn1[j] * pIn2[-((int32_t) i - j)]);
779 *pDst-- = (
q7_t) __SSAT((sum >> 7u), 8u);
781 *pDst++ = (
q7_t) __SSAT((sum >> 7u), 8u);
int8_t q7_t
8-bit fractional data type in 1.7 format.
int16_t q15_t
16-bit fractional data type in 1.15 format.
void arm_correlate_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst)
Correlation of Q7 sequences.
int32_t q31_t
32-bit fractional data type in 1.31 format.