第10章ARM官方DSP库的FastMathFunctions的使用

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

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

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

资源描述

安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第11页页共共1111页页第第1100章章FastMathFunctions的的使使用用本期教程开始,我们将不再专门的分析DSP函数的源码,主要是有些DSP函数的公式分析较麻烦,有兴趣的同学可以自行研究,本期教程开始主要讲解函数如何使用。10.1三角函数Cosine10.2三角函数Sine10.3平方根Sqrt10.4实例讲解(Matlab验证)10.5总结1100..11三三角角函函数数CCoossiinnee三角函数cosine的计算是通过查表并配合三次插补实现的。具体的实现方法大家可以查阅相关资料进行了解。1100..11..11aarrmm__ccooss__ff3322此函数的使用比较简单,函数定义如下:float32_tarm_cos_f32(float32_tx)注意输入参数x是弧度制即可,也就是说cos函数的一个周期对应于弧度[02*PI)。下面我们先通过Matlab绘制一个周期的cos曲线。新建一个.m格式的脚本文件,并写入如下函数:x=0:0.01:2*pi;plot(x,cos(x))运行后显示效果如下:安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第22页页共共1111页页点击上面截图中的Tools-Datastatistics,获取数据的分析结果,我们主要看Y轴。最大值和最小值分别对应1和-1,这个与我们所学的理论知识是相符的。1100..11..22aarrmm__ccooss__qq3311函数定义如下:q31_tarm_cos_q31(q31_tx)使用中只需注意参数x的数值范围[02^31)相当于弧度[02*PI)即可。1100..11..33aarrmm__ccooss__qq1155函数定义如下:q31_tarm_cos_q15(q15_tx)使用中只需注意参数x的数值范围[02^15)相当于弧度[02*PI)即可。安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第33页页共共1111页页1100..22三三角角函函数数SSiinnee三角函数sine的计算是通过查表并配合三次插补实现的。具体的实现方法大家可以查阅相关资料进行了解。1100..22..11aarrmm__ssiinnee__ff3322此函数的使用比较简单,函数定义如下:float32_tarm_sin_f32(float32_tx)注意输入参数x是弧度制即可,也就是说sine函数的一个周期对应于弧度[02*PI)。下面我们先通过Matlab绘制一个周期的sine曲线。新建一个.m格式的脚本文件,并写入如下函数:x=0:0.01:2*pi;plot(x,sine(x))运行后显示效果如下:点击上面截图中的Tools-Datastatistics,获取数据的分析结果,我们主要看Y轴。安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第44页页共共1111页页最大值和最小值分别对应1和-1,这个与我们所学的理论知识是相符的。1100..22..22aarrmm__ssiinn__qq3311函数定义如下:q31_tarm_sin_q31(q31_tx)使用中只需注意参数x的数值范围[02^31)相当于弧度[02*PI)即可。1100..22..33aarrmm__ssiinn__qq1155函数定义如下:q31_tarm_sin_q15(q15_tx)使用中只需注意参数x的数值范围[02^15)相当于弧度[02*PI)即可。1100..33平平方方根根ssqqrrtt浮点数的平方根计算只需调用一条浮点指令即可,而定点数的计算要稍显麻烦。1100..33..11aarrmm__ssqqrrtt__ff3322对于CM4带FPU的处理器来说,浮点数的平方根求解很简单,只需调用指令__sqrtf,仅需要14个时钟周期就可以完成。函数定义如下(在arm_math.h里面):static__INLINEarm_statusarm_sqrt_f32(float32_tin,float32_t*pOut)1100..33..22aarrmm__ssqqrrtt__qq3311函数的定义如下:arm_statusarm_sqrt_q31(q31_tin,q31_t*pOut)这里in的输入范围是0x00000000到0x7FFFFFFF,转化成浮点数范围就是[0+1)。在使用这个函数的时候有一点要特别的注意,比如我们要求1000的平方根,而获得结果是1465429,这是为什么呢,分析如下:安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第55页页共共1111页页定点数1000=浮点数1000/(2^31)=4.6566e-07(用Q31表示)。对4.6566e-07求平方根可得6.8239e-04。定点数1465429=浮点数1465429/(2^31)=6.8239e-04。简单的总结下上面的意思就是说,求定点数1000的平方根,实际是求浮点数4.6566e-07(用Q31表示)的平方根。1100..33..33aarrmm__ssqqrrtt__qq1155函数的定义如下:arm_statusarm_sqrt_q15(q15_tin,q15_t*pOut)这里in的输入范围是0x0000到0x7FFF,转化成浮点数范围就是[0+1)1100..44实实例例讲讲解解((MMaattllaabb验验证证))实验目的:1.学习FastMathFunctions中的Sine,Cosine和Sqrt,并配合Matlab进行验证结果实验内容:1.按下按键K1,串口打印函数DSP_Cosine的输出结果2.按下按键K2,串口打印函数DSP_Sine的输出结果3.按下按键K3,串口打印函数DSP_Sqrt的输出结果实验现象:通过窗口上位机软件SecureCRT(V5光盘里面有此软件)查看打印信息现象如下(以按下K1为例):程序设计:/*安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第66页页共共1111页页**********************************************************************************************************函数名:DSP_Cosine*功能说明:求cos函数*形参:无*返回值:无**********************************************************************************************************/staticvoidDSP_Cosine(void){q31_tpOut;float32_tpOut1;uint16_ti;/***************************cos函数*****************************************/for(i=0;i256;i++)(1){/*参数的输入范围是[02*pi)*/printf(%f\r\n,arm_cos_f32(i*PI/128));}printf(***************************************************************\r\n);for(i=0;i256;i++){/*这里是0到32767对于[02*pi)*/printf(%d\r\n,arm_cos_q15(i*128));}printf(***************************************************************\r\n);for(i=0;i256;i++){/*这里是0到2^31-1对应于[02*pi)*/printf(%d\r\n,arm_cos_q31(i*8388608));}printf(***************************************************************\r\n);}/***********************************************************************************************************函数名:DSP_Sine*功能说明:求sine函数*形参:无*返回值:无**********************************************************************************************************/staticvoidDSP_Sine(void){q31_tpOut;float32_tpOut1;uint16_ti;/***************************sin函数*****************************************/for(i=0;i256;i++)(2){/*参数的输入范围是[02*pi)*/printf(%f\r\n,arm_sin_f32(i*PI/128));}printf(***************************************************************\r\n);for(i=0;i256;i++){/*这里是0-32767对于[02*pi)*/printf(%d\r\n,arm_sin_q15(i*128));}printf(***************************************************************\r\n);for(i=0;i256;i++){/*这里是0-(pow(2,31)-1)对应于[02*pi)*/printf(%d\r\n,arm_sin_q31(i*8388608));安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第77页页共共1111页页}printf(***************************************************************\r\n);}/***********************************************************************************************************函数名:DSP_Sqrt*功能说明:求平方根*形参:无*返回值:无**********************************************************************************************************/sta

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

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

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

×
保存成功