第9章ARM官方DSP库的BasicMathFunctions的使用(二)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第11页页共共4422页页第第99章章BasicMathFunctions的的使使用用((二二))本期教程主要讲基本函数中的相反数,偏移,位移,减法和比例因子。9.1相反数(VectorNegate)9.2求和(VectorOffset)9.3点乘(VectorShift)9.4减法(VectorSub)9.5比例因子(VectorScale)9.6BasicMathFunctions的重要说明9.7总结99..11相相反反数数((VVeeccttoorrNNeeggaattee))这部分函数主要用于求相反数,公式描述如下:pDst[n]=-pSrc[n],0=nblockSize.特别注意,这部分函数支持目标指针和源指针指向相同的缓冲区。99..11..11aarrmm__nneeggaattee__ff3322这个函数用于求32位浮点数的相反数,源代码分析如下:/***@briefNegatestheelementsofafloating-pointvector.*@param[in]*pSrcpointstotheinputvector*@param[out]*pDstpointstotheoutputvector*@param[in]blockSizenumberofsamplesinthevector*@returnnone.*/voidarm_negate_f32(float32_t*pSrc,float32_t*pDst,uint32_tblockSize){uint32_tblkCnt;/*loopcounter*/#ifndefARM_MATH_CM0_FAMILY/*RunthebelowcodeforCortex-M4andCortex-M3*/float32_tin1,in2,in3,in4;/*temporaryvariables*//*loopUnrolling*/blkCnt=blockSize2u;/*Firstpartoftheprocessingwithloopunrolling.Compute4outputsatatime.**asecondloopbelowcomputestheremaining1to3samples.*/安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第22页页共共4422页页while(blkCnt0u){/*readinputsfromsource*/in1=*pSrc;in2=*(pSrc+1);in3=*(pSrc+2);in4=*(pSrc+3);/*negatetheinput*/(1)in1=-in1;in2=-in2;in3=-in3;in4=-in4;/*storetheresulttodestination*/*pDst=in1;*(pDst+1)=in2;*(pDst+2)=in3;*(pDst+3)=in4;/*updatepointerstoprocessnextsamples*/pSrc+=4u;pDst+=4u;/*Decrementtheloopcounter*/blkCnt--;}/*IftheblockSizeisnotamultipleof4,computeanyremainingoutputsampleshere.**Noloopunrollingisused.*/blkCnt=blockSize%0x4u;#else/*RunthebelowcodeforCortex-M0*//*InitializeblkCntwithnumberofsamples*/blkCnt=blockSize;#endif/*#ifndefARM_MATH_CM0_FAMILY*/while(blkCnt0u){/*C=-A*//*Negateandthenstoretheresultsinthedestinationbuffer.*/*pDst++=-*pSrc++;/*Decrementtheloopcounter*/blkCnt--;}}1.浮点数的相反数求解比较简单,直接在相应的变量前加上负号即可。99..11..22aarrmm__nneeggaattee__qq3311这个函数用于求32位定点数的相反数,源代码分析如下:/***@briefNegatestheelementsofaQ31vector.*@param[in]*pSrcpointstotheinputvector*@param[out]*pDstpointstotheoutputvector*@param[in]blockSizenumberofsamplesinthevector*@returnnone.**bScalingandOverflowBehavior:/b(1)*\par*Thefunctionusessaturatingarithmetic.*TheQ31value-1(0x80000000)willbesaturatedtothemaximumallowablepositivevalue0x7FFFFFFF.安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第33页页共共4422页页*/voidarm_negate_q31(q31_t*pSrc,q31_t*pDst,uint32_tblockSize){q31_tin;/*Temporaryvariable*/uint32_tblkCnt;/*loopcounter*/#ifndefARM_MATH_CM0_FAMILY/*RunthebelowcodeforCortex-M4andCortex-M3*/q31_tin1,in2,in3,in4;/*loopUnrolling*/blkCnt=blockSize2u;/*Firstpartoftheprocessingwithloopunrolling.Compute4outputsatatime.**asecondloopbelowcomputestheremaining1to3samples.*/while(blkCnt0u){/*C=-A*//*Negateandthenstoretheresultsinthedestinationbuffer.*/in1=*pSrc++;in2=*pSrc++;in3=*pSrc++;in4=*pSrc++;*pDst++=__QSUB(0,in1);(2)*pDst++=__QSUB(0,in2);*pDst++=__QSUB(0,in3);*pDst++=__QSUB(0,in4);/*Decrementtheloopcounter*/blkCnt--;}/*IftheblockSizeisnotamultipleof4,computeanyremainingoutputsampleshere.**Noloopunrollingisused.*/blkCnt=blockSize%0x4u;#else/*RunthebelowcodeforCortex-M0*//*InitializeblkCntwithnumberofsamples*/blkCnt=blockSize;#endif/*#ifndefARM_MATH_CM0_FAMILY*/while(blkCnt0u){/*C=-A*//*Negateandthenstoretheresultinthedestinationbuffer.*/in=*pSrc++;*pDst++=(in==INT32_MIN)?INT32_MAX:-in;/*Decrementtheloopcounter*/blkCnt--;}}1.这个函数使用了饱和运算。饱和运算数值0x80000000将变成0x7FFFFFFF。2.饱和运算__QSUB我们在上一章已经详细讲述了,这就就是实现数值0减去相应的参数变量。安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第44页页共共4422页页99..11..33aarrmm__nneeggaattee__qq1155这个函数用于求16位定点数的相反数,源代码分析如下:/***@briefNegatestheelementsofaQ15vector.*@param[in]*pSrcpointstotheinputvector*@param[out]*pDstpointstotheoutputvector*@param[in]blockSizenumberofsamplesinthevector*@returnnone.**\parConditionsforoptimumperformance*Inputandoutputbuffersshouldbealignedby32-bit***bScalingandOverflowBehavior:/b(1)*\par*Thefunctionusessaturatingarithmetic.*TheQ15value-1(0x8000)willbesaturatedtothemaximumallowablepositivevalue0x7FFF.*/voidarm_negate_q15(q15_t*pSrc,q15_t*pDst,uint32_tblockSize){uint32_tblkCnt;/*loopcounter*/q15_tin;#ifndefARM_MATH_CM0_FAMILY/*RunthebelowcodeforCortex-M4andCortex-M3*/q31_tin1,in2;/*Temporaryvariables*//*loopUnrolling*/blkCnt=blockSize2u;/*Firstpartoftheprocessingwithloopunrolling.Compute4outputsatatime.**asecondloopbelowcomputestheremaining1to3samples.*/while(blkCnt0u){/*C=-A*//*Readtwoinputsatatime*/(2)in1=_SIMD32_OFFSET(pSrc);in2=_SIMD32_OFFSET(pSrc+2);/*negatetwosamplesatatime*/(3)in1=__QSUB16(0,in1);/*negatetwosamplesatatime*/in2=__QSUB16(0,in2);/*storetheresulttodestination2samplesatatime*/(4)_SIMD32_OFFSET(pDst)=in1;/*storetheresulttodestination2samplesatatime*/_SIMD32_OFFSET(pDst+2)=in2;/*updatepointerstoprocessnextsamples*/pSrc+=4u;pDst+=4u;/*Decrementtheloopcounter*/blkCnt--;}安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月11

1 / 42
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功