您好,欢迎访问三七文档
安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第11页页共共1122页页第第1177章章CCoommpplleexxMMaatthhFFuunnccttiioonnss的的使使用用((一一))本期教程主要讲解复数运算中的共轭,点乘和模的求解(什么是复数,大家应该还有印象吧,这个很重要,在后面FFT等算法的处理时都要用到,印象不深的同学需要简单的补充下高数知识)。17.1复数共轭运算ComplexConj17.2复数点乘ComplexDotProduct17.3复数求模ComplexMag17.4总结1177..11复复数数共共轭轭运运算算CCoommpplleexxCCoonnjj1177..11..11aarrmm__ccmmppllxx__ccoonnjj__ff3322公式描述:for(n=0;nnumSamples;n++){pDst[(2*n)+0)]=pSrc[(2*n)+0];//实部pDst[(2*n)+1)]=-pSrc[(2*n)+1];//虚部}函数定义如下:voidarm_cmplx_conj_f32(float32_t*pSrc,float32_t*pDst,uint32_tnumSamples)参数定义:*pSrcpointstotheinputvector*pDstpointstotheoutputvectornumSamplesnumberofcomplexsamplesineachvector注意事项:1.数组pSrc中存储的数据格式是(实部,虚部,实部,虚部……………),一定要按照这个顺序存储数据,比如数据1-j,j,2+3j这个三个数在数组中的存储格式就是:pSrc[6]={1,-1,0,1,2,3}。(注意第三个数据是0)。函数的输出结果pDst也是按照这个顺序存储的。1177..11..22aarrmm__ccmmppllxx__ccoonnjj__qq3311公式描述:安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第22页页共共1122页页for(n=0;nnumSamples;n++){pDst[(2*n)+0)]=pSrc[(2*n)+0];//实部pDst[(2*n)+1)]=-pSrc[(2*n)+1];//虚部}函数定义如下:voidarm_cmplx_conj_q31(q31_t*pSrc,q31_t*pDst,uint32_tnumSamples)参数定义:*pSrcpointstotheinputvector*pDstpointstotheoutputvectornumSamplesnumberofcomplexsamplesineachvector注意事项:1.数组pSrc中存储的数据格式是(实部,虚部,实部,虚部……………),一定要按照这个顺序存储数据,比如数据1-j,j,2+3j这个三个数在数组中的存储格式就是:pSrc[6]={1,-1,0,1,2,3}。(注意第三个数据是0)。函数的输出结果pDst也是按照这个顺序存储的。2.这个函数使用了饱和运算。3.数值0x80000000由于饱和运算将变成0x7FFFFFFF。1177..11..33aarrmm__ccmmppllxx__ccoonnjj__qq1155公式描述:for(n=0;nnumSamples;n++){pDst[(2*n)+0)]=pSrc[(2*n)+0];//实部pDst[(2*n)+1)]=-pSrc[(2*n)+1];//虚部}函数定义如下:voidarm_cmplx_conj_q15(q15_t*pSrc,q15_t*pDst,uint32_tnumSamples)参数定义:*pSrcpointstotheinputvector*pDstpointstotheoutputvectornumSamplesnumberofcomplexsamplesineachvector注意事项:1.数组pSrc中存储的数据格式是(实部,虚部,实部,虚部……………),一定要按照这个顺序存储数据,比如数据1-j,j,2+3j这个三个数在数组中的存储格式就是:pSrc[6]={1,-1,0,1,2,3}。(注意第三个数据是0)。函数的输出结果pDst也是按照这个顺序存储的。安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第33页页共共1122页页2.这个函数使用了饱和运算。3.数值0x8000由于饱和运算将变成0x7FFF。1177..11..44实实例例讲讲解解实验目的:1.学习ComplexMathFunctions中复数共轭的求解(首先大家要明白什么是复数共轭)实验内容:1.按下按键K1,串口打印函数DSP_CONJ的输出结果实验现象:通过窗口上位机软件SecureCRT(V5光盘里面有此软件)查看打印信息现象如下:程序设计:/***********************************************************************************************************函数名:DSP_CONJ*功能说明:浮点数复数共轭*形参:无*返回值:无**********************************************************************************************************/staticvoidDSP_CONJ(void){uint8_ti;float32_tpSrc[10]={1.1f,1.1f,2.1f,2.1f,3.1f,3.1f,4.1f,4.1f,5.1f,5.1f};float32_tpDst[10];q31_tpSrc1[10]={1,1,2,2,3,3,4,4,5,5};q31_tpDst1[10];q15_tpSrc2[10]={1,1,2,2,3,3,4,4,5,5};安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第44页页共共1122页页q15_tpDst2[10];/***浮点数共轭*******************************************************************************/arm_cmplx_conj_f32(pSrc,pDst,5);printf(***浮点数共轭********************************************\r\n);for(i=0;i5;i++)(1){printf(pSrc[%d]=%f%fjpDst[%d]=%f%fj\r\n,i,pSrc[2*i],pSrc[2*i+1],i,pDst[2*i],pDst[2*i+1]);}/***定点数共轭Q31*******************************************************************************/printf(***定点数共轭Q31*****************************************\r\n);(2)arm_cmplx_conj_q31(pSrc1,pDst1,5);for(i=0;i5;i++){printf(pSrc1[%d]=%d%djpDst1[%d]=%d%dj\r\n,i,pSrc1[2*i],pSrc1[2*i+1],i,pDst1[2*i],pDst1[2*i+1]);}/***定点数共轭Q15*******************************************************************************/printf(***定点数共轭Q15*****************************************\r\n);arm_cmplx_conj_q15(pSrc2,pDst2,5);for(i=0;i5;i++)(3){printf(pSrc2[%d]=%d%djpDst2[%d]=%d%dj\r\n,i,pSrc2[2*i],pSrc2[2*i+1],i,pDst2[2*i],pDst2[2*i+1]);}}1.这里先简单的普及一下复数共轭的基础知识,可能很多人都已经忘记了(来自wiki百科):在数学中,复数的复共轭(常简称共轭)是对虚部变号的运算,因此一个复数的复共轭是举例明之:在复数的极坐标表法下,复共轭写成这点可以透过欧拉公式验证将复数理解为复平面,则复共轭无非是对实轴的反射。复数的复共轭有时也表为。安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第55页页共共1122页页下面再说一下如何在matlab上面共轭复数。比如我们要求解数组a=[1+2j2+2j3+3jj]的共轭复数:2.Q31格式定点数的共轭求解。3.Q15格式定点数的共轭求解。1177..22复复数数点点乘乘CCoommpplleexxDDoottPPrroodduucctt1177..22..22aarrmm__ccmmppllxx__ddoott__pprroodd__ff3322公式描述:realResult=0;imagResult=0;for(n=0;nnumSamples;n++){realResult+=pSrcA[(2*n)+0]*pSrcB[(2*n)+0]-pSrcA[(2*n)+1]*pSrcB[(2*n)+1];安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第66页页共共1122页页imagResult+=pSrcA[(2*n)+0]*pSrcB[(2*n)+1]+pSrcA[(2*n)+1]*pSrcB[(2*n)+0];}函数定义如下:voidarm_cmplx_dot_prod_f32(float32_t*pSrcA,float32_t*pSrcB,uint32_tnumSamples,float32_t*realResult,float32_t*imagResult)参数定义:*pSrcApointstothefirstinputvector*pSrcBpointstothesecondinputvectornumSamplesnumberofcomplexsamplesineachvector*realResultrealpartoftheresultreturnedhere*imagResultimaginarypartoftheresultreturnedhere注意事项:1.数组pSrc和pDst中存储的数据格式是(实部,虚部,实部,虚部……………),一定要按照这个顺序存储数据,比如数据1-j,j,2+3j这个三个数在数组中的存储格式就是:pSrc[6]={1,-1,0,1,2,3}。(注意第三个数据是0)。输出结果的实部和虚部是分开的。1177..22..33aarrmm__ccmmppllxx__ddoott__pprroodd
本文标题:第17章ARM官方DSP库的ComplexMathFunctions的使用教程(一)
链接地址:https://www.777doc.com/doc-5071952 .html